ログ監視にSwatchの導入を検討
以前といってもだいぶ前だけど、スクラッチで作ったアプリのエラーログをハンドリングできず問題になったことがあった。かといっても独自でsyslogとか立てられないので、Perlで書かれたログ監視アプリのSwatch(Simple WATCHer)というツールを使おうかと検討していましたが、なかなか暇がなくほったらかしに・・・これではいけないのでまずは試してみることにしました。
インストール
導入前の検証用にインストールしてみることにしました。ソースは以下の最新版(2009年7月時点)のものを使用。Perlは5.8.8。
http://jaist.dl.sourceforge.net/sourceforge/swatch/swatch-3.2.2.tar.gz
ターミナル経由で直接ファイルをダウンロードするにはwgetを使う。
wget http://jaist.dl.sourceforge.net/sourceforge/swatch/swatch-3.2.2.tar.gz
インストール手順など参考にさせてもらったところでは以下のPerlモジュールが必要らしので、あらじめCPANでインストールしておく。
- Date::Calc
- Date::Parse
- File::Tail
- Time::HiRes
モジュールのインストールが終わったら、ダウンロードしたSwatchのファイルを解凍・展開し、Makefileを作り、testをしておく。
tar zxvf swatch-3.2.2.tar.gz cd swatch-3.2.2 perl Makefile.PL INSTALL_BASE=$HOME/lib make make test
テストの段階でDate::Manipも必要らしくwarningが出てたので再度cpanからインストール。一度Makefileを削除して再度作成しSwatchをインストールする。
rm Makefile perl Makefile.PL INSTALL_BASE=$HOME/lib make make test make install
設定・動作チェック
参照元には
swatchの設定ファイルは、デフォルトでは~/.swatchrcです。swatchには設定ファイルのサンプルが含まれているので、このサンプルファイルを規定のディレクトリにコピーしてひな型ファイルとして利用します。
なお、サンプルファイルには、の2種類があります。
とあるのだが、解凍したexamles以下にはSendMail.pmというモジュールファイルが1つあるだけ。仕方ないので適当に.swatchrcファイルを${HOME}直下に作ることにした。
vi ~/.swatchrc
以下のようにテスト用の設定ファイルを作成する。watchforの次にログファイル内で検索する文字列を指定。ここではPerlの正規表現が利用できる。次にechoはマッチした場合に標準出力へ出力し、mailで指定のアドレスへメールを送る、という設定。
watchfor /error|fail/ echo mail=foo@hoge.com
ファイルを作成後、Swatchを起動させる。オプションをつけずに起動させると/var/log/messageを監視対象とするので -t オプションをつけてログファイルを指定。daemonモードで起動させるにはオプションで --daemon と指定する。
swatch -c ~/.swatchrc -t ~/tmp/test.log --daemon
これで自分で作ったtest.logに指定した文字列を書き加えていけばSwatchが検知してメールをくれるはず・・・だったのだが、なぜかうまくいかず。試しにログの指定をapacheのアクセスログに変更したら、すんなりとうまく動作しました*2。tailコマンドでログのチェックをしているようで検知結果は即メールに配信されてきてとてもいい感じです。
後はスクラッチのアプリのログに対応させるよう設定ファイルを書いてさらに検証してみる予定。