第4章 システムログファイルの分析と管理

目次

4.1. /var/log/ 内にあるシステムログファイル
4.2. ログファイルの閲覧と分析
4.3. logrotate を利用したログファイルの管理
4.4. logwatch を利用したログファイルの監視
4.5. システムログへの記録コマンド logger

システムログファイルの分析作業は、システムを分析するにあたって最も重要な 作業のうちの 1 つです。実際、システムログファイルの分析作業は、システムの メンテナンスやトラブル解析を行なう際、最初にやっておかなければならない作業 です。 openSUSE では、システムで発生した各種の事象について、ほぼすべての 詳細を自動的に記録するようになっています。通常、システムログファイルは単なる テキスト形式のファイルに記録されるため、エディタやページャなどを利用して簡単に 閲覧することができます。これらはスクリプトなどからも処理できる仕組みになって いて、内容文でフィルタする作業も簡単に行なうことができます。

4.1. /var/log/ 内にあるシステムログファイル

システムログファイルは、必ず /var/log ディレクトリ以下に 配置されます。下記の表では、既定の手順でインストールを行なった場合に openSUSE から提供される、すべてのシステムログファイルに関する概要を示しています。 お使いのマシンのインストール形態によっては、 /var/log ディレクトリ内に、ここでは説明していない他のサービスやアプリケーションからの ログが存在する場合もあります。また、下記で説明しているファイルやディレクトリは、 関連するアプリケーションがインストールされている場合にのみ使用される 「プレースホルダ」 を示している場合もあります。また、多くの ログファイルは root でないと閲覧できません。

acpid

ACPI (Advanced Configuration and Power Interface) のイベントをユーザ スペース側のプログラムに通知するデーモン、 acpid (acpid) が出力するログファイル です。 acpid では、 STDOUT や STDERR と同様に、すべての動作をログファイルに記録します。

apparmor

AppArmor のログファイルです。 AppArmor について、詳しくは パート 「AppArmor を利用した権利制限」 (↑セキュリティガイド) をお読みください。

audit

監査フレームワークが提供するログファイルです。

boot.msg

システムの起動処理時のログファイルです。このファイルには、カーネルが 出力した起動時のメッセージのほか、起動処理時に実行された起動スクリプトや 開始されたサービスからのメッセージがすべて記録されています。

お使いのハードウエアが正しく初期化されているかどうかや、すべてのサービスが 正しく起動できているかどうかを確認するには、このファイルをお読みください。

boot.omsg

システムのシャットダウン処理時のメッセージファイルです。このファイルには、 直近のシャットダウンや再起動で出力された、すべてのメッセージが記録されて います。

ConsoleKit/*

ConsoleKit デーモン (ユーザのログインのほか、コンピュータをどのように利用したのかを追跡する デーモン) のログファイルです。

cups/

cups (common UNIX printing system) (cups) が記録するアクセスログとエラーログが保存されます。

faillog

すべてのログイン失敗事象を記録するデータベースファイルです。 このファイルを閲覧するには、 faillog コマンドを お使いください。詳しくは man 8 faillog をお読みください。

firewall

ファイアウオールのログファイルです。

gdm/*

GNOME ディスプレイマネージャのログファイルです。

krb5

Kerberos ネットワーク認証システムのログファイルです。

lastlog

lastlog ファイルは、各ユーザの最終ログインを記録するデータベース です。このファイルを閲覧するには、 lastlog コマンドを お使いください。詳しくは man 8 lastlog をお読みください。

localmessages

DHCP クライアントのログなど、起動スクリプトからのメッセージが 記録されるログファイルです。

mail*

メールサーバ (postfix, sendmail) のログファイルです。

messages

すべてのカーネルメッセージやシステムメッセージが記録される、既定の ログファイルです。何らかの問題が発生した場合、 /var/log/warn とともに最初に確認しておくべきログファイルです。

NetworkManager

NetworkManager のログファイルです。

news/*

news サーバのログファイルです。

ntp

NTP (Network Time Protocol) デーモン (ntpd) のログファイルです。

pk_backend_zypp

PackageKit (と libzypp バックエンド) のログファイルです。

puppet/*

データセンター自動化ツールである puppet のログファイルです。

samba/*

Windows SMB/CIFS ファイルサーバである samba のログファイルです。

SaX.log

SaX2 (SUSE advanced X11 configuration tool) のログファイルです。

scpm

SCPM (system configuration profile management) (scpm) のログファイルです。

warn

すべてのシステム警告とエラーが記録されるログファイルです。 何らかの問題が発生した場合、 /var/log/messages とともに最初に確認しておくべきログファイルです。

wtmp

すべてのログイン/ログアウトやランレベルの変更、およびリモート接続の動作を 記録するデータベースファイルです。このファイルを閲覧するには、 last コマンドをお使いください。詳しくは man 1 last をお読みください。

xinetd.log

xinetd (extended Internet services daemon) (xinetd) のログファイルです。

Xorg.0.log

X の起動時のログファイルです。 X の起動に失敗するような場合、このファイルを お読みください。それぞれ古いログファイルは Xorg.?.log として保存されます。

YaST2/*

すべての YaST ログファイルが保管されるディレクトリです。

zypp/*

libzypp のログファイルが 保管されるディレクトリです。これらのファイルを利用することで、 パッケージのインストール履歴を確認することができます。

zypper.log

コマンドラインインストーラである zypper の ログファイルです。

4.2. ログファイルの閲覧と分析

ログファイルは、お使いのテキストエディタで開くだけで閲覧することができます。 それ以外にも、 YaST コントロールセンターから その他+システムログ を選択すると、 /var/log/messages を閲覧することができます。

テキストコンソール内でログファイルを閲覧する場合は、 less や more を利用するのが便利です。これ以外にも、 head や tail を利用することで、ログ ファイルの冒頭や末尾を表示することができます。ログファイルに追記される 内容をリアルタイムに閲覧するには、 tail -f をお使いください。これらのツールについての詳細は、各マニュアルページを お読みください。

また、ログファイル内で文字列や正規表現による検索を行ないたい場合は grep を利用します。ログファイルを自動的に処理したり、 書き換えたりしたい場合は、 awk が便利でしょう。

4.3. logrotate を利用したログファイルの管理

/var/log ディレクトリ内に記録されるログファイルは 日々追記されるため、知らないうちに肥大化してしまうようなことがよくあります。 logrotate コマンドはそのような巨大なログファイルを 処理するツールで、これらのファイルの管理を容易にし、肥大化を制御するための 仕組みが備わっています。具体的にはログファイルの自動的なローテーション (切り替え) や削除、圧縮やメール送付などに対応しています。また、ログファイルは 定期的 (日次、週次、月次) に処理させることができるほか、指定したサイズを 超えた場合などを指定することができます。

logrotate は通常、日次の cron ジョブとして実行します。 また、サイズ超過によるものや logrotate を 1 日に複数回 実施したり、 --force オプションを指定したりしない限り、 1 日 1 回以上のログファイル処理は行なわれません。

logrotate の中枢となる設定ファイルは /etc/logrotate.conf です。ログファイルを生成するような プログラム (たとえば apache2 など) の場合、そのシステムパッケージには /etc/logrotate.d/ 内に配置される独自の設定ファイルが含まれています。 /etc/logrotate.d/ ディレクトリは、 /etc/logrotate.conf から読み込むように指定しています。

例4.1 /etc/logrotate.conf の設定例

# 詳細は "man logrotate" をお読みください。
# ログファイルを毎週ローテーション (切り替え) します
weekly

# 4 週分までの過去ログを保存します
rotate 4

# 古いログファイルをローテーションした場合、新しい (何もない) ファイルを作成します
create

# ローテーションしたファイルには、接尾辞として日付を付与します
dateext

# ログファイルを圧縮したい場合、下記のコメントを外してください
#compress

# gzip やその他の圧縮方法を使用したい場合、下記の行をコメントアウトしてください
scompresscmd /usr/bin/bzip2
uncompresscmd /usr/bin/bunzip2

# 各種の RPM パッケージでは、下記のディレクトリ内にローテーション情報を
# 配置します
include /etc/logrotate.d

[Important]

create オプションを利用する場合は、 /etc/permissions* ファイル内で指定されるファイルの パーミッション (アクセス権) や所有者情報にご注意ください。これらの設定を 修正する場合は、矛盾がないことをよくご確認ください。

logrotate は cron の設定ファイル /etc/cron.daily/logrotate 内で設定され呼び出されます。 直近でどのファイルがローテーションされたのかを知るには、 /var/lib/logrotate.status をお読みください。

4.4. logwatch を利用したログファイルの監視

logwatch はカスタマイズの可能なプラグイン型ログ監視 スクリプトです。システムログを処理して最も重要な情報だけを取り出し、 人間にとって読みやすい形式で表示します。 logwatch コマンドを利用するには、 logwatch パッケージを インストールしてください。

logwatch はコマンドラインから実行することで、その時点の レポートを生成することができるほか、 cron を介して実行することで、カスタムな レポートを生成することができます。レポートは画面上に表示させることが できるほか、ファイルへの保存や特定アドレスへのメール送信を行なうことが できます。後者は特に cron での自動生成時に有用な機能です。

コマンドラインの文法は簡単な仕組みです。基本的には logwatch に続いて生成するレポートに記載するサービスの種類や時間範囲、 詳細レベルなどを指定します:

# 昨日以降のすべてのカーネルメッセージについて詳細なレポートを生成する
logwatch --service kernel --detail High --range Yesterday --print

# すべての sshd 関連の記録イベントについて、詳細レベルを低くしてレポートを生成する (アーカイブされたログを含む)
Low detail report on all sshd events recorded (incl. archived logs)
logwatch --service sshd --detail Low --range All --archives --print

# 5 月 5 日から 5 月 7 日までに生成されたすべての smartd メッセージについて、 root@localhot 宛にメールでレポートを送信する
logwatch --service smartd --range 'between 5/5/2005 and 5/7/2005' \
--mailto root@localhost --print

--range オプションでは複雑な書き方をすることもできます。詳しくは logwatch --range help を実行してください。 また、問い合わせ可能なすべてのサービスについて一覧を表示するには、下記の コマンドを実行します:

ls /usr/share/logwatch/default.conf/services/ | sed 's/\.conf//g'

logwatch は、かなり細かい範囲にまで設定を行なうことができます。 ですが、ほとんどの場合は既定の設定のままで十分です。既定の設定ファイルは /usr/share/logwatch/default.conf/ にあります。この ファイルは直接編集したりしないでください。これはパッケージに含まれるファイルで あり、今後のソフトウエア更新で上書きされてしまう可能性があるためです。その 代わり、独自の設定ファイルを /etc/logwatch/conf/ 内に 作成してお使いください (上述のファイルを雛形として使用してもかまいません) 。 logwatch のカスタマイズ方法について、手順などの HOWTO が /usr/share/doc/packages/logwatch/HOWTO-Customize-LogWatch 内にあります。また、下記のような設定ファイルもあります:

logwatch.conf

メインの設定ファイルです。既定のバージョンは細かくコメントが書かれています。 それぞれの設定オプションは、コマンドラインから上書きすることができます。

ignore.conf

logwatch で無視されるべきすべての行を記述します。

services/*.conf

このサービスディレクトリには、レポートを生成するための各サービスに関する 設定ファイルが配置されます。

logfiles/*.conf

各サービスについて処理されるべきログファイルの仕様が書かれています。

4.5. システムログへの記録コマンド logger

logger はシステムログに対して、記録を行なうための ツールです。これはシェルのコマンドインターフェイスから、 syslog(3) システムログモジュールへのインターフェイスを提供するものです。たとえば 下記のように実行すると、 /var/log/messages 内に それが記録されます:

logger -t Test "This messages comes from $USER"

現在のユーザ名とホスト名に依存しますが、 /var/log/messages ファイルには下記のような行が 記録されます:

Sep 28 13:09:31 venus Test: This messages comes from tux