慣れていないと,ログは意味不明の文字の羅列に過ぎない。しかし,ログには貴重な情報がたくさん含まれている。システム管理者にとって欠かすことのできない情報だ。本稿では,一人でも多くの管理者がログに親しめるよう,ログの運用・管理方法を可能な限り平易に説明した。また,簡単なコマンドを使ったログの分析法も取り上げた。本稿を読み,「やってみれば楽しいかも」と少しでも思えば,ログの運用・管理をマスタできる日も近いだろう。 (本誌)

 新米のシステム管理者が最初に直面する壁として,「ログを見る」ことが挙げられる。ログには,サーバが現在どういう動作をしているかの情報が蓄積されていく。正直,新米のシステム管理者にとっては,わけのわからない英文の羅列にしか見えない。しかも,ログは量が膨大である。うんざりして見る気もしないのが,実情ではないだろうか。

 しかし,ログは情報の宝庫だ。ログを見る(解読する)ことができれば,トラブルが発生した場合に,慌てることなく冷静に対処することができる。また,アプリケーションが出力したログだと,そこに含まれている情報からそのアプリケーションをチューニングすることも可能になる。ログには,それだけ価値のある情報が詰まっている。これを利用しない手はない。

 ログを見るには,普段の正常な状態を把握している必要がある。なぜなら,トラブルが発生した時に,ログに記載されているイベントが正常か,異常かを判断できなければならないからだ。このためには,常日頃からログに親しみ,ログの読み方を理解しておく必要がある。

 そこで今回は,ワンランク上のシステム管理者を目指す人を対象に,Linuxをベースとしたログの見方,ログの親しみ方を紹介しようと思う。

 Linuxに代表されるUNIX系OSのログの管理の仕組みは,大別して二つがある。一つがsyslogdと呼ぶデーモンを経由してログを出力する仕組みで,さまざまなプログラムにおいて,共通形式のログを提供することを目的としている。

 もう一つは,各アプリケーションのログである。このログには,特定アプリケーションのログだけが保存される。例えば,WebサーバであるApacheのアクセス・ログなどがこれに相当する。

 今回はLinuxにおけるログ管理の汎用的な理解を促すために,Red Hat Linux 7.3におけるsyslogを中心に解説する。syslogはUNIX系OS全般で採用されているログ管理方法であり,今回説明する内容は,そのままほかのディストリビューションやほかのUNIX系OSでも活用できる。ぜひ,マスタしてほしい。

syslogとsyslog.conf

 Red Hat Linux 7.3において,syslogの実体は/sbin/syslogdプログラム(デーモン)である。マシンが動作している際に何かのイベントが発生したり,システムの状態に変化があった場合,このプログラムがログを記録していく。

 ログ自体は,プログラムの設定にもよるが主に/var/log/messagesに保存される。具体的には,カーネル,デーモン,認証関連,ユーザ・アプリケーションに関連した情報を蓄積していく。保存する情報のレベルを変え,特定のアプリケーションだけを別のファイルや別ホストに保存することも可能だ。この設定を行うのが,/etc/syslog.confファイルである。

図1 /etc/syslog.confファイルの記述例
 Red Hat Linux7.3の場合,syslog.confは図1[拡大表示]のような初期設定になっている。行頭に「#」がある場合は,コメント行とみなされる。基本的な記述形式は「<facility.priority> [空白タブ]<action>」のようになる。

 syslog.confでは1行に一つのルールを記述する。<facility.priority>と<action>は,必ず一つ以上の空白タブで区切る。スペースなどの空白で区切ると正しく動作しない。注意が必要だ。

表1 /etc/syslog.confファイルに指定可能なファシリティとその意味
表2 /etc/syslog.confファイルに指定可能なプライオリティとその意味
 <facility.priority>の中身は,「facility=ファシリティ」と「priority=プライオリティ(優先度)」で指定する。ファシリティは,出力するログの種別を表し,具体的に表1[拡大表示]のようになる。この表以外にも,Linuxなら「security」のようなOS固有のファシリティもある。

 プライオリティは,ログを重要度に合わせて出力するための指定だ。種別は表2[拡大表示]の通りである。表2は重要度の低い順になっている。重要度と関係のない例外として,メッセージを出力しない「none」という書式もある。

 例えば,ファシリティにdaemonを指定し,プライオリティinfo以上のメッセージをファイル/var/log/daemon.logに記録するには,

daemon.info /var/log/daemon.log

と指定する。これで,info以上のinfo,notice,warn(warning),err(error),crit,alert,emerg,panicの情報が出力される。指定したログ・ファイルが存在しない場合は自動的に新規に作成される。

 すべてのファシリティまたはプライオリティを指定する場合は「*」が使える。特定のプライオリティだけ(例えばinfoだけ)を指定したい場合は,「daemon.=info」のように「=」を使えばよい。特定プライオリティ未満を記録したい場合は,「daemon.!warn」のように「!」を使う。すると,debug,warn,noticeの情報が記録される。

表3 主なプライオリティの指定方法
表4 /etc/syslog.confファイルで指定できる出力先。<action>に指定する
図2 /etc/syslog.confファイルに記述する<action>の記述例
 また,特定ファシリティ以外(例えばwarn以外)の情報を記録したい場合は「daemon.!=warn」という具合に「!=」を使えばよい。プライオリティをどのように指定すれば,どのログが記録されるかは表3[拡大表示]にまとめた。たった三つの文字の組み合わせで色々なパターンの出力が可能なのがわかる。参考にしてほしい。

 ほかには,「;」で複数のログの項目名を指定することが可能だ。例えば,すべてのファシリティのエラー・ログ(err)を/var/log/err.logに記録するが,量の多いエラー・メールのログだけは除外したい場合,「*.err;!mail.* /var/log/err.log」のように指定する。

 一方の<action>では,メッセージの出力先を指定する。表4[拡大表示]のような指定が可能だ。例えば,認証関連の情報を他のホストloghostに飛ばす場合は,「auth.*;authpriv.* @loghost」と指定する。不正アクセスを受けた場合,侵入者が真っ先に消すのは認証情報である。このような設定にしておけば,不正アクセスを受けたホストから情報が削除されても,loghostに残った正しい情報から侵入者のアクセス情報を調べることができる。<action>をうまく使う例を図2[拡大表示]に示しておく。

syslogを再起動

 syslog.confを編集しても,そのままでは設定が反映されない。忘れないようにsyslogdデーモンを再起動する必要がある。これは,

# /etc/rc.d/init.d/syslog restart

図3 syslogdデーモンを再起動したところ
のようにコマンドを打てばよい(図3[拡大表示])。

 もう一つの方法として,syslogdにHUPシグナルを送信して設定を有効化させる方法もある。まずはsyslogdのプロセスIDを確認する。これは

# ps -ef|grep syslog

とコマンド実行すればよい。このコマンドは,プロセス一覧から「syslog」という文字列が含まれる行を抜き出した例である。

図4 syslogdのプロセスIDを確認したところ
 すると,図4[拡大表示]のように画面表示されるだろう。この例では,syslogdのプロセスIDは8981だとわかる。syslogdのプロセスIDにHUPシグナルを送信するには,

# kill -HUP 8981

のコマンドを打てばよい。これでsyslogを再起動できる。

濱本 常義
筆者は中国情報システムサービスに勤務。ソリューション事業本部システム営業部で,セキュリティ対策関連事業に従事している。現在は,主にセキュリティ・ポリシ策定事業に携わっている。セキュリティ関連のメーリング・リスト「connect24h」を運営している。本稿に関する質問や要望はhamamoto@hicat.ne.jpまで。