Команды NSClient++ для NRPE с Windows Server 2012 от Icinga

Я исследовал эту проблему в течение нескольких дней, но я не могу найти решение. У меня есть сервер Windows 2012 с установленным на нем NSClient++. У меня также есть сервер Icinga с установленным плагином Nagios NRPE. Кроме того, NSClient++ настроен на прием команд NRPE и установлен параметр «разрешить аргументы = 1». С сервера Icinga, когда я ввожу этот ввод:

/usr/lib/nagios/plugins/check_nrpe -H 192.168.1.22 -c alias_cpu

это дает следующее: OK Загрузка ЦП в порядке.|'5m'=27%;80;90 '1m'=26%;80;90 '30s'=26%;80;90


Итак, все выглядит совершенно нормально, но из веб-интерфейса Icinga я получаю эту ошибку: /usr/lib/nagios/plugins/check_nrpe: для опции требуется аргумент -- 'a'

Похоже, я просто не могу правильно понять команды. Я пробовал каждую команду, которую нашел в Интернете, но ни одна из них не работает нормально. Кроме того, документация NSClient для NRPE устарела, поскольку в них говорится, что вы должны использовать check_nt, но эта команда устарела уже более года, поэтому я должен использовать check_nrpe, но это тоже не работает.

Итак, я создал файл .cfg в /etc/icinga/objects и сейчас использую следующие команды:

define host{
       use windows-servers
       host_name host.domain.com
       alias host
       address 192.168.1.22
}

define service{
        use                             generic-service
        host_name                       host.domain.com
        service_description             Drive Usage
        check_command                   check_nrpe!alias_disk
        }


define service{
        use                     generic-service
        host_name               host.domain.com
        service_description     CPU Load
        check_command           check_nrpe!alias_cpu
}

На Windows Server параметры в nsclient.ini следующие:

[/settings/NRPE/server]
allowed hosts=172.16.0.7
allow arguments=1
port=5666
allow nasty_meta chars=1 
use SSL = 1

Кто-нибудь знает, что здесь происходит не так? У меня сейчас совсем нет вариантов. Я даю неправильные команды? Кто-нибудь знает правильные команды? Или я делаю что-то еще не так? Спасибо!


person Erjen Rijnders    schedule 18.11.2013    source источник


Ответы (3)


Этому несколько месяцев, но я хочу взвесить.

Ваше решение, переключение определений команд для check_nrpe и check_nrpe_1arg, не является оптимальным. check_nrpe используется, когда вы хотите передать внешнюю команду вместе с ее параметрами командной строки, а check_nrpe_1arg — когда вы хотите передать только внешнюю команду (именно это вы и пытаетесь сделать).

Для вашего варианта использования лучшим решением было бы оставить определения команд check_nrpe и check_nrpe_1arg как есть и изменить определения службы, чтобы использовать правильную команду:

define service{
    use                             generic-service
    host_name                       host.domain.com
    service_description             Drive Usage
    check_command                   check_nrpe_1arg!alias_disk
    }


define service{
    use                             generic-service
    host_name                       host.domain.com
    service_description             CPU Load
    check_command                   check_nrpe_1arg!alias_cpu
}

С другой стороны, если вы хотите передать параметры командной строки в nrpe, вы должны использовать команду check_nrpe. Вот так:

define service {
     use                            generic-service
     host_name                      host.domain.com
     service_description            Check SMART status of sda
     check_command                  check_nrpe!check_smart!/dev/sda
     }

(при условии, что в вашем nrpe.cfg определена следующая команда check_smart):

command[check_smart]=/usr/lib/nagios/plugins/check_ide_smart -d $ARG1$
person PPV    schedule 20.02.2014

С помощью форума Icinga/Nagios я узнал, что define_command была такой:

# this command runs a program $ARG1$ with arguments $ARG2$
define command {
        command_name    check_nrpe
        command_line    /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$
}

# this command runs a program $ARG1$ with no arguments
define command {
        command_name    check_nrpe_1arg
        command_line    /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

А должно быть так:

# this command runs a program $ARG1$ with arguments $ARG2$
define command {
        command_name    check_nrpe_1arg

        command_line    /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$
}

# this command runs a program $ARG1$ with no arguments
define command {
        command_name    check_nrpe
        command_line    /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

Только поменял местами две линии, но это стоило мне нескольких дней, чтобы выяснить это. Но, к счастью, сейчас это решено.

person Erjen Rijnders    schedule 19.11.2013

Что я обнаружил (тестирование на Icinga 2) после серьезной отладки, так это то, что то, как вы разделяете параметры команды проверки на разные строки, влияет на то, как они передаются дочернему процессу. Это может быть чрезвычайно большой проблемой, в зависимости от того, как дочерний процесс обрабатывает параметры командной строки внутри себя. Вот особенно сложный пример из реальной жизни:

object CheckCommand "cc-cisco-interface-status" {
  import "plugin-check-command"

  command = [ PluginDir + "/check_snmp_ifname.sh",
             "-H", "$host.address$",
             "-P 2c",
             "-C", "$host.vars.snmpcommunity$",
             "-o", "IF-MIB::ifOperStatus",
             "-IF", "$service.vars.ifname$"
            ]

Итак, с помощью этой команды дочерний процесс получает:

$1 = -H
$2 = 1.1.1.1
$3 = -P 2c
$4 = -C
$5 = MyCommunity
$6 = -o
$7 = IF-MIB::ifOperStatus
$8 = -IF
$9 = Serial0/0/0:0

Это сводило нас с ума, потому что, например,

             "-IF", "$service.vars.ifname$"
$8 = -IF
$9 = Serial0/0/0:0

работает пока

             "-IF $service.vars.ifname$"
$8 = -IF Serial0/0/0:0

не.

Но я думаю, что как только вы поймете, что происходит, это станет решаемой проблемой (и даже удобной, поскольку это дает вам неплохой контроль над строками в кавычках).

person Erik Carlseen    schedule 22.05.2014