私は次のサービスを使用して、nagiosからpostgresデータベースを監視しています。
define service{
use test-service ; Name of servi$
Host_name DEMOCGN002
service_description Postgres State
check_command check_nrpe!check_pgsql!192.168.1.135!test!test!test
notifications_enabled 1
}
リモートマシンで、次のコマンドを構成しました。
command[check_pgsql]=/usr/lib/nagios/plugins/check_pgsql -H $ARG1$ -d $ARG2$ -l $ARG3$ -p $ARG4$
Syslogでは、コマンドが実行されていることがわかりますが、送信される引数は1つだけです。
Oct 20 13:18:43 DEMOSRV01 nrpe[1033]: Running command: /usr/lib/nagios/plugins/check_pgsql -H 192.168.1.134 -d -l -p
Oct 20 13:18:43 DEMOSRV01 nrpe[1033]: Command completed with return code 3 and output: check_pgsql: Database name is not valid - -l#012Usage:#012check_pgsql [-H <Host>] [-P <port>] [-c <critical time>] [-w <warning time>]#012 [-t <timeout>] [-d <database>] [-l <logname>] [-p <password>]
Oct 20 13:18:43 DEMOSRV01 nrpe[1033]: Return Code: 3, Output: check_pgsql: Database name is not valid - -l#012Usage:#012check_pgsql [-H <Host>] [-P <port>] [-c <critical time>] [-w <warning time>]#012 [-t <timeout>] [-d <database>] [-l <logname>] [-p <password>]
引数2、3、4が欠落しているのはなぜですか?
監視ホストで定義されている引数とリモートホストの引数を混同しています。 $ARGx$
マクロはNRPEホストでは使用できません。
デフォルトでは、check_nrpe
コマンドは次のように定義されています。
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -t 120
}
リモートホストでは、次のような「実際の」値を使用する必要があります。
command[check_pgsql]=/usr/lib/nagios/plugins/check_pgsql -d test -l test -p test
このコマンドは、Nagiosホストから次のコマンドで呼び出すことができます。
define service{
use test-service
Host_name DEMOCGN002
service_description Postgres State
check_command check_nrpe!check_pgsql
notifications_enabled 1
}
Host_name
の値を取得するため、IPアドレスを渡す必要はありません。
私も同じ問題を抱えていて、受け入れられた答えに少し敬意を表して反対したので、誰かがそれに遭遇した場合に備えて解決策を投稿すると思いました。
監視ホストからコマンドライン引数を渡しながら、nrpeを使用してリモートスクリプトを実行できます。そうしないと、リモートスクリプトにハード値を指定する必要があり、大規模なセットアップでは実行できません。
これが私のものでどのように機能するかです。これは3つの引数をリモートで渡すために機能しますが、commands.cfgまたは同等のファイルで数を増やすことができます。
# Check NRPE command
define command {
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$ $ARG3$ $ARG4$
}
上記の行の$ ARG1 $はコマンド自体のために予約されているため、実際には$ ARG2 $、$ ARG3 $、および$ ARG4 $がリモートスクリプトに送信されますが、リモートスクリプトに到達するとリストされます。 $ ARG1 $ $ ARG2 $および$ ARG3 $(これは、markusが引数の混同について言っていたものです)であるため、リモートマシンのnrpe.cfgでそのように定義する必要があります。
リモートマシンnrpe.cfg:
command[check_pgsql]=/usr/lib/nagios/plugins/check_pgsql -d $ARG1$ -l $ARG2$ -p $ARG3$
そして最後にサービスを定義します。
define service{
use test-service;
Host_name DEMOCGN002;
service_description Postgres State;
check_command check_nrpe!check_pgsql!test!test!test;
notifications_enabled 1;
}