nagiosのhttp監視のメモ
完全に個人用のメモです。(え?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/ のあたりが参考になるだろう。