Станок A = мастер nagios, станок B = кромочный станок.
В host.cfg машины A у меня есть:
define command {
command_name check_tok
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_tok 123
}
define service
use bg-service
hostgroup_name test_oob1
service_description Recall12
check_command check_tok
servicegroups nrpe
}
В файле commands.cfg машины B в /etc/nrpe.d у меня есть:
command[check_tok]=/usr/lib64/nagios/plugins/check_test.sh
В каталоге B / usr / lib64 / nagios / plugins у меня есть check_test.py и check_test.sh.
check.test.sh выглядит так:
#!/bin/sh
/usr/bin/sudo /usr/lib64/nagios/plugins/check_test.py
exit $?
и check_test.py выглядит следующим образом:
#!/usr/bin/env python
import sys
if __name__ == "__main__":
if sys.argv == '123'
print("this ok")
sys.exit(0)
else:
print('this is not 123')
sys.exit(2)
В машине B /etc/sudoers.d/nrpe nrpe ALL = (ALL) NOPASSWD: /usr/lib64/nagios/plugins/check_test.py
Как видите, аргумент, который я вставляю в check_test.py, равен «123», и это должно привести к sys.exit (0). однако в моем nagios mon он сказал: «NRPE: невозможно прочитать вывод»
По умолчанию nrpe не допускает аргументов. Вы можете обойти это, установив dont_blame_nrpe=1
в конфигурации nrpe. Также ваш nrpe должен быть построен с --enable-command-args
. Однако учтите, что:
*** ENABLING THIS OPTION IS A SECURITY RISK! ***
При этом вам действительно следует жестко закодировать свои аргументы для команды nrpe на стороне клиента.
Также вы должны передать аргументы из вашего сценария оболочки интерпретатору Python. Добавление "$@"
должен сделать свое дело:
#!/bin/sh
/usr/bin/sudo /usr/lib64/nagios/plugins/check_test.py "$@"
exit $?
И sys.argv
в вашем скрипте python есть список, поэтому вы должны написать sys.argv[1]
вместо.
Я предлагаю вам сначала протестировать свои скрипты локально, прежде чем пытаться подключиться со стороны nagios.
Вам нужно использовать -a
для передачи аргументов в NRPE.
Также сделайте -c
командный вызов $ARG1$
поэтому вам не нужно писать отдельный командный объект для каждого вызова NRPE.
Например:
define command {
command_name check_nrpe_arg
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$
}
и сервис def:
define service {
use bg-service
hostgroup_name test_oob1
service_description Recall12
check_command check_nrpe_arg!check_tok!123
servicegroups nrpe
}
Вам также понадобится команда на стороне демона NRPE, чтобы что-то сделать с аргументом (это не просто волшебным образом):
command[check_tok]=/usr/lib64/nagios/plugins/check_test.sh $ARG1$
Тогда у вас будет отдельный check_nrpe
для вызовов, которые не принимают никаких аргументов, без -a $ARG2$1
в конце. (Это аналогичная концепция, что и команды в пакетах Debian / Ubuntu, за исключением обратного.)