2013年5月10日金曜日

nagiosってなんじゃ?(nrpe + check_log3 + negateでログに特定のキーワードが含まれていなかったらアラート)

久しぶりにnagiosの話題です。

アプリログ内容の監視の仕方には様々な要件がありますが、特定の間隔でログを監視し「error」などの文言があったらアラートする。などがよくあるケースで、以前の記事にも書きました。

その逆に、例えば、多量のアクセスがあるにも関わらず頻繁に出力されるはずの重要なキーワードがでていない場合は、不測の事態がおこっているかも知れません。

今回は特定の間隔でログを監視し、その中にキーワードが含まれていなかったらアラートする
というものです。

ではやってみます。


nrpe check_log3の利用


まずは普通にcheck_log3の設定をします。

Nagiosサーバー側に、以下の設定をします。
3分間隔でチェックし、キーワード「hoge」が一つでも含まれていたらCRITICALを出します。
今回はWARNINGは出さないので、WARNINGの閾値をとても大きな数値にしておきます。

commands.cfg
define command{
    command_name    check_nrpe
    command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$
}


client.cfg
define host{
        use                    linux-server
        host_name        client_a
        alias                   client_a
        address             ec2-54-250-36-70.ap-northeast-1.compute.amazonaws.com
 }

define service {
        use                                  generic-service
        host_name                      client_a
        service_description         CHECKLOG3
        normal_check_interval   3
        check_command           check_nrpe!check_log3!/var/log/httpd/access_log /etc/nagios/seeks/check_log3.httpd.seek hoge 99999999999999 1

}


すると、キーワードが含まれている場合は、


キーワードが含まれていない場合は、


のようになります。



nrpe check_log3 + negateの利用


次に、これの逆をやってみます。
nagiosにはnegateというプラグインがあり、CRITICALとOKの評価を反転します。
このプラグインを使用して、評価反転用のcheck_nrpeコマンドを定義します。


commands.cfg
define command{
    command_name    check_nrpe
    command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$
}

define command{
    command_name    check_nrpe_negate
    command_line    $USER1$/negate $USER1$/check_nrpe -H '$HOSTADDRESS$' -c $ARG1$ -a $ARG2$
}


client.cfg
define host{
        use                    linux-server
        host_name        client_a
        alias                   client_a
        address             ec2-54-250-36-70.ap-northeast-1.compute.amazonaws.com
 }

#define service {
#        use                     generic-service
#        host_name               client_a
#        service_description     CHECKLOG3
#        normal_check_interval   3
#        check_command           check_nrpe!check_log3!/var/log/httpd/access_log /etc/nagios/seeks/check_log3.httpd.seek hoge 99999999999999 1
#}

define service {
       use                     generic-service
       host_name               client_a
       service_description     NEGATE_CHECKLOG3
       normal_check_interval   3
       check_command           check_nrpe_negate!check_log3!/var/log/httpd/access_log /etc/nagios/seeks/check_log3.httpd.seek hoge 99999999999999 1

}


すると、キーワードが含まれている場合は、


キーワードが含まれていない場合は、



のようになり、結果が反転します。
nrpeでなくても、どのプラグインでもnegateと組み合わせることができるので、ちょっとした工夫が必要なときにはとても便利です。

以上です。