Уведомления Zabbix в Телеграм — Kosmuxa.ru
Меню Закрыть

Уведомления Zabbix в Телеграм

Zabbix- система мониторинга сетей. Позволяет следить за состоянием узлов сети. Одной из важных возможностей является отправка уведомлений. Из коробки он умеет отправлять уведомления на почту, jabber и слать смс. Для последнего ему нужен модем с сим-картой.

Пришла в голову идея отправки уведомлений в популярный мессенджер. Помимо описанных способов оповещений система еще умеет выполнять пользовательские скрипты, на этом и основана отправка уведомлений.

Первое что понадобится — это завести бота в телеграм, который и будет отправлять нам уведомления. Делается это через @BotFather — официальный бот телеграма для управления пользовательскими ботами. Подробную инструкцию приводить не буду. Заводим бота @MyZabbixNotifier_bot.

Теперь заводим способ оповещения в разделе Администрирование -> Способы оповещений. Указываем следующие настройки:
— Имя — понятное нам имя
— Тип — Скрип
-Имя скрипта — Имя выполняемого скрипта, лежат в папке/usr/local/share/zabbix/alertscripts
— Параметры скрипта — Здесь указывается что будет передаваться скрипту для отправки.

Настроенный способ оповещения.

Теперь перейдем к скрипту. Я остановился на обычном shell скрипте. Дополнительно нам понядобятся две утилиты: cURL и torsocks. Первая для отправки запроса на api.telegram.org, вторая входит в состав пакета tor и нужна для корректной работы на территории РФ. Отправка сообщения ботом осуществляется путем отправки POST запроса на https://api.telegram.org/bot%TOKEN%/sendMessage с параметрами chat_id и text, где
%TOKEN% — токен, который вам выдает @BotFather при создании бота
chat_id — id чата с конкретным человеком, откуда его взять рассмотрим чуть ниже
text — собственно отправляемое сообщение
Ниже листниг скрипта:

#!/bin/sh

CHAT_ID=$1
SUBJ=$2
TEXT=$3
MESSAGE="$2 - $3"
URL="https://api.telegram.org/bot1234567890:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/sendMessage"

torsocks curl -s -X POST $URL -d chat_id=$CHAT_ID -d text="$MESSAGE"

Скрипт простейший, во внутренние переменные записываем параметры $1, $2, $3 указанные в способе оповещения и url, на который будем слать запрос. В конце скрипта собственно выполняем запрос с параметрами.

Далее необходимо настроить оповещения для конкретного пользователя. В Zabbix заходим в настройки собственного профиля, раздел Оповещения. Выбираем ссылку добавить:

Настройка оповещения в профиле

Выбираем созданный нами способ оповещения. В поле отправлять на указываем chat_id (как его получить описано ниже). После выбираем какие типы уведомлений будут приходить в телеграм. Жмем «Добавить» и «Обновить»

Как получить chat_id?

После добавления бота в свой список контактов, нам необходимо выполнить запрос
https://api.telegram.org/bot1234567890:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/getUpdates
Можно просто вставить строку в адресную строку браузера, я делал из командной строки через torsocks и curl, т.к. домен telegram.org на территории РФ заблокирован. В ответ получаем JSON строку вида:

{"ok":true,
"result":[{"update_id":963980712,
"message":{"message_id":3,
"from":{"id":339829668,
"is_bot":false,
"first_name":"Mikhail",
"last_name":"Kostikov",
"username":"kosmuxa",
"language_code":"ru"},
"chat":{"id":339829668,
"first_name":"Mikhail",
"last_name":"Kostikov",
"username":"kosmuxa",
"type":"private"},
"date":1557153837,
"text":"/start"}
}]}

Из этих данных нас интересует result->chat->id, этой и есть искомый номер.

Теперь можно протестировать оповещения:

И реальное сообщение о падении узла

Сообщение о падении узла.

Самым неудобным моментом мне кажется получение id чата, т.е. идентификация конкретного пользователя. Однко, если у вас не много пользователей, то думаю это не очень большая проблема.

На этом все, уведомления приходят. Пишите комментарии, вопросы, замечания. С удовольствием на все отвечу.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *