swatchを使ったログ監視におけるswatch自身の監視

2018年2月18日

この記事は最初の投稿日から18年経過しています。内容が古い可能性があります。

サーバのログ監視ツールとして、swatch というツールがあります。

うちでも、syslog のログを swatch で監視してます。

google:swatch ログぐらいのキーワードで検索すると、swatchの設定について書かれたページがいろいろとありますので、そちらにお任せするとして….。

ここでは、「swatch自体が正常に動いているかどうかを監視する」方法について書いてみます。

ついでに、syslogd が正常に動いているかどうかも監視できます。

基本的な流れからいうと、

  1. logger を使って、ある特定のキーワードをログに出力させる。
  2. そのキーワードを swatch で拾い、ある特定のファイルを touch してファイル日付を更新する。
  3. nagios(またはシェルスクリプト)で、上記ファイルの更新日付を監視し、長時間変更されていなければアラートをあげる。

ということをします。

logger でのログ出力。

以下のようなシェルスクリプトを、たとえば、10分に1回動くように cron に登録します。

#!/bin/sh
logger -i -t logger 'swatch check'

swatch の設定ファイルに以下のようなログ監視を追加します。

#
# swatch alive check
#
watchfor /swatch check/
exec=/usr/bin/touch /var/tmp/swatch-messages.alive

ログに「swatch check」という文字列が出力されたら、あるファイル(上記の場合は、/var/tmp/swatch-messages.alive)を touch してファイル日時を更新するという動きをします。

ファイル日時の監視。

うちでは nagios が動いているので、nagios のファイルの日付やサイズを監視するプラグイン(check_file_age)を使います。

checkcommand.cfg は以下のような定義。

define command{
command_name    check_file_age
command_line    $USER1$/check_file_age -w $ARG1$ -c $ARG2$ -f $ARG3$
}

services.cfg で、以下のように定義。(肝心なところだけの抜粋)

define service{
~
check_command check_file_age!660!660!/var/tmp/swatch-messages.alive
~
}

これで、swatch が停止したり、syslogd が停止したりして、ファイルの更新日時が11分以上変更されないと、nagios のアラートがあがります。

nagios を使えない時には、以下のようなシェルスクリプトを使い、このシェルスクリプトを cron に登録して定期的にチェックすることでアラートをあげることもできます。

#!/bin/sh
fileage=`/usr/bin/stat --format=%Y $1`
nowage=`/bin/date '+%s'`
difftime=`/usr/bin/expr $nowage - $fileage`
if [ $difftime -gt 660 ]
then
echo $1 is $difftime seconds old. | /bin/mail -s 'swatch or syslogd not active?' root
fi

上記のシェルクリプトは引数として「監視したいファイルへのフルパス」をとります。

gentoo,monitoring

Posted by toshyon