2009/9/26追記
本ページで紹介している logcheck は C と Perl の組み合わせによって構成されていますが、C++ のみで書かれた、よりシンプルで柔軟性のある運用が可能な logdo が公開されています。logcheck より管理・運用がしやすいツールですので logdo の利用をお奨めします。
logcheckはsyslog等のログに自分の目的とするメッセージが記録されたときに、メール等を用いて、そのメッセージを通知してくれるツールです。
logcheckは、ログファイルを監視して新たなログの記録があったときにスクリプトを呼び出すCで作られたlogcheckと、メッセージをチェックして必要なときにメール等で通知を行うPerlで作られたlogcheck.plの二つから成ります。
logcheckの使い方は以下の通りです。
logfileで、監視したいログファイルを指定します。これは省略できません。logcheck -l logfile -s script [-i interval] [-a]
とすれば、tail -f logfileと同じような動作をします。tailとの違いは、追加されたものだけを処理の対象とするので、すでに記録されているログは無視することと、途中でログファイルが消されて、新たにログファイルが作られても問題なく動作することです。logcheck -l logfile -s cat
logcheck.plの使い方は以下の通りです。
mail addressで、通知先のメールアドレスを指定します。指定がない場合はメールプログラムは起動されずに、標準出力に出力します。logcheck.pl [-m mail address] [-s mail subject] [-M mail command] [-F mail filter] [-e regular expression] [-f compare field No.] [-b]
-bオプションを指定すると、チェックした時点で通知すべき内容をまとめて一つのメッセージにして通知します。これが指定されていない場合、記録されたプロセス単位で通知されます。上記の例の場合、-bオプションが指定されてない場合、bar[12345]の分とbar[12346]の分の2回通知が行われます。Jun 30 01:23:45 foo bar[12345]: start Jun 30 01:23:46 foo bar[12345]: stop Jun 30 01:23:47 foo bar[12346]: start Jun 30 01:23:48 foo bar[12346]: stop
例えば、/var/log/syslogファイルを60秒毎に監視して、デーモンbarのstartが発生したら、junt@aihara.co.jpに通知するには以下のようにします。
また、メールではなく、拙作ipmsgsendを使って、IP Messengerに通知したい場合は、例えば、通知先のコンピュータがpc100という名前の場合、以下のようにします。IP Messenger で扱える漢字コードはシフトJISなので、-F "|nkf -s"でメッセージをシフトJISに変換しています。また、-sオプションで指定しているのが、サブジェクトではなくメッセージの通知先のコンピュータ名になっているのは、ipmsgsend にはサブジェクトの必要がない代わりに、通知先のコンピュータ名が必要なので、-sオプションで指定された内容がメールプログラムの最初の引数になることを利用して、これを指定しています。logcheck -l /var/log/syslog -i 60 -s 'logcheck.pl -e "bar.*start" -m "junt@aihara.co.jp"'
logcheck -l /var/log/syslog -i 60 -s 'logcheck.pl -e "bar.*start" -M "ipmsgsend" -F "|nkf -s" -s "pc100" -m "junt"'