nagiosのhttp監視のメモ

 2013/02/12
このエントリーをはてなブックマークに追加

完全に個人用のメモです。(え?Nagiosなんて使ってないでZabbix使え?いやZabbixも使ってます…)

check_httpでページ上の文字列もチェックする

単なるhttp監視だと、アプリケーションがエラー画面を出していても200で応答していたら正常とみなされてしまうので(アプリケーションエラーでステータスコード200を返すのは相当ださいけど…)画面上に表示される文字列も照合するようにした方が良い。 nagiosなら以下のようにする。

/etc/nagios/objects/commands.cfgに以下を追加

define command{
        command_name    check_http_string
        command_line    $USER1$/check_http -H $HOSTADDRESS$ -u $ARG1$ -s $ARG2$
        }

そして、サービスの定義で

define service{
        use                  generic-service
        host_name            www.ryuzee.com
        service_description  http_check_string
        check_command        check_http_string!/index.php/!Ryuzee
        contact_groups       critical
        notifications_enabled   1
        }

そしてnagiosデーモンを再起動すればOK。なお、check_commandの箇所だが、第一引数から第三引数までの区切り文字には!を使う。

check_httpでベーシック認証先のページをチェックする

同じようにbasic認証を通過させてページの存在チェックをしたければ以下のようにする。 ここでは、単にログインして200が返ってくることだけを確認しているが、文字列照合したい場合はcommand_line の末尾にでも -s オプションを足せばOK。

define command{
        command_name    check_http_basicauth
        command_line    $USER1$/check_http -H $HOSTADDRESS$ -u $ARG1$ --authorization=$ARG2$:$ARG3$
        }

とし、サービスの定義で

define service{
        use                  generic-service
        host_name            www.ryuzee.com
        service_description  http_check_basicauth_test
        check_command        check_http_basicauth!/index.html!Basic認証のID!Basic認証のパスワード
        contact_groups       critical
        notifications_enabled   1
        }

としてやればOK。

オプションが多くて汎用化の必要がない時

もちろんベタ書きで、以下みたいに定義しても全然OK。このパターンはcheck_httpのオプションを山のように指定する場合には楽ちんだ。 この場合は、objects/commands.cfgに書いて汎用化する必然性がないので、servers以下の監視対象の設定ファイルで直接コマンドを定義してしまった方が見通しが良いかもしれない。

define command{
        command_name    check_oreore
        command_line    $USER1$/check_http -H www.ryuzee.com -u /secret/index.html --authorization=hogehoge:fugafuga -s おれおれ
        }

さらに複雑なhttp監視をしたいとき

さらに複雑な監視をしたければ、自前でスクリプト書いてもOK。nagiosの監視スクリプトは、終了コードが0,1,2,3のいずれかで、1行以上の標準出力があれば良いだけなので、自分でシェルスクリプトとかPHPのスクリプトとかを用意して、それをコマンドとして登録すればなんでもできる。 例えば、サイトにログインして特定のページに移動して表示されているデータを検証するような場合、check_httpだと固定のCookieしかセットできないので、ログイン後の操作がうまくいかないことが多い。そういう場合でも自前で、cURLを叩くスクリプトとかがあれば対応可能になる。 実装の仕方は、http://itpro.nikkeibp.co.jp/article/COLUMN/20070704/276685/ のあたりが参考になるだろう。

 2013/02/12
このエントリーをはてなブックマークに追加