Nagiosがリモートサーバーのポートをチェックするための簡単なスクリプトを作成しました。もともと、私はlsof
を使おうとしました。
#!/bin/bash
RESULT=$(lsof -i :8080 | grep LISTEN)
if [ -n "$RESULT" ]
then
echo "$RESULT"
exit 0
else
echo "Check application port is down"
exit 2
fi
ローカルマシンで、nagiosユーザーはスクリプトを実行して実行し、期待される出力を得ることができます。しかし、リモートでは、check_nrpe
を使用して、常にelseエコーが返されました
Check application port is down
スクリプトをローカルで実行すると言ったように、正しく機能しました
Nrpeユーザーはスクリプトを実行するために必要なすべての権限を持っていました。SELinuxは許可モードでしたが、私はそれを機能させることができませんでした。そこで、RESULT行をnetstat
を使用するように変更しました。
RESULT=$(netstat -anp | grep ":8080" | grep LISTEN)
そして、check_nrpe
をリモートで使用して期待される応答を取り戻すことができました。したがって、これはcheck_nrpe
とlsof
に関するある種の問題であると思います。しかし、私はログに何も見つけることができませんでした。
これをlsof
で正しく機能させるためのアイデアや提案はありますか?
Root以外のユーザーには、lsof -i
からの出力は表示されません。 (SELinuxなしのDebian8およびCent7で確認済み。)
これをnagiosチェックで使用する場合は、Sudoを介してlsofを実行する必要があります。
Sudoがttyを要求するように構成されている場合(CentOSのデフォルトである可能性があります)、次のようなことができます。
Defaults:nagios !requiretty
nagios ALL=NOPASSWD:/usr/bin/lsof
必要に応じてnagios
をnrpe
に置き換え、必要に応じてパスをlsofに変更します。