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

Обработчик событий Nagios / команда не выполняется

Я пытаюсь настроить свою настройку Nagios на автоматическую регистрацию заявки в нашей системе продажи билетов, когда хост выходит из строя (служба PING переходит в состояние HARD CRITICAL). У меня есть сценарий, который будет создавать билеты, которые успешно работают с sudo -u nagios. У меня настроен обработчик команд и событий, который выполняется, когда состояние хоста выходит из строя или, по крайней мере, кажется. Однако сценарий, связанный с командой, похоже, не выполняется, или добавленное мной ведение журнала не работает. Есть идеи, где искать дальше? Файл журнала не создается при вызове обработчика событий.

команда:

define command {
        command_name    make-ticket
        command_line    /etc/nagios/commands/make-ticket-wrapper "$SERVICESTATE$" "$SERVICESTATETYPE$" "$HOSTNAME" "$HOSTADDRESS$ "$HOSTSTATE" "$HOSTGROUPALIAS" "$SERVICEDESC"
}

пример хоста и сервиса

define host {
    use             generic-switch
    host_name       test
    alias           test
    address         192.168.100.13
    }

define service {
    use                     generic-service
    host_name               test
    service_description     PING
    check_command           check_ping!200.0,20%!600.0,60%
    normal_check_interval   5
    retry_check_interval    1
    event_handler           make-ticket
    }

сценарий оболочки:

#!/bin/bash
#
# Cut a ticket
#

set -x

LOGFILE="/tmp/tickets.log"

touch $LOGFILE
echo Running make-ticket-wrapper `date` >> $LOGFILE
echo Params: $* >> $LOGFILE

TICKET="/etc/nagios/commands/make-ticket"

SERVICESTATE="$1"
SERVICESTATETYPE="$2"
HOSTNAME="$3"
HOSTADDRESS="$4"
HOSTSTATE="$5"
HOSTGROUPALIAS="$6"
SERVICEDESC="$7"

echo "SERVICESTATE=$SERVICESTATE" >> $LOGFILE
echo "SERVICESTATETYPE=$SERVICESTATETYPE" >> $LOGFILE
echo "HOSTNAME=$HOSTNAME" >> $LOGFILE
echo "HOSTADDRESS=$HOSTADDRESS" >> $LOGFILE
echo "HOSTSTATE=$HOSTSTATE" >> $LOGFILE
echo "HOSTGROUPALIAS=$HOSTGROUPALIAS" >> $LOGFILE
echo "SERVICEDESC=$SERVICEDESC" >> $LOGFILE

$TICKET "$SERVICESTATE" "$SERVICESTATETYPE" "$HOSTNAME" "$HOSTADDRESS" "$HOSTSTATE" "$HOSTGROUPALIAS" "$SERVICEDESC" 2>&1 | tee -a $LOGFILE

журнал:

[1422560163] HOST ALERT: test;DOWN;SOFT;1;(Host Check Timed Out)
[1422560253] HOST ALERT: test;DOWN;SOFT;2;(Host Check Timed Out)
[1422560353] HOST ALERT: test;DOWN;SOFT;3;(Host Check Timed Out)
[1422560433] SERVICE ALERT: test;PING;CRITICAL;HARD;1;PING CRITICAL - Packet loss = 100%
[1422560433] SERVICE EVENT HANDLER: test;PING;CRITICAL;HARD;1;make-ticket

command_line /etc/nagios/commands/make-ticket-wrapper "$SERVICESTATE$" "$SERVICESTATETYPE$" "$HOSTNAME" "$HOSTADDRESS$ "$HOSTSTATE" "$HOSTGROUPALIAS" "$SERVICEDESC"

Вам не хватает двойной кавычки после $ HOSTADDRESS $ и не хватает $ в конце HOSTNAME, HOSTSTATE, HOSTGROUPALIAS и SERVICEDESC.

Когда вы пропускаете двойные кавычки, остальная часть строки портится, в результате чего сценарий оболочки пропускает некоторые аргументы.

Когда вы опускаете знак доллара в конце, Nagios не заменяет макрос, поэтому он передается в оболочку, где разрешается как пустая переменная.

Nagios задыхается от всех этих цитат

изменение:
command_line /etc/nagios/commands/make-ticket-wrapper "$SERVICESTATE$" "$SERVICESTATETYPE$" "$HOSTNAME" "$HOSTADDRESS$ "$HOSTSTATE" "$HOSTGROUPALIAS" "$SERVICEDESC"

кому:
command_line /etc/nagios/commands/make-ticket-wrapper $SERVICESTATE$ $SERVICESTATETYPE$ $HOSTNAME$ $HOSTADDRESS$ $HOSTSTATE$ $HOSTGROUPALIAS$ $SERVICEDESC$

Кроме того, вы также пропустили несколько знаков $ в командной строке, смотрите выше. После этого он будет работать должным образом. Я только что попробовал:

#cat /tmp/tickets.log Running make-ticket-wrapper Mon Feb 2 17:32:05 EST 2015 Params: OK HARD test 192.168.1.1 UP $ PING SERVICESTATE=OK SERVICESTATETYPE=HARD HOSTNAME=test HOSTADDRESS=192.168.1.1 HOSTSTATE=UP HOSTGROUPALIAS=$ SERVICEDESC=PING