複数のWebサイトで共有サーバーを運用しているため、Nagiosで実際のURLを監視するだけでなく、ホストだけでなく、基本的なHTTPサービスを監視するだけでは十分ではないと思います(この質問の最後に、私が想像していることの簡単な説明)。
(注意:私はNagiosをインストールしてCentOSシステムのchroot内で実行していることに注意してください。ソースからnagiosを構築し、yumを使用して必要なすべての依存関係をこのルートにインストールしています...)
最初に check_url を見つけましたが、それを/ usr/lib/nagios/libexecにインストールした後、「戻りコード255は範囲外です」というエラーが表示され続けました。そのとき、私はこの質問を書き始めることにしました(しかし待ってください!最初に試すことにした別のプラグインがあります!)
レビュー後 この質問 check_urlとほぼ同じ問題がありましたが、a)このチェックでNRPEを使用していないため、新しい質問を開くことにしましたb)私がリンクした先の質問についての提案を試しましたが、どれもうまくいきませんでした。例えば...
./check_url some-domain.com | echo $0
「0」を返します(チェックが成功したことを示します)
次に Nagios Suppor tのデバッグ手順に従って、debug_check_urlという一時ファイルを作成し、その中に以下を配置します(コマンド定義から呼び出せるようにします)。
#!/bin/sh
echo `date` >> /tmp/debug_check_url_plugin
echo $* /tmp/debug_check_url_plugin
/usr/local/nagios/libexec/check_url $*
「デバッグモード」ではない場合、check_urlを実行するためのコマンド定義は次のとおりです(command.cfg内)。
'check_url' command definition
define command{
command_name check_url
command_line $USER1$/check_url $url$
}
(ちなみに、この質問の一番下にあるサービス構成ファイルで私が使用していたものも表示できます)
ただし、この質問を公開する前に、解決策を理解するためにもう1度試してみることにしました。 check_url_status プラグインを見つけ、それを試してみることにしました。それを行うために、ここで私がやったことです:
以下を実行します。
./check_user_status -U some-domain.com。上記のコマンドを実行すると、次のエラーが発生し続けました。
bash-4.1#./check_url_status -U mydomain.com @INCでutils.pmが見つかりません(@INCには/ usr/lib/nagios/libexec// usr/local/lib/Perl5/usr/local/shareが含まれます)/Perl5/usr/lib/Perl5/vendor_Perl/usr/share/Perl5/vendor_Perl/usr/lib/Perl5/usr/share/Perl5)at ./check_url_status line 34. BEGIN failed --compilation aborted at ./check_url_status line 34 。
したがって、この時点で私はあきらめ、いくつか質問があります。
この質問の冒頭で、私が想像していることの簡単な説明を含めると述べました。 services.cfgというファイルがあり、そこにすべてのサービス定義が配置されています(想像してください)。
以下は、check_urlを使用するように作成したサービス定義ファイルのスニペットです(そのとき、私はすべてが機能したと思っていたため)。監視するURLごとにサービスを作成します。
###
# Monitoring Individual URLs...
#
###
define service{
Host_name {my-shared-web-server}
service_description URL: somedomain.com
check_command check_url!somedomain.com
max_check_attempts 5
check_interval 3
retry_interval 1
check_period 24x7
notification_interval 30
notification_period workhours
}
物事を複雑すぎて作りすぎていました。
組み込み/デフォルトのプラグインであるcheck_httpでインストールすると、私が望んでいた以上のことが実現できます。これが私がこれを達成した方法です:
私のサービス定義:
define service{
Host_name myers
service_description URL: my-url.com
check_command check_http_url!http://my-url.com
max_check_attempts 5
check_interval 3
retry_interval 1
check_period 24x7
notification_interval 30
notification_period workhours
}
私のコマンド定義:
define command{
command_name check_http_url
command_line $USER1$/check_http -I $HOSTADDRESS$ -u $ARG1$
}
URLを監視するより良い方法は、nagiosで使用できるwebinjectを使用することです。
以下の問題は、Perlパッケージのutilsでインストールを試行していないためです。
bash-4.1#./check_url_status -U mydomain.com @INCでutils.pmが見つかりません(@INCには以下が含まれます:
スクリプトプラグインを作成できます。簡単です。次のようなURLを確認するだけです。
`curl -Is $URL -k| grep HTTP | cut -d ' ' -f2`
$ URLは、パラメーターによってスクリプトコマンドに渡すものです。
次に、結果を確認します。399よりも大きいコードを使用している場合は問題があります。それ以外の場合...すべて問題ありません。正しい出口モードとNagiosへのメッセージ。