web-dev-qa-db-ja.com

NRPEは出力を読み取ることができませんが、なぜですか?

私は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ファイルを使用して、さらに下で話している内容を取得します。

27
ticktockhouse

権利に問題があります。

コマンドを次のように変更します。

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ファイル内。

35
Bart De Vos

短い答え: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 を追加して、このケースを最後に解決しました。

11

私の場合、問題は単純に-ユーザーnagiosがスクリプトを実行できませんでした。 chmodの後、動作し始めました。 sudoは必要ありません。そのさらに悪い:)

6
bluszcz

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
5
AXE Labs

パス、権限、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のパスが間違っていました。

4
hello world

私の場合、失敗したプラグインは1つだけで、他のプラグインは問題なく動作しました。それはローカルの問題であることが判明しました。

プラグインはcheck_mem.shおよびMemの出力でfreeのgrepを実行しました。しかし、システム全体のLOCALEはSpeicherではなくMem(ドイツ語)を返したため、受け取った値はすべて空の文字列でした。

4
Rush

これは権限の問題です。スクリプトの実行権を与えるだけで問題ありません。

ここに例: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;;;

問題は解決しました。

2
Youssef ASEBRIY

私の場合、問題は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

1

私の場合、監視されているログファイルはroot:admが所有していたため、nagiosユーザーをadmグループに追加すると、監視対象ホストで直接実行された場合にのみ、check_logコマンドが成功しました。監視対象のホストでnagios-nrpe-serverサービスを再起動するまで、Nagiosサーバーでcheck_nrpeを使用して失敗し続けました。

service nagios-nrpe-server restart

したがって、NRPEのアクセス許可の変更を有効にするには、サービスを再起動する必要があるようですが、これを理解するにはしばらく時間がかかりました。

1
Tony

カスタムNRPEプラグインの場合は、いくつかの出力を必ず終了値とともに印刷してください。スクリプトからの出力がない場合、NRPEは"NRPEが出力を読み取れません"と言って文句を言うでしょう。 nrpe.cfgでデバッグを有効にして、このエラーを観察できます。

1
Karthik

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そして問題は解決されました。

他のオペレーティングシステムでも同様の問題である可能性があります。他に考えられるアクセス許可の問題をすべて確認し、それでもこの問題が発生するかどうかを確認する必要があります。

0
Graeme

これは通常、NRPEサーバーがnagiosではなく、ユーザーnrpeで起動されたときに発生します。

nrpe_userファイルの/etc/nagios/nrpe.cfg値をnagiosに変更すると、問題が解決するはずです。

nrpe_groupも必要に応じて変更できます。

0
Umut Uzun

あなたが書く問題がありました。私が実行したテストはPerlからのものでした。この行を/etc/nagios/nrpe.cfgファイルに入れて機能させます。

command [check_memory] = /usr/bin/Perl /usr/lib64/nagios/plugins/check_memory -w 75-c 90 
0
user224319

私は同じ問題を抱えていましたが、(監視対象のマシンで)nagiosプロセスを強制終了することで解決できました:

ps -ef | grep nagios
kill -9 [NagiosProcessNumber]
/etc/init.d/nagios-nrpe-server start

その後はすべてうまくいきました。

0
user428879

チェックするもう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

最後の部分を実行可能ファイルが存在する場所に置き換える

0
Mitch

あなたはあなたのローカルディレクトリにプラグインを追加する必要があると思います/usr/lib64/nagios/plugins/*。私はあなたと同じ問題を抱えていましたが、この解決策で解決できます。

0
Tarik Nasser

多くのcheck_commandsの例とともにNRPEエージェントのインストールと構成全体をカバーする本当に素晴らしい記事があり、新しいサーバーにNRPEをインストールする必要があるときはいつでもこの記事を使用します。それだけでなく、ページの最後に、NRPEを自動的にインストールして構成する(設定した変数に基づいて)クールなスクリプトがあります。記事は次のとおりです。 ここ

0
Itai Ganot

Nagiosプラグインがインストールされていない、NRPEがプラグインを見つけられない、またはアクセスできない可能性があります。

Sudoersにコマンドを追加する必要はありませんでした。コマンドがNagiosユーザーによって所有され、読み取り可能であることを確認してください。

0
Daniel Baker