Отправка уведомлений и графиков из zabbix в telegram

Содержание

Я чаще всего использую стандартные уведомления от zabbix на почтовый ящик, это позволяет спокойно спать. Тем не менее, решил пойти в ногу со временем и попробовать настроить отправку оповещений из zabbix в популярный мессенджер telegram. К тому же я постоянно активно пользуюсь этим мессенджером и считаю его очень удобным.

Введение

Способов настройки уведомлений из заббикса в телеграм существует несколько. Их можно разделить по информативности:

  • Отправка только текстовых оповещений.
  • Отправка графиков.

Так же можно разделить по типу реализации:

  • Использовать встроенный webhook в zabbix.
  • Написать свой простой скрипт для уведомлений.
  • Взять готовую реализацию уведомлений в telegram на github.

Я постараюсь разобрать все возможные варианты. Идти будем от простого к сложному. Сначала настроим текстовые оповещения, потом добавим графики. Отправлять будем как в личку, так и в группу.

Я буду настраивать все в zabbix 5.0, установленный на Centos 8. Принципиального значения это не имеет, решение будет одинаково работать практически на всех дистрибутивах linux.

Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:

То же самое на Debian 10, если предпочитаете его:

Создание бота в telegram

Первым делом создадим бота, через которого будем слать оповещения из заббикса. Для этого добавляем себе в контакты @BotFather и пишем ему сначала /start, потом /newbot.

Создание бота в telegram

Мы создали бота для оповещений и получили для него token, который нам понадобится далее. Теперь нужно добавить в свой список контактов созданного бота. Для этого найдите его по имени. В моем случае имя @serveradminru_bot.

Теперь проверим, как работает отправка уведомлений через нашего бота. Для этого в консоли сервера набираем примерно такую команду:

Бот пришлет оповещение.

Проверка отправки сообщений через бота

В моем запросе изменяемые данные следующие:

210806260 id моего аккаунта. Чтобы его узнать, добавьте бота @my_id_bot и напишите ему /start
Проверяю работу бота Текст сообщения
bot1393668911:AAHDfgghTHgfhdfyX28R-wxKfvh2WR6-vdNw Слово bot и дальше token бота. Пишется все в одно слово.

Если все в порядке, двигаемся дальше. Это самая простая часть, тут не должно быть затруднений.

Отправка уведомлений в telegram через webhook

Начиная с 5-й версии, в Zabbix из коробки работают уведомления в telegram через механизм webhook. Чтобы настроить его, переходите в Администрирование — Способы оповещений и выбирайте там Telegram.

Отправка уведомлений в telegram через webhook

Внутри увидите некоторые параметры. Можно так же посмотреть текст скрипта, который используется для отправки оповещений. В целом, тут сейчас не обязательно что-то менять. Дефолтные настройки полностью рабочие. Надо только указать токен бота.

Настройка токена бота

Тут же можете шаблоны поправить так, как вам нравится. Это нововведение 5-й версии Zabbix правка шаблонов оповещений в настройках самих оповещений. Это позволяет создавать для каждого типа свои шаблоны. Очень удобно.

Давайте теперь проверим отправку уведомлений через этот способ. Нажимайте Тест.

Тест отправки уведомлений в телеграм

Я указал текст сообщения, заголовок, свой id и token бота. В итоге мне в личку пришло сообщение от бота.

Проверочное сообщение

Если хотите отправить оповещение в группу, то сначала создайте ее, а потом добавьте туда бота. Не потеряйте минус в id группы. Его тоже нужно указывать. Я сначала не понял этого и копировал id группы без минуса. В итоге, оповещения в группу не отправлялись.

Тестовое уведомление в группу telegram

Итак, убедились, что сообщения в telegram нормально отправляются. С технической стороны проблем нет. Теперь настроим отправку уведомлений по событиям. Я обычно для этого использую тестовый триггер. В стандартном шаблоне zabbix для OS Linux есть элемент данных Number of logged in users, который считает количество залогиненных пользователей. Я для него делаю триггер, чтобы он срабатывал, когда пользователей 2 и более. И с его помощью тестирую уведомления, просто подключаясь на сервер по ssh двумя подключениями одновременно.

Проверочный триггер

Теперь идем в настройки пользователя и добавляем ему способ оповещений через telegram.

Добавление способа оповещения пользователю zabbix

Если у вас ранее не работали никакие уведомления, то не забудьте активировать Действия.

Настройка действия в zabbix

У нас все настроено для отправки оповещений в telegram. Добейтесь срабатывания триггера и проверяйте телеграм канал, в который настроили отправку сообщений.

Проверка работы уведомлений в telegram

Сообщение от триггера

Все работает. Если вам достаточно такого функционала, то можно оставлять и пользоваться. Но как по мне, так бледновато эти уведомления выглядят. Можно немного шаблоны изменить, чтобы было более читаемо. Так же есть возможность все настроить более красиво и наглядно, да еще и с графиками. Дальше я расскажу еще 2 разных способа отправки уведомлений из zabbix в telegram с графиками и готовыми ссылками на события.

Настройка zabbix на отправку графиков в telegram

Для отправки графиков в telegram предлагаю воспользоваться известным скриптом на питоне https://github.com/ableev/Zabbix-in-Telegram. Пользуясь случаем, передаю благодарность автору за его создание. Копируем исходники себе.

Нам нужно будет установить несколько модулей python, перечисленные в requirements.txt. Для этого нам понадобится pip. Ставим его и модули.

Установка модулей python

Копируем в директорию /usr/lib/zabbix/alertscripts файлы zbxtg.py и zbxtg_settings.example.py из скачанного с github проекта. Последний переименовываем в zbxtg_settings.py. Назначаем пользователя zabbix владельцем этих файлов.

Приводим содержимое zbxtg_settings.py примерно к такому виду.

Жирным я выделил те параметры, что нужно поменять. Вам необходимо указать token от бота, который мы ранее создавали, полный url адреса сервера с zabbix. Обратите внимание на этот урл. Не факт, что у вас по localhost/zabbix/ будет открываться web интерфейс Zabbix. Это зависит от настроек Web сервера. Лично я указал просто http://localhost. Дальше указываете учетную запись мониторинга. Лучше всего сделать отдельную учетку с доступом только на чтение. Она нужна для получения графиков. И в конце нужно будет указать параметры доступа к базе данных заббикса. При желании, можете и иконки emoji изменить. Я меняю местами PROBLEM и WARNING. Желтый треугольник на проблемах смотрится более наглядно.

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

Проверим из консоли работу скрипта.

В личку телеграма должно прийти тестовое сообщение. Если получите ошибку на тему того, что python не найдет, то поменяйте в файле zbxtg.py в самой первой строке python на python3 или создайте символьную ссылку.

Проверка скрипта

А в консоли появится примерно такой вывод.

Работа скрипта по отправке сообщений в консоли

То же самое проделаем с группой.

Если все в порядке, двигаемся дальше. В случае ошибок, сразу разбирайтесь, в чем может быть проблема.

Идем в web интерфейс и добавляем 2 новых способа оповещений с помощью скрипта. Один для персональных сообщений, второй для групповых. Во втором случае надо добавить ключ group, все остальное идентичное.

Оповещения в приват телеграма

Уведомления в telegram group

Так же нам нужно настроить шаблоны оповещений. Я предлагаю следующий вариант. Тип сообщений Проблема.

Тема по умолчанию <> :
Сообщение по умолчанию Последнее значение: (

Шаблон проблемы

  • <> макрос для выставления иконки emoji с восклицательным знаком
  • zbxtg;graphs указывает, что будем отправлять график
  • zbxtg;itemid: параметр автоматически определяет itemid для графика на основании информации об итеме в триггере, можно указать нужный itemid вручную
  • zbxtg;title задает имя для заголовка графика

Все остальное понятно по смыслу, так как относится к стандартным макросам zabbix. Вот полный список параметров, которые поддерживает скрипт:

zbxtg;graphs включает отправку графиков
zbxtg;graphs_period=10800 период за который строится график
zbxtg;graphs_width=700 ширина графика
zbxtg;graphs_height=300 высота графика
zbxtg;itemid: выбор itemid для графика на основе триггера
zbxtg;title: заголовок графика
zbxtg;debug включает режим отладки, некоторая дополнительная информация сохраняется в tmp_dir
zbxtg;channel включает возможность отправки оповещения в telegram channel
zbxtg;to:username1,username2,username3 можно сразу в шаблоне указать, кому будут отправляться оповещения
zbxtg;to_group:Group то же самое, что выше, только для групп

Для операции восстановления шаблон попроще.

Тема по умолчанию <> :
Сообщение по умолчанию Server: ()
Описание:
Проблема устранена!
Время устранения проблемы:

Шаблон восстановления

И для подтверждения.

Тема по умолчанию <> :
Сообщение по умолчанию подтвердил проблему со следующим сообщением:
Текущее состояние проблемы

Шаблон обновления

Разные оповещения о разных событиях

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

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

Создание группы в zabbix

Если учетка техническая, только для оповещений, то доступ к веб интерфейсу можно не делать. Даем ей права доступа на чтение только к группе Zabbix servers, так как будем слать уведомления только по триггерам этого хоста.

Права доступа группы

Теперь добавляем пользователя и помещаем его в эту группу.

Добавление пользователя в zabbix

Добавляем ему telegram группу в способы оповещения. Добавлять можно не по id, а по имени группы, так удобнее.

Настройка оповещений в telegram группу

Так же добавим персональные уведомления telegram пользователю admin. Здесь уже указываем id учетной записи .

Приватные уведомления в телеграм

Настраиваем действия. В данном примере я делаю отправку всех уведомлений пользователю Admin, у которого в способах оповещений указана личка telegram. А сообщения по конкретному триггеру Zabbix server: Zabbix agent is not available (for 3m) пользователю tg-group, у которого указана группа telegram.

Настройка дейсвтий

Думаю, идею вы поняли. Можно очень гибко настроить уведомления в Zabbix и это очень круто и удобно. И работает из коробки. Проверим теперь, как будут выглядеть оповещения в telegram. Останавливаем на сервере zabbix-agent и ждем работы триггера с оповещениями.

Проверка работы уведомлений в telegram

Проверяем телеграм и видим там одинаковые уведомления и в группе, и в личке.

Сообщение от zabbix в группу

После обновления проблемы или закрытия, придут свои оповещения.

Повторные сообщения от zabbix

При этом, если сработает любой другой триггер, уведомление придет только в личку. В группу ничего не будет отправлено.

Раздельные уведомления разным пользователям

Шаблоны и графики в уведомлениях можете настраивать по своему вкусу. Обращаю внимание на графики. Они приходят в отдельных сообщениях. Далее я покажу еще один скрипт для уведомлений в telegram. Он немного по-другому работает прикрепляет сразу ссылки на историю и триггер, а так же вкладывает графики в то же сообщение, что и текст.

Если у вас возникают ошибки с отправкой графиков, то проверить их работу можно в консоли. Вот пример запроса.

Это нормальный вывод ошибки, которая указывает на то, что выбран itemid 23301, которого либо не существует, либо к нему нет доступа, либо для него нет графика. Если выбрать правильный itemid, то после выполнения скрипта никакого вывода не будет, а в телеграм будет отправлен выбранный график.

Отправка графиков из zabbix в telegram

Оповещения в telegram со ссылками на график и триггер

Расскажу про еще один интересный скрипт для отправки красивых и функциональных оповещений в telegram, в котором помимо всего прочего сразу же публикуются ссылки на триггер, график и некоторые другие полезности. Вот он на гитхабе https://github.com/xxsokolov/Zabbix-Notification-Telegram. Инструкция от автора в некоторых местах не очень понятная, так что я немного повозился, прежде чем все получилось. В основном c xml были проблемы, но обо всем по порядку.

Клонируем к себе репозиторий.

Копируем в /usr/lib/zabbix/alertscripts папку zbxTelegram_files и файлы _config.yml, zbxTelegram.py, .requirements и zbxTelegram_config.example.py. Последний переименовываем в zbxTelegram_config.py.

Делаем пользователя zabbix владельцем этих файлов и разрешаем исполнение скрипта.

Автор скрипта предлагает запускать его в виртуальном окружении, поэтому поставим пакет virtualenv.

Переходим в /usr/lib/zabbix/alertscripts, создаем виртуальное окружение и активируем его.

Ставим зависимости и деактивируем окружение.

Установка зависимостей скрипта

Редактируем конфигурационный файл zbxTelegram_config.py. Список параметров, которые нужно поменять.

В url на конце должен обязательно быть слеш. Дальше делаем все то же самое, что и ранее. Идем в Способы оповещений и добавляем новый тип, где в качестве скрипта указываем zbxTelegram.py.

Оповещения в telegram со ссылками

Шаблоны тем сообщений можете настроить как вам больше нравится. Автор предлагает такие:

  • мапинг значений Problem\Resolved\Update в emoji (config: zabbix_status_emoji_map)
  • <> мапинг значений Severity в emoji (config: zabbix_status_emoji_map)

В поле Сообщение копируется xml конфиг полностью, который приведен в файле actions.example. Копируйте его 1 в 1.

Типовой шаблон оповещений через скрипт

Во все шаблоны можете его вставить без изменений. Я немного попытался его править, но каждый раз потом получал ошибку парсинга xml. В итоге бросил. Автор перечисляет значение каждого парметра, так что можете попытаться настроишь шаблоны на свой вкус.

  • graphs/graphs прикреплять график (True\False)
  • graphlinksTrue/graphlinks прикрепить ссылку url на History (True\False)
  • triggerlinksTrue/triggerlinks прикрепить ссылку url из триггера (True\False)
  • tagTrue/tag прикрепить теги (True\False)
  • graphs_period/graphs_period период графика в секундах
  • itemid/itemid передача itemid
  • triggerid/triggerid передача triggerid
  • eventid/eventid- передача eventid
  • title/title заголовок графика
  • triggerurl/triggerurl передача url из триггера
  • tags/tags передача списка тэгов из триггера

Проверим работу уведомлений. Сначала через консоль.

В данном случае слова test менять нельзя. Именно они инициируют отправку тестового сообщения. Вот как оно выглядит.

Уведомление из zabbix в telegram с графиком и ссылками

То же самое можно сделать через web интерфейс.

Проверка отправки

Если все в порядке, подключайте данный тип уведомлений к пользователю, указывайте его в действиях и проверяйте. Уже не буду это подробоно описывать, так как устал. Материал и так очень объемный получился. В итоге уведомления в телеграме от этого скрипта будут выглядеть вот так:

Прпимер сообщения в телеграме

Текст более информативен по дефолту и выглядит приятнее, графики в одном сообщении с текстом. В последней строке есть готовые ссылки на триггер, историю по итему. Только имейте ввиду, что url для ссылок берется из конфига и если у вас там указан localhost, то только с него и можно будет их посмотреть. Так что указывайте внешний, а не локальный url. Из минусов отмечу тоненькие графики без заливки. В скрипте от ableev они более наглядные.

Заключение

Теперь у нас zabbix работает современно, модно, молодежно &#128578; Использует telegram для отправки оповещений с графиками, ссылками и т.д. Функционал удобный и настраивается достаточно просто. У меня практически не было затруднений, когда разбирал тему. Беру себе на вооружение и использую по необходимости. Хотя сам не люблю оповещения в телеграме, и чаще всего их отключаю, как и от остальных программ. Не нравится, когда меня в каждую минуту могут отвлечь какие-то события. Проверка почты раз в 30 минут самая подходящая интенсивность для меня.

Тем не менее, при работе коллектива, оповещения в общую группу могут быть очень удобны. Особенно, если только на мониторинге сидят отдельные люди, в чью задачу входит оперативная реакция на события.


Источник: svictor.ru