web-dev-qa-db-ja.com

Nagiosコマンドがすべての引数を送信しない

私は次のサービスを使用して、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が欠落しているのはなぜですか?

4
markus

監視ホストで定義されている引数とリモートホストの引数を混同しています。 $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アドレスを渡す必要はありません。

9
quanta

私も同じ問題を抱えていて、受け入れられた答えに少し敬意を表して反対したので、誰かがそれに遭遇した場合に備えて解決策を投稿すると思いました。

監視ホストからコマンドライン引数を渡しながら、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;
    }
4
Jak