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