久しぶりにハマった。

Nagiosで「check_http」プラグインを使って、とあるURLにアクセスさせて、レスポンスコード「200」が返ってくることを監視したかったのだが…。これまで設定してあるURLは普通に監視できてるのに、新しく追加したURL(つまり、新しいService)については、なぜか「Warning: Return code of 127 for check of service ‘XXXXX’ on host ‘XXXXXX’ was out of bounds. Make sure the plugin you’re trying to run actually exists.」なんてエラーメッセージが返ってくる。

調べてみると、これはプラグインが見つからないってメッセージらしい。他のサービスと全く同じ設定で、URLが違うだけなのにプラグインが見つからないってことは、さすがにあり得ない。ということは…URLが原因か、ということで、インターネットを調べ回っていたら、「Check_http and url parameters」ってページを見つけた。

Did you try to use “%26” instead of “&” ?

…なんと、Nagiosの設定ファイルにURLを書くときには、「&」についてはエスケープする必要があるということなのか。確かに、これまで設定していたServiceのURLにはパラメータがないので、「&」が含まれていなくて、今回、設定しようとしているURLには「&」が含まれている…これだ。orz

というわけで、check_httpプラグインに渡すURLの「&」を「%26」で置換したら、何事もなく動き始めました、と(汗)

【大事な追記】
これで一件落着と思って、改めて監視対象のサーバのログを確認したら、「&」であるべきところが「%26」のままでHTTPのリクエストが投げられていた。ダメじゃーん(汗)そしたら、別のフォーラムにこんなことが書いてあった。

I tried the \\& and it worked !!!

なるほど、ま、そうだよね(汗)というわけで、check_httpでチェックする対象のURLに含まれている「&」については「\\&」に置換すると動作しますってことで無事解決(汗)