logcheck

[戻る]

2009/9/26追記

本ページで紹介している logcheck は C と Perl の組み合わせによって構成されていますが、C++ のみで書かれた、よりシンプルで柔軟性のある運用が可能な logdo が公開されています。logcheck より管理・運用がしやすいツールですので logdo の利用をお奨めします


はじめに

logcheckはsyslog等のログに自分の目的とするメッセージが記録されたときに、メール等を用いて、そのメッセージを通知してくれるツールです。
logcheckは、ログファイルを監視して新たなログの記録があったときにスクリプトを呼び出すCで作られたlogcheckと、メッセージをチェックして必要なときにメール等で通知を行うPerlで作られたlogcheck.plの二つから成ります。

logcheckの使い方

logcheckの使い方は以下の通りです。

logcheck -l logfile -s script [-i interval] [-a]
logfileで、監視したいログファイルを指定します。これは省略できません。
scriptで、ログファイルに記録があったとき呼び出すスクリプト指定します。これは省略できません。
intervalで、監視する間隔を秒単位で指定します。省略した場合1秒になります。
-aオプションを指定すると、その時点で新たに記録のあったすべてのログを一度にスクリプトに渡します。指定がない場合は、1行毎にスクリプトを呼び出します。

監視しているログファイルに新たに記録が追加された場合、logcheckはscriptを呼び出し、その標準入力に対して新たに記録されたログを出力します。 例えば、
logcheck -l logfile -s cat
とすれば、tail -f logfileと同じような動作をします。tailとの違いは、追加されたものだけを処理の対象とするので、すでに記録されているログは無視することと、途中でログファイルが消されて、新たにログファイルが作られても問題なく動作することです。

logcheck.plの使い方

logcheck.plの使い方は以下の通りです。

logcheck.pl [-m mail address] [-s mail subject] [-M mail command]
            [-F mail filter] [-e regular expression]
            [-f compare field No.] [-b]
mail addressで、通知先のメールアドレスを指定します。指定がない場合はメールプログラムは起動されずに、標準出力に出力します。
mail subjectで、通知メールのサブジェクトを指定します。指定がない場合は[logcheck]になります。
mail commandで、メールプログラムを指定します。指定がない場合はmail -sになります。メールプログラムは、例えばこの場合、mail -s "mail subject"というように、後ろにサブジェクトが付けられて起動されるので、必要であればこのようにメールプログラムのオプションを付加して指定してください。
mail filterで、メールプログラムにメッセージを渡す前に通すフィルタを指定します。指定がない場合はnkf -jになり、漢字コードをJISに変換します。
regular expressionで、メッセージに対する正規表現を指定します。この正規表現にマッチした場合に通知が行われます。指定がない場合は.*になります。
複数行が入力されたとき、連続した行が同じプロセスのログであった場合、これらをまとめて通知します。このとき、compare field No.で、同じプロセスのログであることを判定するフィールドの番号を指定します。指定がない場合は4になります。ここでは、先頭のフィールド番号を0とします。例えば、以下のようなログの場合、フィールド番号を4とすると、最初の行の4番目のフィールドはbar[12345]:ですから、1行目と2行目は同じプロセス、3行目は違うプロセスですが、この3行目は4行目と同じプロセスであると判断します。
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
-bオプションを指定すると、チェックした時点で通知すべき内容をまとめて一つのメッセージにして通知します。これが指定されていない場合、記録されたプロセス単位で通知されます。上記の例の場合、-bオプションが指定されてない場合、bar[12345]の分とbar[12346]の分の2回通知が行われます。

logcheck.plはWhat's ``What's New!''を参考に作成しました m(_ _)m。

ログチェックの仕方

例えば、/var/log/syslogファイルを60秒毎に監視して、デーモンbarstartが発生したら、junt@aihara.co.jpに通知するには以下のようにします。

logcheck -l /var/log/syslog -i 60 -s 'logcheck.pl -e "bar.*start" -m "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 "ipmsgsend" -F "|nkf -s" -s "pc100" -m "junt"'

基本的に単機能のプログラムの組合せなので、logcheck.plを使わなくても良いですし、シェルスクリプトを用いて、一回の記録の発生で、いくつものチェックと通知を行うことも可能です。


Copyright © 1999 by Jun Takahashi