Отправляем уведомления Nagios в чат Skype

в 11:01, , рубрики: linux, nagios, skype, велосипед, Песочница, системное администрирование, уведомления, метки: , , ,

Итак, однажды в голову пришла мысль, что было бы здорово получать уведомления от Nagios в skype.
Вкратце: используем Skype4Py, скриптом отправляем уведомления.
Жирный минус: skype не работает без иксов.
Плюс: уменьшение времени реакции на проблемы.

Интересно? Подробности под катом.

Гугление выявило лишь один похожий вариант отправки уведомлений в скайп, но для Zabbix.
Спасибо автору, убедил, что идея осуществима!

Итак, дальнейшие операции проводились под Gentoo, но вполне легко должны воспроизводиться и для других дистрибутивов.

Нам понадобится целый набор пакетов:
— X


# emerge x11-apps/xdm x11-apps/xsm x11-base/xorg-drivers x11-base/xorg-server x11-base/xorg-x11 -pv

— skype и Skype4Py, который позволит отправлять сообщения


# emerge skype skype4py -pv

При установке skype будет предложено принять лицензию, для этого её нужно дописать в ACCEPT_LICENSE в make.conf.
Кроме того, если система 64-битная, можно убедиться, что в ядре присутствует опция CONFIG_IA32_EMULATION=y, которая позволит запускать 32-битные приложения, иначе 32-битный скайп не запустится.
Также мне понадобилось пересобрать udev с поддержкой X:


USE="X" emerge udev -pv

Пока всё скомпилируется, можно почитать хабр, съездить в отпуск, построить дом, посадить дерево, вырастить сына…

Ура! Мы на полпути.
Теперь самое интересное.

Регистрируем учётную запись для нашего нагиоса: здесь.

Самый удобный вариант — настроить учётную запись skype на отдельном хосте(напр., на своём ноутбуке), а затем скопировать ~/.Skype/ на сервер в домашнюю папку пользователя nagios.
Что полезно сделать:
— включить автоматический логин пользователя при запуске skype;
— отключить все pop-up и звуковые уведомления о событиях;
— добавить нашего юзера в чат, куда планируем в дальнейшем писать «письма счастья».

Кроме того, необходимо авторизовать Skype4Py, разрешив ему выполнять действия от имени нашего пользователя. Для этого
1) запускаем python2.7;
2) подключаемся к уже рабочему скайпу, с залогиненным юзером нагиоса

>>> import Skype4Py <br>
>>> import sys <br>
>>> skype = Skype4Py.Skype(Transport='x11')
>>> skype.Attach()

подтверждаем в появившемся окошке, что разрешаем Skype4Py подключаться, ставим галочку, чтобы больше не спрашивали;
3) первый чат, в который нас добавили, виден как skype.Chats[0] — напишем-ка что-нибудь:

>>> msg = "Ololo"
>>> skype.Chats[0].SendMessage(msg)

Пришло? Отлично, значит, можно двигаться дальше.

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

Выключаем скайп, копируем ~/.Skype/ на целевой сервер с нагиосом, в домашнюю папку пользователя nagios.

Замечание: указанные действия вполне можно произвести сразу на нужном сервере, запустив однократно x11vnc, тогда нужно доустановить x11vnc, xterm, twm, как самый облегчённый вариант. Результат не изменится, но лишние приложения ставить изначально не хочется.

Проверяем, на каком мы свете на целевом сервере:

# su - nagios
$ export DISPLAY=:0
$ Xvfb :0 -screen 0 800x600x16 &
$ skype &

Если в выводе не обнаружилось ошибок — всё в порядке. Проверяем, не умерли ли Xvfb и skype — ищем их в процессах.
Затем пробуем подключиться и что-нибудь отправить.
Если подключиться не удалось(Connection refused) и учётной записи нет онлайн — значит был отключен автологин, нужно его включить и заново скопировать ~/.Skype/ на сервер с нагиосом.

Итак, есть рабочий скайп, через который мы умеем отправлять сообщения. Обучим этому nagios.
Создадим в домашней папке(например, /var/nagios/home/) 2 файла:

alert.sh:
#!/bin/bash
export DISPLAY=:0
/usr/bin/python2.7 /var/nagios/home/alert.py "$*"

и

alert.py:
#!/usr/bin/python2.7
import Skype4Py
import sys
skype = Skype4Py.Skype(Transport='x11')
skype.Attach()
msg=' '.join(sys.argv[1:])
skype.Chats[0].SendMessage(msg)

Не забываем сделать шелл-скрипт исполняемым ( chmod +x alert.sh ) и переходим к донастройке нагиоса.
Добавляем контакт в /etc/nagios/contacts.cfg:

define contact{
contact_name skype
alias Skype
use generic-contact
service_notification_commands notify-service-by-skype
host_notification_commands notify-host-by-skype
}

Дописываем наш контакт в группу admins или любую другую, которая получает уведомления о проблемах от nagios.

И расшифровываем команды notify-*-by-skype в /etc/nagios/objects/commands.cfg

# 'notify-host-by-skype'
define command{
command_name notify-host-by-skype
command_line /var/nagios/home/alert.sh "$NOTIFICATIONTYPE$ Host: $HOSTNAME$ State: $HOSTSTATE$ Info: $HOSTOUTPUT$"
}

# 'notify-service-by-skype'
define command{
command_name notify-service-by-skype
command_line /var/nagios/home/alert.sh "$NOTIFICATIONTYPE$ Host: $HOSTNAME$ Service: $SERVICEDESC$ Info: $SERVICEOUTPUT$"
}

Обратите внимание, что выводить можно любую необходимую информацию, например, можно добавить переменную с описанием хоста.
Не забываем перечитать конфиг nagios (/etc/init.d/nagios reload) и любуемся результатами!

Полезные ссылки:

1. Nagios документация: www.nagios.org/documentation
2. Skype4Py документация: skype4py.sourceforge.net/doc/html/

Автор: dinix

* - обязательные к заполнению поля