私はNRPEでこの問題を抱えています。これまでにネット上で見つけたすべてのものは、私がすでに試したものを指摘しているようです。
# /usr/local/nagios/plugins/check_nrpe -H nrpeclient
与える
NRPE v2.12
予想通り。
コマンドを手動で実行すると(「nrpeclient」のnrpe.cfgで定義されているように)、期待される応答が得られます
nrpe.cfg:
command[check_openmanage]=/usr/lib/nagios/plugins/additional/check_openmanage -s -e -b ctrl_driver=0 bat_charge
"Expected response"
しかし、Nagiosサーバーからコマンドを実行しようとすると、次のようになります。
# /usr/local/nagios/plugins/check_nrpe -H comxps -c check_openmanage
NRPE: Unable to read output
誰かが私がこれで間違いを犯したかもしれない他の場所を考えることができますか?他の複数のサーバーで同じことを問題なく実行しました。これに関して私が考えることができる唯一の違いは、このボックスがRHEL 5ベースであるのに対し、他のボックスはRHEL 4ベースであるということです。
私がテストした上記の2ビットは、ほとんどの人がこの問題に直面したときに示唆するようです。
nrpe
を再起動すると、ログに奇妙なエラーが表示されることを述べておきます。
nrpe[14534]: Unable to open config file '/usr/local/nagios/etc/nrpe.cfg' for reading
nrpe[14534]: Continuing with errors...
nrpe[14535]: Starting up daemon
nrpe[14535]: Warning: Daemon is configured to accept command arguments from clients!
nrpe[14535]: Listening for connections on port 5666
nrpe[14535]: Allowing connections from: bodbck,combck,nam-bck
とはいえ、それは明白に/usr/local/nagios/etc/nrpe.cfg
ファイルを使用して、さらに下で話している内容を取得します。
権利に問題があります。
コマンドを次のように変更します。
command[check_openmanage]=Sudo /usr/lib/nagios/plugins/additional/check_openmanage -s -e -b ctrl_driver=0 bat_charge
(sudoを追加)
次に、nagios-userをsudoersに追加します。
nagios ALL=(ALL) NOPASSWD:/usr/lib/nagios/plugins/additional/check_openmanage
または、単にファイルをchmodすることもできます...それも機能します。
CentOS、Red Hat、Scientific、またはFedoraを使用している場合は、Defaults requiretty
sudoersファイル内。
短い答え:Bashプラグインを使用している場合は、使用するインタープリターを示す Shebang があることを確認してください:#!/bin/bash
私が書いたNagiosプラグインでも同じ問題に直面していました。次のステートメントを使用してユーザーnagios
として実行している場合でも、スクリプトはローカルで起動したときに期待どおりに実行されていました。
$ Sudo sudo -s -u nagios
$ /path/to/my/plugin.sh
STATUS: OK
しかし、Nagios3サーバーからのNRPEを使用したリモート起動は失敗しました。
$ /usr/lib/nagios/plugins/check_nrpe -H my-nagios-client -c my_plugin
NRPE: Unable to read output
NRPEを介してスクリプトを実行するとSudo sudo -s -u nagios
を介して実行する場合と同じインタープリターを使用していないようだったので、スクリプトに Shebang を追加して、このケースを最後に解決しました。
私の場合、問題は単純に-ユーザーnagiosがスクリプトを実行できませんでした。 chmodの後、動作し始めました。 sudoは必要ありません。そのさらに悪い:)
check_nrpeは、チェックがローカルで機能していても、「NRPE:出力を読み取れません」を取得していました。これは、使用しているプラグインがSELinuxでうまく機能しなかったためです。それを無効にし、ファイルのコンテキストを必ず削除してください:
$ ls -l check_om_storage
-r-xr-xr--. 1 root nrpe 3808 Feb 27 17:54 check_om_chassis
$ setfattr -x security.selinux check_om_storage
$ ls -l check_om_chassis
-r-xr-xr-- 1 root nrpe 3808 Feb 27 17:54 check_om_chassis
パス、権限、selinux、iptablesを確認してください。
鉱山はclient:nrpe.cfgのパスの問題でした。check_*プラグイン名へのコマンドパスを再確認してください。これらは、パス名として(lib/local)(libexec/plugins)と紛らわしい場合があります。コマンドを作成するために、コメント付きのあらかじめパッケージ化されたnrpe cfgファイルのパスを誤ってヤンクして配置しました。 make installまたはyum plugin installは、これらをdifftディレクトリに配置します。
コンマネット:/ usr/local/nagios/libexec/check_disk
versus
realpath:/ usr/lib/nagios/plugins/check_disk
サーバーから、ファイアウォールの問題ではないことを確認でき、5666ポートにtelnetで接続でき、ブランケットcheck_nrpeを実行して、ステータスを戻り値として取得できました。コマンドをローカルで実行できますが、nrpe.cfgのクライアントでnrpeのパスが間違っていました。
私の場合、失敗したプラグインは1つだけで、他のプラグインは問題なく動作しました。それはローカルの問題であることが判明しました。
プラグインはcheck_mem.sh
およびMem
の出力でfree
のgrepを実行しました。しかし、システム全体のLOCALEはSpeicher
ではなくMem
(ドイツ語)を返したため、受け取った値はすべて空の文字列でした。
これは権限の問題です。スクリプトの実行権を与えるだけで問題ありません。
ここに例:Before/Remote Host:
[root@puppet1 nrpe.d]# ls -l /usr/lib/nagios/plugins/check_mem.sh
-rwxr--r-- 1 root root 1598 Jul 7 10:55 /usr/lib/nagios/plugins/check_mem.sh
NRPEサーバー:
[root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb
NRPE: Unable to read output
後:リモートホスト:
[root@puppet1 plugins]# chmod o+x /usr/lib/nagios/plugins/check_mem.sh
[root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb
Memory: OK Total: 1980 MB - Used: 139 MB - 6% used|Total=2076479488;;;Used=145076224;;;Cache=1528111104;;Buffer=211890176;;;
問題は解決しました。
私の場合、問題はselinux関連でした(RHEL 6.5を実行している場合、selinuxはenforcingに設定されています)。
Yum経由でnagios-plugins- *をインストールすると、/ usr/lib64/nagios/pluginsにプラグインファイルが作成されます。これらのプラグインファイル(ls -lZ)のfcontextをチェックすると、ファイルのコンテキストタイプが「nagios_system_plugin_exec_t」に設定されていることがわかります。これは、check_nrpeが期待するコンテキストタイプです。
私の場合、「vi」を使用してカスタムスクリプト「check_mem.sh」を作成しました。結果のファイルでは、コンテキストタイプが「lib_t」に設定されています。これにより、nrpeは「NRPE:出力を読み取れません」を出力していました。
ファイルコンテキストを「nagios_system_plugin_exec_t」に変更すると、問題が解決しました:
chcon -t nagios_system_plugin_exec_t /usr/lib64/nagios/plugins/check_mem.sh
通常のselinuxのトラブルシューティングでもこの問題が指摘されていました(/var/log/audit/audit.logを確認してください)。
編集:chconは一時的にコンテキストを変更します。永続的に変更するには、semanage fcontext -a -t nagios_system_plugin_exec_t /usr/lib64/nagios/plugins/check_mem.sh restorecon -vF /usr/lib64/nagios/plugins/check_mem.sh
私の場合、監視されているログファイルはroot:admが所有していたため、nagiosユーザーをadmグループに追加すると、監視対象ホストで直接実行された場合にのみ、check_logコマンドが成功しました。監視対象のホストでnagios-nrpe-serverサービスを再起動するまで、Nagiosサーバーでcheck_nrpeを使用して失敗し続けました。
service nagios-nrpe-server restart
したがって、NRPEのアクセス許可の変更を有効にするには、サービスを再起動する必要があるようですが、これを理解するにはしばらく時間がかかりました。
カスタムNRPEプラグインの場合は、いくつかの出力を必ず終了値とともに印刷してください。スクリプトからの出力がない場合、NRPEは"NRPEが出力を読み取れません"と言って文句を言うでしょう。 nrpe.cfgでデバッグを有効にして、このエラーを観察できます。
FreeBSDでこの問題が発生しました。頭を壁に1時間ぶつけた後、問題は/usr/local/nagios/etc/nrpe.cfg
がSudoの間違った場所を指していた。
Sudoコマンドの正しい場所を見つけるには、次のコマンドを実行します。
# whereis Sudo
次に、nrpe.cfgのcommand_prefixを次のように変更しました。
command_prefix=/usr/local/Sudo
に:
command_prefix=/usr/local/bin/Sudo
次にservice nrpe restart
そして問題は解決されました。
他のオペレーティングシステムでも同様の問題である可能性があります。他に考えられるアクセス許可の問題をすべて確認し、それでもこの問題が発生するかどうかを確認する必要があります。
これは通常、NRPEサーバーがnagiosではなく、ユーザーnrpeで起動されたときに発生します。
nrpe_user
ファイルの/etc/nagios/nrpe.cfg
値をnagiosに変更すると、問題が解決するはずです。
nrpe_group
も必要に応じて変更できます。
あなたが書く問題がありました。私が実行したテストはPerlからのものでした。この行を/etc/nagios/nrpe.cfg
ファイルに入れて機能させます。
command [check_memory] = /usr/bin/Perl /usr/lib64/nagios/plugins/check_memory -w 75-c 90
私は同じ問題を抱えていましたが、(監視対象のマシンで)nagiosプロセスを強制終了することで解決できました:
ps -ef | grep nagios
kill -9 [NagiosProcessNumber]
/etc/init.d/nagios-nrpe-server start
その後はすべてうまくいきました。
チェックするもう1つのことは、コマンドがSudo -u <another user>
コマンドを実行するには、sudoされるユーザーがlibexec
ディレクトリ(およびその上のディレクトリ)を読み取れる必要があります。
たとえば、コマンドが次の場合:
command[check_Tomcat]=Sudo -u Tomcat /usr/local/nagios/libexec/check_Tomcat ...
Tomcatユーザーはそのファイルにアクセスできる必要があります。
これを修正する1つの方法は次のとおりです。
chmod 0775 /usr/local/nagios/
chmod 0755 /usr/local/nagios/libexec
最後の部分を実行可能ファイルが存在する場所に置き換える
あなたはあなたのローカルディレクトリにプラグインを追加する必要があると思います/usr/lib64/nagios/plugins/*
。私はあなたと同じ問題を抱えていましたが、この解決策で解決できます。
多くのcheck_commandsの例とともにNRPEエージェントのインストールと構成全体をカバーする本当に素晴らしい記事があり、新しいサーバーにNRPEをインストールする必要があるときはいつでもこの記事を使用します。それだけでなく、ページの最後に、NRPEを自動的にインストールして構成する(設定した変数に基づいて)クールなスクリプトがあります。記事は次のとおりです。 ここ
Nagiosプラグインがインストールされていない、NRPEがプラグインを見つけられない、またはアクセスできない可能性があります。
Sudoersにコマンドを追加する必要はありませんでした。コマンドがNagiosユーザーによって所有され、読み取り可能であることを確認してください。