http://localhost/nagiosでエラー (Return code of 255 is out of bounds) が発生します
しかし、シェルからコマンドを実行すると、正常に動作します
http://localhost/nagiosでエラー (Return code of 255 is out of bounds) が発生します
しかし、シェルからコマンドを実行すると、正常に動作します
NRPE を使用していて、「NRPE: 出力を読み取れません」というエラーが表示される場合は、NRPE デーモンがテキスト データを返していないことが原因です。Nagios コアは、NRPE デーモンに依存して、チェックの結果を要約した文字列を返します。たとえば、健全なステータスを返すチェック結果の場合、前者のように見え、後者には不健全なステータスが表示されます。
OK - load average: 1.56, 1.37, 1.29
CRITICAL - load average: 16.59, 19.41, 21.96
NRPE が次のようなものを返す場合:
FOO: bar
FOOはNagiosの既知の結果状態の1つではないため、「NRPE: Unable to read output」エラーが発生します。次のようなコマンドを実行して、リモート NRPE コマンドを実行します (ディレクトリとチェックによって異なります)。
libexec/check_nrpe -n -H localhost -c check_load
OK、WARNING、CRITICAL、または UNKNOWN が返されます。それ以外の場合、そのエラーが発生します。
Nagios チェックは0、1、2、または 3を返す必要があります。
コマンドを手動で実行する場合、255 の終了ステータスは完全に有効であるため、bash は文句を言いません。$?
コマンドが実行された後、変数でコマンドの終了ステータスを確認できます。
echo $?
後世のために、これに遭遇した人のために何かを追加します。確認する必要がある 2 つの点:
チェックを実行しているサーバーが、テストしているクライアントにアクセスする権限を持っていることを確認します。この場合、localhost がサーバー (およびクライアント) です。それにもかかわらず、クライアントの NRPE は、それをチェックしようとしているサーバーに明示的に許可を与える必要があります。NRPE が xinetd サービスによってラップされている場合、nagios サーバーをクライアント conf ファイル (/etc/xinetd.d/nrpe) の only_from ディレクティブに追加する必要があります。
only_from = 127.0.0.1 NagiosServerHostName
NagiosServerHostName は /etc/hosts にある必要があります。または、NagiosServerIP を
ファイアウォールがチェックをブロックしていないことを確認してください。デフォルトでは、NRPE はポート 5666 で実行されます。そのポートが許可されていることを確認してください
このエラーが発生しました。プラグインが書き込み権限のない場所に書き込むことが判明したため、その場所をchmod 777するだけで、機能しました。
私の推測では、Nagios 構成ファイルで check_nrpe コマンドが適切に設定されていない可能性があります。/usr/local/nagios/etc/objects/ にある Commands.cfg ファイルを開いて、そこにあるコマンドのセットアップが、bash スクリプトで使用しているセットアップとまったく同じであることを再確認してください。私がセットアップしたコマンドは次のとおりです。
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
そして私のサービス定義:
define service{
use generic-service
host_name ********
service_description HTTP Requests
contact_groups localadmin
check_command check_nrpe!check_vbs_sample
}
また、単純なスクリプトを使用する方が簡単だと思います。たとえば、最初に動作をテストするために OK を返すだけのバッチ スクリプトです。
nrpe 経由で check コマンドを呼び出しているとのことです。複数行の出力を返す check コマンドを使用している場合は、複数行の出力もサポートする最新バージョンの nrpe を使用する必要があります。そうしないと、check_nrpe スクリプトが出力を解析できなくなります。
同じエラーが発生しましたが、それはリモート クライアントでファイアウォールがオンになっていることに関係していました。
何人かの投稿者が言っているように、Nagios がスクリプトから期待する応答を受信しない場合、このエラーが生成されます。
スクリプトがエラーを生成する方法はたくさんあります。エラーの内容を確認するには、コマンド定義を更新して、スクリプトからの標準エラーがログ ファイルに書き込まれるようにします。
command_line $USER1$/check_nrpe -H $ARG1$ -c $ARG2$ 2> /tmp/error.log