xymonのログ監視機能でmsgsアイコンがありますが、これだと複数のログの監視がひとつにまとめられてしまい、アラーム通報が細かく設定できないなど柔軟さに欠いています。
またログ検知から30分間が赤になるとの仕様も通知が複数回届いてしまう事象となったりGreenの復旧通知が遅れたりとわかりにくい場合があります。
自前でログ監視を行って回避させようとするシェルスクリプトっぽい擬似コードです。
ローテートの処理が完全ではないのと、タイミングによっては監視が漏れてしまう場合があるかもしれませんが。
前回実行時からの増加分の行数を数えていますが、IFSを変えて複数行の監視を実現しているところがポイント。
==============================================================
OLD_LINE=`cat /tmp/xymon_syslog_wc.txt`
NEW_LINE=`wc -l /var/log/messages | awk '{print $1}'`
echo $NEW_LINE > /tmp/xymon_syslog_wc.txt
TAIL_LINE=`expr $NEW_LINE - $OLD_LINE`
echo `date` "OLD: $OLD_LINE NEW: $NEW_LINE TAIL: $TAIL_LINE"
if [ $TAIL_LINE -lt 0 ] ; then
# log rotate
cp /var/log/messages.log /tmp/messages
else
tail -$TAIL_LINE /var/log/messages.log > /tmp/messages
fi
# change IFS to Only Return
ORG_IFS=$IFS
NEW_IFS="
"
IFS=$NEW_IFS
ここに/tmp/messagesを対象にログ監視の処理を入れる。
監視で見つかったらアラート。
IFS=$ORG_IFS
==============================================================
これでログを見つけたら、あとは普通に通知を上げれば良さそう。
Xymon関係無くcronからでもなんでも定期的に実行すればログ差分のみの監視ができます。
どなたかローテート対応など拡張してくれたら嬉しいです。