Назад | Перейти на главную страницу

Команда Nagios не передает все аргументы

Я использую следующую службу для мониторинга нашей базы данных postgres из 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
       }

На удаленной машине я настроил команду:

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

В системном журнале я вижу, что команда выполняется, но передается только один аргумент:

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
    }

Нет необходимости передавать IP-адрес, потому что он получает значение host_name.

У меня была такая же проблема, и я немного не согласен с принятым ответом, поэтому я подумал, что опубликую решение, если кто-то другой столкнется с ним.

Вы МОЖЕТЕ выполнить удаленный сценарий, используя 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 $ (это то, что Маркус говорил о смешивании аргументов) и, следовательно, должны быть определены как таковые в файле 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;
    }