マシンA = nagiosマスター、マシンB =エッジマシン。
マシンAのHost.cfgには、次のものがあります。
_define command {
command_name check_tok
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_tok 123
}
define service
use bg-service
hostgroup_name test_oob1
service_description Recall12
check_command check_tok
servicegroups nrpe
}
_
/etc/nrpe.dのマシンBのcommands.cfgには、次のものがあります。
_command[check_tok]=/usr/lib64/nagios/plugins/check_test.sh
_
マシンのBの/ usr/lib64/nagios/pluginsには、check_test.pyとcheck_test.shがあります。
check.test.shは次のようになります。
_#!/bin/sh
/usr/bin/Sudo /usr/lib64/nagios/plugins/check_test.py
exit $?
_
check_test.pyは次のようになります。
_#!/usr/bin/env python
import sys
if __name__ == "__main__":
if sys.argv == '123'
print("this ok")
sys.exit(0)
else:
print('this is not 123')
sys.exit(2)
_
マシンのB/etc/sudoers.d/nrpe nrpe ALL = (ALL) NOPASSWD: /usr/lib64/nagios/plugins/check_test.py
ご覧のとおり、check_test.pyに貼り付けている引数は「123」であり、sys.exit(0)になるはずです。しかし、私のnagios monでは、「NRPE:出力を読み取ることができません」と表示されていました。
デフォルトでは、nrpeは引数を許可しません。 nrpe構成でdont_blame_nrpe=1
を設定することにより、これをバイパスできます。また、nrpeは--enable-command-args
で構築する必要があります。ただし、次の点に注意してください。
*** ENABLING THIS OPTION IS A SECURITY RISK! ***
そうは言っても、クライアント側でnrpeコマンドへの引数をハードコーディングする必要があります。
また、シェルスクリプトからpythonインタプリタに引数を渡す必要があります。"$@"
を追加すると、次のトリックが実行されます。
#!/bin/sh
/usr/bin/Sudo /usr/lib64/nagios/plugins/check_test.py "$@"
exit $?
また、pythonスクリプトのsys.argv
はリストであるため、代わりにsys.argv[1]
と記述する必要があります。
Nagios側から接続する前に、まずスクリプトをローカルでテストすることをお勧めします。
引数をNRPEに渡すには、-a
を使用する必要があります。
また、-c
コマンド呼び出しを$ARG1$
にするので、異なるNRPE呼び出しごとに個別のコマンドオブジェクトを作成する必要はありません。
例えば:
define command {
command_name check_nrpe_arg
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$
}
およびサービス定義:
define service {
use bg-service
hostgroup_name test_oob1
service_description Recall12
check_command check_nrpe_arg!check_tok!123
servicegroups nrpe
}
引数を使って何かを行うには、NRPEデーモン側のコマンドも必要です(魔法のように取得するだけではありません)。
command[check_tok]=/usr/lib64/nagios/plugins/check_test.sh $ARG1$
次に、引数をとらない呼び出しに対して、末尾にcheck_nrpe
を付けずに、個別の-a $ARG2$1
を作成します。 (これは、Debian/Ubuntuパッケージのコマンドと同様の概念ですが、その逆です。)