Уведомления от Zabbix в Telegram

Содержание

В Интернете есть много статей про ботов в Telegram на python, bash, etc… но если вам нужна простейшая, ни от кого не зависимая уведомлялка, то читайте дальше.

Регистрируем своего бота, для этого пишем в Telegram боту @BotFather

Скрипт

На Zabbix сервере добавляем скрипт, через который будут отправляться сообщения. KEY, он же токен бота берем из диалога с BotFather.

Кстати, обратите внимание на вот этот кусочек кода:

Таким образом обеспечивается перенос строки, я пробовал всякие там br, br /, /n, /r — ничего не работало, а вот такой перенос — работает ;-). И ещё хозяйке на заметку (хотя я это и не использую): All , and symbols that are not a part of a tag or an HTML entity must be replaced with the corresponding HTML entities ( with lt; , with gt; and with amp; ).

Меняем владельца и делаем скрипт исполняемым.

Параметрами $1, $2, $3 для скрипта являются получатель, тема и тело сообщения. Вы можете сами проверить как Zabbix будет дёргать скрипт, выполнив команду /usr/lib/zabbix/alertscripts/zbxtg.sh user_id message_theme message_body

Чтобы узнать свой user id, нужно найти бота в поиске в приложении Telegram или перейти по ссылке http://telegram.me/имя_бота и нажать на /start и что-нибудь ему написать, после чего зайти на https://api.telegram.org/botтокен:бота/getUpdates и увидеть факт отправки сообщения от вас боту. Сообщения будут иметь вид:

Заметка: чтобы добавить бота в группу, нужно нажать на название группы в Telegram, выбрать Добавить участников и в поиске набрать имя_бота.

Оповещение

Добавляем способ оповещения, для этого идём в Администрирование — Способы оповещений, добавляем новый. Указываем Имя оповещения, Тип: Скрипт, Имя скрипта: zbxtg.sh (подразумевается, что скрипт лежит в определённой директории, которая указывается в конфиге сервера, т.е. в /etc/zabbix/zabbix_server.conf).

Дополнение для Zabbix 3.0

В третьей версии Zabbix нужно при создании media type обязательно указывать три параметра , и , как написано тут: https://www.zabbix.com/documentation/3.0/manual/config/notifications/media/script иначе $1..$3 не передаются в скрипт, и, соответственно, ничего не работает. Спасибо за дополнение Dmitry Burtsev и Nikolay Groo
Первоисточник: https://hellsman.ru/admin/linux/opoveshheniya-zabbix-cherez-telegram-s-pomoshhyu-telegram-botapi#hcq=NtUMuOp

Действие

Добавляем действие, для этого идём в Настройка — Действия, выбираем Источник событий — Триггеры и добавляем новое (обычно в этом разделе уже есть какое-нибудь оповещение через email или т.п.). Далее идёт самый изюм, из-за которого стоит просмотреть этот пост :-). Если событий сыпется много, то их дико неудобно воспринимать, а в телеге можно кое-как отформатировать текст, чем и воспользуемся.

Итак, Имя — названия действия
Тема по умолчанию * — *«* — — *
Сообщение по умолчанию

Если Вам нужно сообщение о восстановлении, то ставим галочку и заполняем поля аналогично. На вкладке Условия добавляем какие душе угодно зависимости: узлы/группы/шаблоны, важность триггеров, время и прочее.

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

Длительность шага работает так: срабатывает триггер, с этого момента начинается отсчёт времени и это промежуток времени считается шагом 1. Когда отсчитывается N секунд, соответствующее длительности (по умолчанию 60 сек), наступает шаг 2 и т.д. Таким образом можно например отправлять сообщения разными способами (sms, email, etc) или определённым пользователям/группам если событие (триггер) не подтверждено в течение какого-либо времени.

Пользователь

Добавляем способ оповещения для пользователя. Для отправки сообщения в телеграмовскую группу я создал фиктивного пользователя в Zabbix и добавил ему оповещение с id группы (для групп всегда со знаком минус).

В результате получаем сообщения такого вида:

Напоследок

Дополнительный совет по поводу Telegram. Русификация: пишем @telerobot фразу locale windows ru, скачиваем файлик. По инструкции нужно зажать Alt+Shift и нажать на кнопку выбора языка в настройках, но под линуксом это не работает, поэтому заходим в настройки и просто печатаем на клавиатуре волшебное слово loadlang после чего открывается окно с выбором файла для локализации.


Источник: djvn.sk