O comando Nagios não está transmitindo todos os argumentos

5

Estou usando o seguinte serviço para monitorar nosso banco de dados postgres a partir do nagios:

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
       }

Na máquina remota eu configurei o comando:

command[check_pgsql]=/usr/lib/nagios/plugins/check_pgsql -H $ARG1$ -d $ARG2$ -l $ARG3$ -p $ARG4$

No syslog eu posso ver que o comando é executado, mas há apenas um argumento transmitido:

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>]

Por que os argumentos 2,3 e 4 estão faltando?

    
por markus 20.10.2011 / 13:22

2 respostas

10

Você está misturando os argumentos definidos no host de monitoramento com os argumentos no host remoto. A macro $ARGx$ não pode ser usada no host NRPE.

Por padrão, o comando check_nrpe é definido como abaixo:

define command{
    command_name    check_nrpe
    command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -t 120
}

No host remoto, você deve usar o valor 'real', algo assim:

command[check_pgsql]=/usr/lib/nagios/plugins/check_pgsql -d test -l test -p test

e este comando pode ser chamado do host do Nagios com:

define service{
    use                     test-service         
    host_name               DEMOCGN002
    service_description     Postgres State
    check_command           check_nrpe!check_pgsql
    notifications_enabled   1
    }

Não é necessário passar o endereço IP porque ele obtém o valor de host_name .

    
por 20.10.2011 / 17:06
4

Eu tive o mesmo problema e respeitosamente discordei um pouco com a resposta aceita, então eu pensei em postar a solução para o caso de alguém mais se deparar com ela.

Você PODE executar um script remoto usando nrpe enquanto passa seus argumentos de linha de comando do host de monitoramento, caso contrário você teria que dar valores difíceis para o script remoto em cada máquina remota que não é viável para grandes configurações. / p>

Aqui está como funciona no meu, isso funciona para passar 3 argumentos remotamente, mas você pode aumentar o número no seu arquivo commands.cfg ou equivalente:

# Check NRPE command
define command {
    command_name check_nrpe
    command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$ $ARG3$ $ARG4$
}

Observe que $ ARG1 $ na linha acima é reservado para o comando em si, então é realmente $ ARG2 $, $ ARG3 $ e $ ARG4 $ que são enviados para o script remoto, mas quando chegam no script remoto eles será listado como $ ARG1 $ $ ARG2 $ e $ ARG3 $ (isto é o que markus estava dizendo sobre a mistura de argumentos) e, portanto, deve ser definido como tal no nrpe.cfg da máquina remota

A (s) máquina (s) remota (s) nrpe.cfg:

command[check_pgsql]=/usr/lib/nagios/plugins/check_pgsql -d $ARG1$ -l $ARG2$ -p $ARG3$

E finalmente defina o serviço:

define service{
    use                             test-service;
    host_name                       DEMOCGN002;
    service_description             Postgres State;
    check_command                   check_nrpe!check_pgsql!test!test!test;
    notifications_enabled           1;
    }
    
por 12.06.2012 / 11:53