ダメ人間オンライン

あまり信用しないほうがいい技術メモとか備忘録とかその他雑記

swatch監視の導入

なんやかんやでサーバーにswatch監視を入れる機会があったのでメモ。





swatchのインストール




ソースをダウンロードしてインスコする。



ソース

http://sourceforge.net/projects/swatch/files/swatch/3.2.3/swatch-3.2.3.tar.gz/download



tarを解凍してディレクトリ移動し

$ perl Makefile.PL



足りないモジュールがあればこの時点で下記のように表示されるのでCPANから入れる。

Warning: prerequisite Date::Format 0 not found.
Warning: prerequisite Date::Manip 0 not found.



Date::Manipが最新バージョンのだとperl v5.10.0じゃないとダメと言われるので

Perl v5.10.0 required--this is only v5.8.5, stopped at Makefile.PL line 3.

古いバージョンのをインスコすることにする。





cpanのwebからDate::Manipを検索しダウンロードのURLを確認してファイル名称を削ってアクセスするとディレクトリの中身が見れるのでインストールしたいバージョンを確認する。



URLのid以降を用いて下記のようにインスコ。

cpan > install S/SB/SBECK/Date-Manip-5.54.tar.gz



必要なモジュールを入れ終わったらswatchをmake。



ちゃんとインストールされたかどうかは下記コマンドで確認。


# type swatch
swatch is /usr/bin/swatch





設定ファイルの記述




今回は/var/log/messagesにhogehogeというログが表示されればアラートメールを送信する設定を入れる。



メール飛ばすだけでなくプログラムを経由させることとかできたりしますので詳細を知りたい方は下記のページに詳しく書いてありますので(大分参考にさせていただきました)ご覧下さい。

@IT:サーバのログ監視ツールを使いこなそう



/root/.swatchrcを作成

watchfor /hogehoge/
echo
mail=ここにメールアドレス,subject=メールのsubject



試しに動かしてみる。


# /usr/bin/swatch -c /root/.swatchrc -t /var/log/messages



別窓開いてmessagesにswatchの設定で入れた文字列を表示させてみる。


# logger "[test]ababababa hogehoge ababa[test]"

※あとでログ見て焦らないために[test]という文言は入れといたほうがいいかもです。



これでswatchを実行しているほうの窓に上記ログが表示されれば正常に検知できたということ。





起動スクリプトを用意




サーバー再起動の度にいちいち手動でswatch立ち上げるとか健気なことをしなくていいように起動スクリプトを用意する。



※とあるサイトの記述を参考にさせていただきましたがURL失念しましたorz。




/etc/init.d/swatch

#!/bin/sh
#
# chkconfig: 2345 99 25
# description: swatch
. /etc/rc.d/init.d/functions
RETVAL=0
# See how we were called.

case "$1" in
start)
echo -n "Starting Swatch: "
/usr/bin/swatch -c /root/.swatchrc -t /var/log/messages >/dev/null 2>&1 &
RETVAL=$?
echo
;;
stop)
echo -n "Stopping Swatch: "
killproc tail
RETVAL=$?
echo
;;
restart)
$0 stop
$0 start
RETVAL=$?
;;
*)
echo "Usage: swatch {start|stop|restart}"
exit 1
esac

exit $RETVAL




※2回スクリプト叩けば華麗に多重起動してしまうので厳密にやりたい場合はpidとかで管理することをおすすめします。





chkconfigを設定

# chkconfig swatch on



sendmailのchkconfigもついでにon


# chkconfig sendmail on





問題点




メールがキューに入ったままになって飛ばない問題が発生。



sendmailを再起動すれば飛んでったけどその後もっかいswatchで検知してもまたキューに入ったままに。



原因はswatchのソースにありました。



$SOURCE/lib/Swatch/Actions.pmの中に下記の記述があるのですが

$args{'MAILER'} .= ' -oi -t -odq';

ここの-odqがキューに入れるというオプションのようです。



なのでこのソースを書き換えて再度swatchをmakeし直す。



これでちゃんとメールも飛んでめでたしめでたし。





意外と大事なおまけ




messages等のローテートされるファイルを監視対象にしている場合、ローテートされた後正常に監視がされないという問題があるようです。



ですので、対象ログがローテートされるタイミングでswatchを再起動してやる必要があります。



/etc/logrotate.d/syslog を編集

/var/log/message {
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true

  1. /etc/init.d/swatch restart >/dev/null 2>&1

endscript
}