Настройка уведомлений nagios по средствам telegram/wat’s app/ и других.
В данной статье-заметке расскажу как настроить уведомления nagios 4.x.x по средствам личных сообщений в месенджеры, на примере Telegram.
С чего же у меня зародилась данная идея?
Появилась необходимость мониторить несколько VPS серверов на наличие проблем. Для этих целей был выбран более или менее знакомый(в плане работы, а не настройки) nagios. Так как на любую почту сыплется море спама, да и почту с телефона просматривать не всегда удобно, уведомления по средствам email было решено отбросить, а для оперативной связи использовать мессенджер Telegram .
Плюсы отправки уведомлений в месенджер:
Всегда под рукой;
Можно настроить специальную мелодию на алерты;
Никакого спама;
Есть как веб-версия, так и приложения для любого устройства.
Подготовка:
Для настройки нам потребуется:
- Личная учетная запись телеграмм куда будут отправляться уведомления
- Дополнительный аккаунт (номер телефона), с которого будут приходить уведомления с сервера
- Сервер VPS/VDS
- Установленный nagios
Приступаем:
Первое что необходимо сделать, это установить нативный клиент Telegram CLI for Linux, находящийся в разделе неофициальных приложений на самом сайте telegram.
На centos 6.6 он ставится из репозиториев:
yum install telegram-cli
Для других ОС можно воспользоваться инструкцией с github.
После первого запуска команды, Вас попросят ввести номер телефона и проверочный код, к запуску рекомендую добавлять ключ -D чтобы скрыть лишний вывод:
bash-4.1$ telegram-cli -D phone number: xxxxxxxxxxx code ('call' for phone call): xxxxxx
После ввода кода попадаем в сам клиент. Команды можно узнать набрав help, проверяем что работает:
> contact_list Nagios M Anton Ne
Заметка: Добавление контакта требует указания Имени и Фамилии, для дальнейшей работы с таким контактом используйте вместо пробела _
например:
> msg Anton_Ne test [11:31] Anton Ne <<< test
Теперь самое интересное, для отправки сообщения одной командой можно использовать ключ -e, после выполнения команды клиент завершит свою работу.
В этом месте я столкнулся с главной проблемой нативного клиента, после авторизации требуется некоторое время для получения списка контактов и загрузки сообщений, в связи с чем поданное напрямую сообщение из консоли не могло корректно определить получателя:
# telegram-cli -D -e 'msg Anton_Ne test2' change_user_group: can't find the user telegramd to switch to > FAIL: 38: can not parse arg #1 > All done. Exit halt
Немного покопавшись было найдено решение, путем добавления нескольких ключей:
#telegram-cli -WR -D -e 'msg Anton_Ne test2'
В этом случае всё работает как часы.
С клиентом разобрались, теперь приступим к настройке nagios:
Нам необходимы два конфигурационных файла. Местоположение зависит от установки, ищем где находится nagios:
#whereis nagios nagios: /etc/nagios /usr/lib64/nagios /usr/local/nagios
Файлы, в данном случае будут находится в каталоге
/usr/local/nagios/etc/objects/
commands.cfg contacts.cfg
При установке из репов, могут быть в /etc/nagios
Открываем commands.cfg и добавляем нотификацию для хостов и сервисов:
# 'notify-service-by-tg' command definition define command{ command_name notify-service-by-tg command_line /usr/bin/telegram-cli -WR -U root -D -e 'msg $_CONTACTTG$ $NOTIFICATIONTYPE$ Host : $HOSTNAME$ - Service : $SERVICEDESC$ is $SERVICESTATE$ @ $LONGDATETIME
# 'notify-host-by-tg' command definition define command{ command_name notify-host-by-tg command_line /usr/bin/telegram-cli -WR -U root -D -e 'msg $_CONTACTTG$ “$NOTIFICATIONTYPE$ Host : $HOSTNAME$ is $HOSTSTATE$ @ $LONGDATETIME$”' }
Всё с этим файлом закончили.
Открываем contacts.cfg и добавляем в контакт (define contact) или группу (define contactgroup) следующие строки:
_tg имя_вашей_основной записи ( в примере Anton_Ne) service_notification_commands notify-service-by-email notify-service-by-tg host_notification_commands notify-host-by-email notify-host-by-tg
Перезапускаем nagios:
Service nagios restart
Внимание! Не забудьте что команда выполняется из под пользователя nagios а, поэтому у nagios должно хватать прав для запуска команды /usr/bin/telegram-cli, в том числе и регистрация должна быть пройдена под этим пользователем.
Проверяем, заходим в нагиос ищем проблемный сервис и отправляем тестовую рассылку:
И радуемся полученному сообщению:
PS Для других месенджеров, аля what’s app , достаточно изменить command_line в настройках нагиос на команду отправки сообщения из консоли через нативное приложение, пример:
yowsup-cli -c $USER1$/yowsup/yowsup-cli.config -s $_CONTACTWHATSAPP$ “$NOTIFICATIONTYPE$ Host : $HOSTNAME$ is $HOSTSTATE$ @ $LONGDATETIME$”
}
Всё с этим файлом закончили.
Открываем contacts.cfg и добавляем в контакт (define contact) или группу (define contactgroup) следующие строки:
Перезапускаем nagios:
Внимание! Не забудьте что команда выполняется из под пользователя nagios а, поэтому у nagios должно хватать прав для запуска команды /usr/bin/telegram-cli, в том числе и регистрация должна быть пройдена под этим пользователем.
Проверяем, заходим в нагиос ищем проблемный сервис и отправляем тестовую рассылку:
И радуемся полученному сообщению:
PS Для других месенджеров, аля what’s app , достаточно изменить command_line в настройках нагиос на команду отправки сообщения из консоли через нативное приложение, пример:
Добрый день. Через консоль сообщения одной командой отправляются нормально. Через nagios тишина.
Грешу на contacts.cfg
define contact{
contact_name kirill ;
use generic-contact ;
alias Nagios Admin ;
email ####@inbox.ru ;
_tg kirill_ivanov ;
service_notification_commands notify-service-by-tg ;
host_notification_commands notify-host-by-tg ;
}
Покажите, полные конфиги contact.cfg, command.cfg, а также проверьте что у нагиоса хвататет прав на запуск, для этого например можно выполнить:
sudo -u nagios -s Если используется пользователь nagios, после чего запустить команду отправки из консоли и проверить не будет ли ошибок.
PS
Также, не забываем что после изменения конфигов nagios его требуется перезапустить.
Также если нагиос установлен из коробки и не настроен, то директива contact_name kirill ; выдаст ошибку при перезагрузке, так как данный контакт не прописан и не имеет алиаса Nagios Admin. Укажите в данном поле nagiosadmin и проверьте.
Большое спасибо за ответ!
Содержимое contacts.cfg
define contact{
contact_name nagiosadmin
use generic-contact
alias Nagios Admin
service_notification_period 24×7
host_notification_period 24×7
service_notification_options w,u,c,r,f,s
email nagios@localhost
_tg kirill_ivanov
service_notification_commands notify-service-by-tg
host_notification_commands notify-host-by-tg
}
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members nagiosadmin
}
Содержимое commands.cfg
# ‘notify-service-by-tg’ command definition
define command{
command_name notify-service-by-tg
command_line /usr/bin/telegram-cli -WR -U root -D -e ‘msg $_CONTACTTG$ $NOTIFICATIONTYPE$ Host : $HOSTNAME$ — Service : $SERVICEDESC$ is $SERVICESTATE$ @ $LONGDATETIME$’
}
# ‘notify-host-by-tg’ command definition
define command{
command_name notify-host-by-tg
command_line /usr/bin/telegram-cli -WR -U root -D -e ‘msg $_CONTACTTG$ «$NOTIFICATIONTYPE$ Host : $HOSTNAME$ is $HOSTSTATE$ @ $LONGDATETIME$»‘
}
***Вывод команды в консоли из под sudo -u nagios -s***
nagios@debian:/home/kirill$ telegram-cli -WR -D -e ‘msg kirill_ivanov test’
open[config_file]: No such file or directory
I: config_file=[/home/nagios/.telegram-cli/config]
Видимо нагиос у вас настроен из под пользователя root, а не nagios. Создайте директорию /home/nagios/ и пройдите стандартную авторизацию telegram из консоли под sudo -u nagios -s, после этого должно заработать.
Доброй ночи!
В чем может быть проблема, из под пользователя nagios из консоли все замечательно отправляется, а из скрипта тишина. В логах пишется [01-11-2015 00:40:23] HOST NOTIFICATION: admin;localhost;CUSTOM (UP);notify-host-by-telegram;PING OK — Packet loss = 0%, RTA = 0.04 ms;nagios;test Но месага не приходит.
Уведомление: sildenafil vs tadalafil