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

Передача аргумента в скрипте .py для плагина nrpe

Станок 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, за исключением обратного.)