Схема функционирования:
- Nagios посылает ALARM в комнату Hipchat-а при срабатывании пробника (сервер нагиос)
- Пользователь HipChat отвечает на сообщение ACK ответом (через сервер hipchat)
- Nagios обрабатывает запрос ACK (сервер нагиос)
Для работы необходим запущенный демон на сервере нагиос: /usr/local/etc/rc.d/hipchat start|stop
Подробности:
В HipChat созданы комнаты: nagios_devops-infra, nagios_devops-core
Каждой комнате, HipChat присваивает уникальный номер. Для доступа к API необходимо получить token через веб-интерфейс (например, для комнаты с номером 216, т.е. для nagios_devops-infra: https://hipchat.local/rooms/tokens/216).
- NAGIOS
Для nagios_devops-infra:
Описание контакта:
define contact{
contact_name devops-infra-hipchat
use contact-by-hipchat
alias devops-infra-hipchat
email devops-infra-hipchat:216:token
}
Где 216 - номер комнаты, token - token
Команды, которые нагиос запускает в случае алерта:
Темплейт:
define contact{
name contact-by-hipchat
service_notification_period 24x7
host_notification_period 24x7
service_notification_options c,r
host_notification_options d,r
service_notification_commands notify-service-by-hipchat
host_notification_commands notify-host-by-hipchat
register 0
}
И сами команды:
define command{
command_name notify-host-by-hipchat
command_line $USER2$/notify_to_hipchat.pl $CONTACTEMAIL$ "$HOSTNAME$ $HOSTSTATE$ is $NOTIFICATIONTYPE$ $HOSTSTATE$"
}
define command{
command_name notify-service-by-hipchat
command_line $USER2$/notify_to_hipchat.pl $CONTACTEMAIL$ "$HOSTNAME$ $SERVICEDESC$ is $NOTIFICATIONTYPE$ $SERVICESTATE$"
}
Скрипт notify_to_hipchat.pl на основе полученных данных генерит и отправляет в комнату ответственных админов сообщение, например такое: myserver.local CHECK_HTTP is PROBLEM CRITICAL:
#!/usr/bin/perl -w my @array_hipchat=@ARGV; my $realtext = $TEXT; my $url = "https://hipchat.rbc.ru/v2/room/$TO[1]/notification?auth_token=$TO[2]"; |
2. HIPCHAT
Пользователь отвечает на сообщение ACK ответом (принимается только один ACK):
для сервисов: /ack myserver.local CHECK_HTTP 2016-08-30 11:55
для хостов: /ack myserver.local 2016-08-30 11:55
Также можно запросить помощь отправив команду /ack в диалог боту.
На пользовательский ответ срабатывает вебхук (собственно /ack и есть вебхук). Хук настраивается собственными средствами HipChat по ссылке https://hipchat.local/rooms/show/216 далее идти в Integrations (216 это номер комнаты).
Хук настроен на POST запрос http://ip_nagios:9090/
3. NAGIOS
На порту 10.14.7.129:9090 (сервер nagios) висит демон (/usr/local/etc/rc.d/HipChat start|stop), принимающий запросы от HipChat.
Файл настроек: /usr/local/etc/server_chat.conf
[Hipchat_room_token]
216=token216
218=token218
[Log]
log_file=/var/log/hipchat.log
Здесь в секции Hipchat_room_token задаются номера комнат и их токены.
Работает приложение так: принял запрос -> обработал -> отправил ACK в командный интерфейс нагиоса (вызов скриптов /usr/local/bin/ack_host и /usr/local/bin/ack_service с необходимыми параметрами) -> отправил нотификацию собеседнику.
Скрипт ack_host:
#!/bin/sh
printfcmd="/usr/bin/printf"
CommandFile="/var/spool/nagios/rw/nagios.cmd"
datetime=`date +%s`
`$printfcmd "[%i] ACKNOWLEDGE_HOST_PROBLEM_EXPIRE;$1;1;1;1;$2;hipchat;ack from bot nagios%i\n" $datetime >> $CommandFile`
ack_service:
#!/bin/sh
printfcmd="/usr/bin/printf"
CommandFile="/var/spool/nagios/rw/nagios.cmd"
datetime=`date +%s`
`$printfcmd "[%i] ACKNOWLEDGE_SVC_PROBLEM_EXPIRE;$1;$2;1;1;1;$3;hipchat;ack from bot nagios%i\n" $datetime >> $CommandFile`
Ну и сам бот https://unix-way.ru/files/server_chat.py