2013-11-18 2 views
1

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

/USR/Библиотека/Nagios/плагины/check_nrpe -H 192.168.1.22 -c alias_cpu

это дает следующее: OK Загрузка CPU ОК . | '5m = 27%; 80; 90 '1м'= 26%; 80; 90 '30s'= 26%; 80; 90


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

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

Так что я создал .cfg файл в/и т.д./icinga/объектов и я в настоящее время используются следующие команды:

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 

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

ответ

1

С помощью форума 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$ 
} 

только поменялись местами две строки, но стоило мне дней узнайте. Но, к счастью, он теперь решен.

2

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

Вашего решения, переключая определение команд для 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 
} 

Если вы хотите, чтобы передать команду С другой стороны, вы можете использовать команду 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 
    } 

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

command[check_smart]=/usr/lib/nagios/plugins/check_ide_smart -d $ARG1$ 
1

На вещах я нашел (тестирование на 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 

работает в то время как

нет.

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

Смежные вопросы