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

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

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

  • Введение
  • Создание бота в telegram
  • Скрипт для отправки оповещений
  • Настройка zabbix на отправку уведомлений в телеграм
  • Отправка оповещений в группу
  • Отправка графиков из zabbix в telegram
  • Заключение

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

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

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

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



11 февраля 2023

Zabbix — самая вменяемая система мониторинга всего, что возможно. Чтобы быстро реагировать на алерты электронная почта не очень подходит, да и почта не всегда может дойти. А телега для этого самое то.

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

В некоторых случаях при алертах приходилось залезать в графану и смотреть на графики, чтобы лучше понять проблему. Мысль добавить графики приходила в голову, но как-то думал, что не особо то и нужно. Но оказалось, что многим нужна. Допилил скрипт для отправки еще и графиков + добавил всяких плюшек. Оказалось с графиками стало жить легче 🙂 Скрипт выложен на гитхабе
. Дока там есть, но опишу все здесь попонятнее. Настройка будет идти на Debian 11 и Zabbix 6.0.

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

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

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

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

  • Использовать готового бота
  • Создать своего бота для уведомлений
  • Отправлять оповещения себе лично или в группу

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

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

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

  1. Установка CentOS 7.
  2. Настройка CentOS 7.
  3. Установка и настройка zabbix сервера.

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

  1. Установка Debian 9.
  2. Базовая настройка Debian 9.
  3. Установка и настройка zabbix на debian.

Приступим к реализации.

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

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

  # curl --header 'Content-Type: application/json' --request 'POST' --data '{"chat_id":"210806260","text":"Проверяю отправку оповещений ботом"}' "https://api.telegram.org/bot526250249:AAFtAqy4ln0BqK5vtU_9IoSlLduhtl8IaGg/sendMessage"  

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

Проверка оповещений

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

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

Profile picture for user Олег

Zabbix

На самом деле есть несколько способов отправлять сообщения из Zabbix в Telegram, но здесь я рассмотрю только отправку с помощью вебхуков.

Нам понадобится создать бота для отправки сообщений. Бот может отправлять сообщения пользователям или в группу.

telegram

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

   /start  
  

telegram

Выводится справка по командам. Для создания бота пишем:

   /newbot  
  

Нам предлагают указать для бота name
(имя), я пишу:

   Zabbix internet-lab.ru  
  
   zabbix_internet_lab_ru_bot  
  

telegram

zabbix

Сохраняем изменения. Кстати, в описании также приводится краткая инструкция по настройке Telegram:

  1.  Register bot: send "/newbot" to @BotFather and follow instructions
2.  Copy and paste the obtained token into the "Token" field above
3.  If you want to send personal notifications, you need to get chat id of the user you want to send messages to:
 3.1.  Send "/getid" to "@myidbot" in Telegram messenger
 3.2.  Copy returned chat id and save it in the "Telegram Webhook" media for the user
 3.3.  Ask the user to send "/start" to your bot (Telegram bot won't send anything to the user without it)
4.  If you want to send group notifications, you need to get group id of the group you want to send messages to:
 4.1.  Add "@myidbot" to your group
 4.2.  Send "/getgroupid@myidbot" in your group
 4.3.  Copy returned group id save it in the "Telegram Webhook" media for the user you created for group notifications
 4.4.  Send "/start@your_bot_name_here" in your group (Telegram bot won't send anything to the group without it)  

Отправка уведомления в Telegram пользователю

Если вы хотите отправить личное сообщение пользователю, то в его профиле в разделе Media нужно указать chat id
пользователя из Telegram.

telegram

   /getid  
  

telegram

На самом деле таких ботов, которые возвращают идентификаторы довольно много.

telegram

Можно протестировать отправку сообщения в Telegram ссылкой «test».

telegram

telegram

Sending failed: Bad Request: chat not found.

Это нормально, ботам нельзя отправлять сообщения пользователям без их согласия. Нахожу созданного бота Zabbix internet-lab.ru
и отправляю ему команду:

   /start  
  

Проверяю ещё раз.

telegram

Media type test successful.

telegram

Отправка уведомления в Telegram группе

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

ПРИМЕЧАНИЕ: если вы сделаете группу «супергруппой», то у неё сменится идентификатор.

Создаю группу, добавляю в неё бота.

telegram

   /getgroupid@myidbot  
  

telegram

Получаем идентификатор группы, заметьте, что он отрицательный, не теряем минус.

Можно протестировать отправку сообщения в Telegram.

telegram

telegram

Сообщения отправляются в Telegram. Теперь можно заниматься настройкой, шлифовкой, дизайном и прочими неинтересными вещами.

Для отправки графиков нам нужен юзер, который будет иметь доступ к API и к графикам нужных хостов в веб-интерфейсе. Скрипт авторизуется в API, получает данные о графике, который привязан к элементу данных в триггере. Если график есть, то авторизуется уже в веб-интерфейсе и дергает сам график. Для этого можно заюзать существующего супер-админа, он имеет доступ ко всему. Но теоретическим не очень безопасно, т.к. его данные для входа будут прописаны в скрипте, а они при определенных обстоятельствах могут утечь. Можно создать для этого обычного юзера с необходимыми правами, но нужно будет ему еще давать права на хосты и группы хостов, что неудобно. Проще всего создать юзера с новой супер-админской ролью, где будут минимальные права и доступ в API только к нужному методу ( graph.get
). Например, так:

Читайте также:  Как привязать почтовый ящик для домена к своему домену в andex
Отправка уведомлений и графиков из zabbix в telegram

С юзером определились. Теперь нужно определить необходимые переменные в скрипте:

  • GRAPHS
    — включение отправки графиков, тут ставим 1
    ;
  • GRAPHS_DIR
    — полный путь к директории, куда временно будут сохранятся графики (по дефолту пусто, а графики будут сохраняться в директорию /tmp/zbx_graphs
    ; директория для графиков создается автоматически, если её нет; если юзер zabbix
    не сможет её создать, то получим ошибку при тесте отправки);
  • ZABBIX_URL
    — полная ссылка к веб-интерфейсу заббикса (например: https://zabbix.site.com
    );
  • ZABBIX_USER
    — юзер с доступами к графикам;
  • ZABBIX_PASS
    — пароль юзера;
  • ZABBIX_COOKIES_LIFETIME
    — время жизни куки авторизации в заббиксе (время жизни куки устанавливается на 14 дней, но они могут истечь раньше этого времени, а без авторизации не получится дергать графики; по дефолту стоит 30 секунд, т.е. переавторизация будет только при простое получения графиков более 30 сек; можно так и оставить);
  • ZABBIX_COOKIES_PATH
    — полный путь к файлу куки (по дефолту пусто, а куки будут писаться в директорию скрипта в файл /usr/lib/zabbix/alertscripts/zbx_cookies
    ; файл с куками создается автоматически, если его нет; если юзер zabbix
    не сможет его создать, то получим ошибку при тесте отправки).

Для отправки графиков необходимо добавить вот такую строчку в любое место текста сообщения в нужных шаблонах сообщений (обычно это только тип Проблема
):

  <graph:{ITEM. ID1}:1h:900:300>
  
  • {ITEM.ID1}
    — родной макрос, куда попадает ID первого итема из выражения триггера;
  • 1h
    — период, за который нужно получить график относительно текущего времени (может быть числом в секундах либо в относительных величинах: m
    — минуты, h
    — часы, d
    — дни, w
    — недели, M
    — месяцы, y
    — года);
  • 900
    — кастомная ширина графика;
  • 300
    — кастомная высота графика.

Ширина и высота необязательны. Если не указывать вообще или указать 0, то размеры будут те, которые указаны в настройках графика в веб-интерфейсе.

Для проверки отправки графиков необходимо вызвать срабатывание любого триггера, где для элемента данных создан график. К примеру, возьмем триггер перегруза CPU. Для этого нагрузим все ядра любого хоста, где активен этот триггер:

  openssl speed -multi $(grep -ci processor /proc/cpuinfo)
  

Через какое-то время (в зависимости от порогов срабатывания триггера) получим алерт с графиком:

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

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

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

Для временного отключения графиков не нужно удалять строку с данными графика из шаблона оповещений. Достаточно только установить значение переменной GRAPHS
в 0
. Эта строка удаляется из текста сообщения в любом случае.

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

В данной статье я расскажу как можно из Zabbix 4.4 (а так же из 5.0) отправлять сообщения в Телеграм без использования дополнительных скриптов.

Исходные данные:
Zabbix 4.4

Задача:
Сделать отправку уведомлений из Zabbix в Telegram через Webhook

Для того чтобы отправлять сообщения в Телеграм необходим доступ до api.telegram.org на порт 443 с Вашего Zabbix-сервера.

Команда для создания бота /newbot

Далее вводим имя желаемого бота обязательно маленькими буквами и в конце префикс _bot, например: myxxxxxxx_bot

Если имя не занято, то botfather скажет «Done! Congratulations on your new bot» и далее выдаст ссылку на бота, вида: t.me/myxxxxxxx_bot

А так же кроме всего прочего после слов «Use this token to access the HTTP API:» выдаст API-ключ нашего бота, он нам пригодиться дальше.

Нам нужно перейти по ссылке на нашего бота и нажать ЗАПУСТИТЬ или ввести /start, если этого не сделать, то сообщения Вам приходить не будут. Данную ссылку Вы можете давать всем кто будет получать оповещения.

2. Теперь нам нужно узнать собственный идентификатор, чтобы указать его в настройках профиля пользователя в Zabbix

3. Импорт нового способа оповещения:

Скачиваем архив с xml файлом нового способа оповещения
и распаковываем его.

Открываем Zabbix, переходим в «Администрирование» -> «Способы оповещений», наживаем «Импорт» и выбираем файл zbx_export_mediatypes.xml

У нас появляется новый способ оповещения «Telegram via Webhook», редактируем его и в строку с именем token вводим Ваш API-ключ бота из п.1

Далее Вы можете изменить 3 дополнительных параметра отправки сообщений, это parse_mode, disable_web_page_preview и disable_notification

Параметр parse_mode
задает режим разметки сообщений, может иметь значения HTML, Markdown или MarkdownV2
, более детально о разметке сообщений можно почитать в официальной документации
.

Параметр disable_web_page_preview
дает возможность отключить предпросмотр ссылок в сообщениях, может иметь значения true или false. Иногда имеет смысл ставить его в false, выбирать Вам.

Параметр disable_notification
дает возможность отключить уведомления о приходе сообщения, может иметь значения true или false.

Пример настройки, маркировки тегом и вид меню перехода к сообщению:

Настройки метода оповещения

Настройки метода оповещения

Пример маркировки тегами и меню перехода к сообщению в Телеграм

Пример маркировки тегами и меню перехода к сообщению в Телеграм

Сохраните изменения и нажмите кнопку Тест. В поле subj введите заголовок сообщения, в поле message введите тестовое сообщение, в поле chat_id введите ID из п.2 и нажмите Тест. В Ваш телеграм должно прийти сообщение, см. пример ниже на картинке:

Zabbix telegram via webhook test

Zabbix telegram via webhook test

4. Настройка способа оповещения у пользователя

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

Тип выберите «Telegram via Webhook», в поле «Отправлять на» введите ID пользователя из п.2, пример на картинке ниже:

zabbix telegram via webhook user profile

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

Теперь можно настроить непосредственно действия по отправке уведомления при наступлении определенных событий, для этого перейдите в Zabbix в «Настройка» -> «Действия», выберите Источник событий — Триггеры и нажмите кнопку «Создать действие».

6. Отладка скрипта отправки и логгирование.

Скрипт отправки написан на JavaScript и ведет полное логгирование действий по отправке на уровне 3 (warning), если Вы откроете стандартный лог-файл Zabbix-server по пути /var/log/zabbix/zabbix_server.log, то увидите примерно такое:

  2741:20200326:141654.137 Telegram HTTP response code: 200
 2741:20200326:141654.137 Telegram response: {"ok":true,"result":{"message_id":19,"from":{"id":XXXXXX,"is_bot":true,"first_name":"YYYYY","username":"YYYYYY"},"chat":{"id":-100XXXXXXX,"title":"MyZabbix","type":"supergroup"},"date":158521XXXX,"text":"Alarm\nTest"}}
 2741:20200326:141654.137 Telegram supergroup result: {"tags":{"tg_message_url":"https://t.me/c/140XXXXXXXX/19"}}
  

Код ответа 200 означает успешную отправку.

Читайте также:  Хостинг Alliancehost - Отзывы, Рейтинг и Статистика

Могут быть и ошибки отправки, пример (указан неправильный ID чата):

  2741:20200326:141840.576 Telegram HTTP response code: 400
 2741:20200326:141840.576 Telegram failed json: {"chat_id":"-100XXXXXXX","parse_mode":"html","disable_web_page_preview":"true","text":"Alarm\r\nTest"}
 2741:20200326:141840.576 Telegram failed: {"ok":false,"error_code":400,"description":"Bad Request: chat not found"}
  

или указан неправильный токен:

  2741:20200326:142005.538 Telegram HTTP response code: 401
 2741:20200326:142005.539 Telegram failed json: {"chat_id":"-100XXXXXX","parse_mode":"html","disable_web_page_preview":"true","text":"Alarm\r\nTest"}
 2741:20200326:142005.539 Telegram failed: {"ok":false,"error_code":401,"description":"Unauthorized"}
  

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

Внимание!
Отправка эмодзи с указанием unicode-кода будет работать только в Zabbix v4.4, в 5-й версии Zabbix нужно использовать непосредственно сами картинки, их можно вставлять в нужные места сообщений (смотрите скриншоты ниже).

Пример отправки сообщения с эмодзи в Zabbix v4.4:

Пример отправки сообщения с эмодзи в Zabbix v4.4

Пример отправки сообщения с эмодзи в Zabbix v4.4

Пример отправки сообщения с эмодзи в Zabbix v5:

Пример отправки сообщения с эмодзи в Zabbix v5

Пример отправки сообщения с эмодзи в Zabbix v5

На этом все, до скорых встреч.

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

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

Для начала нужно установить зависимости:

Переходим в директорию с кастомными скриптами заббикса:

  cd /usr/lib/zabbix/alertscripts
  

Качаем сам скрипт:

  wget https://raw.githubusercontent.com/zevilz/zabbix-alertscript-telegram/main/telegram.sh
  

Сразу меняем права у скрипта, т.к. там будут важные данные, и делаем его исполняемым:

  chmod 700 telegram.sh
chown zabbix:zabbix telegram.sh
  

По дефолту ошибки скрипта будут писаться в /usr/lib/zabbix/alertscripts/zbx_tlg_bot.log
. Если лог нужно писать в другое место, то указываем этот путь в переменной SCRIPT_LOG_PATH
. Файл лога создается автоматически, если его нет. Если юзер zabbix
не сможет его создать, то получим ошибку при тесте отправки.

Скрипт уже готов к отправке текстовых сообщений. Теперь нужно добавить новый способ оповещений в Zabbix. Для этого переходим Администрирование
-> Способы оповещений
и там вверху справа жмем на кнопку Создать способ оповещения
.

В окрывшемся окне указываем следующее:

  • Имя — Telegram
  • Тип — Скрипт
  • Имя скрипта — telegram.sh

В параметры скрипта добавляем:

  • {ALERT.SENDTO}
  • {ALERT.SUBJECT}
  • {ALERT.MESSAGE}
Отправка уведомлений и графиков из zabbix в telegram

Во вкладке Шаблоны сообщений
добавляем нужные шаблоны. Сам текст шаблонов можно скопировать из существующих способов оповещений. Никакого дополнительного форматирования не нужно, просто текст. Дополнительно можно использовать Markdown
и накидать смайликов 🙂 Далее тыкаем по кнопке Добавить
.

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

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

Теперь можно тестить отправку алертов. Для этого тыкаем по Тест
в строке с новым способом оповещения:

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

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

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

А в телегу от бота придет это тестовое сообщение:

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

А если отправка провалится, то вы где-то накосячили. В уведомлении увидим ошибку, а если ее нет, то смотрим в лог скрипта.

Скрипт для отправки оповещений

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

Напишем очень простой скрипт, который будет использовать zabbix для отправки оповещений в telegram. Стандартная настройка для директории со скриптами, которые использует заббикс для отправки уведомлений — /usr/lib/zabbix/alertscripts
. Поменять ее можно в параметре AlertScriptsPath. Создадим скрипт.

  # mcedit /usr/lib/zabbix/alertscripts/telegram.sh  
  #!/bin/bash
  
token='526250249:AAFtAqy4ln0BqK5vtU_9IoSlLduhtl8IaGg'
chat="$1"
subj="$2"
message="$3"
/usr/bin/curl -s --header 'Content-Type: application/json' --request 'POST' --data "{"chat_id":"${chat}","text":"${subj}n${message}"}" "https://api.telegram.org/bot${token}/sendMessage"

Сохраняем файл и делаем исполняемым.

  # chmod +x /usr/lib/zabbix/alertscripts/telegram.sh  

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

  # /usr/lib/zabbix/alertscripts/telegram.sh 210806260 Тест 'Проверяю отправку оповещений ботом'  

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

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

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

Речь идет вот об этом скрипте — https://github.com/ableev/Zabbix-in-Telegram. Скопируем себе исходники.

  # cd /usr/src && git clone https://github.com/ableev/Zabbix-in-Telegram  

Для его работы, как я уже сказал выше, у вас должен быть установлен в системе python версии 2.6.0. Именно такая версия указана у разработчика скрипта. У меня нормально работает на 2.7.5. Так же для работы необходим pip модуль  requests
. Если у вас его нет, то надо сначала установить pip:

  # cd /usr/src && wget https://bootstrap.pypa.io/get-pip.py
  
# python get-pip.py

а потом и сам модуль:

  # pip install requests  

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

  # -*- coding: utf-8 -*-
  
tg_key = " 526250249:AAFtAqy4ln0BqK5vtU_9IoSlLduhtl8IaGg " # telegram bot api key
zbx_tg_prefix = "zbxtg" # variable for separating text from script info
zbx_tg_tmp_dir = "/var/tmp/" + zbx_tg_prefix # directory for saving caches, uids, cookies, etc.
zbx_tg_signature = False
zbx_tg_update_messages = True
zbx_tg_matches = {
"problem": "PROBLEM: ",
"ok": "OK: "
}
zbx_server = " http://zabbix.server.ru/ " # zabbix server full url
zbx_api_user = " zerox "
zbx_api_pass = " password "
zbx_api_verify = False # True - do not ignore self signed certificates, False - ignore
zbx_basic_auth = False
zbx_basic_auth_user = ""
zbx_basic_auth_pass = ""
proxy_to_zbx = None
proxy_to_tg = None
#proxy_to_zbx = "proxy.local:3128"
#proxy_to_tg = "proxy.local:3128"
google_maps_api_key = None # get your key, see https://developers.google.com/maps/documentation/geocoding/intro
zbx_tg_daemon_enabled = False
zbx_tg_daemon_wl_ids = [ 210806260 , ]
zbx_tg_daemon_wl_u = [" zeroxzed ", ]
zbx_db_host = "localhost"
zbx_db_database = " zabbix "
zbx_db_user = " zabbix "
zbx_db_password = " password "

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

  # /usr/lib/zabbix/alertscripts/zbxtg.py "@zeroxzed" "тест" "тестовое сообщение" --debug  

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

Проверка работы скрипта zbxtg.py

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

  # /usr/lib/zabbix/alertscripts/zbxtg.py "serveradmin_zabbix_group" "тест" "тестовое сообщение" --debug    --group    
  

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

Идем в web интерфейс и добавляем 2 новых способа оповещения: один для приватных сообщений, второй для группы. Делаем все то же самое, что и раньше.

Добавление нового оповещения с помощью zbxtg.py

Я добавляю ключ —debug
на время отладки, чтобы лог работы и картинки сохранялись в /var/tmp/
. Это может быть полезно. Потом надо убрать. После этого добавляем новые способы оповещения пользователю. Все то же самое, что делали для первого способа.

Читайте также:  Как перенести сайт Wordpress на хостинг, советы по переносу Wordpress

Включение оповещения у пользователя

Название учетки и группы я указал в виде имени, а не ID. С именами тоже работает, плюс так удобнее.

Теперь создаем новое действие. которое будет использовать созданные только что способы оповещения. Вот мой пример такого действия с использованием графиков и иконок emoji в сообщениях.

Шаблон операции

  • {{WARNING}} — макрос для выставления иконки с восклицательным знаком
  • zbxtg;graphs — указывает, что будем отправлять график
  • zbxtg;itemid:{ITEM. ID1} — параметр автоматически определяет itemid для графика на основании информации об итеме в триггере, можно указать нужный itemid вручную
  • zbxtg;title — задает имя для заголовка графика

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

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

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

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

Шаблон операции подтверждения

Сохраняем действие, активируем и проверяем. При срабатывании тестового триггера я получаю следующие оповещения с графиком в telegram.

Пример отправки графика из zabbix в telegram

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

График из заббикса

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

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

  # # sudo -u zabbix ./zbxtg.py zeroxzed test "$(echo -e 'zbxtg;graphs: nzbxtg;graphs_period=3600nzbxtg;itemid:23301nzbxtg;title:ololo')"
  
zbxtg.py: Bad Request: PHOTO_INVALID_DIMENSIONS
zbxtg.py: Zabbix user couldn't get graph (probably has no rights to get data from host), check script manually, see https://github.com/ableev/Zabbix-in-Telegram/wiki/Graphs

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

Отправка только графика в телеграм из заббикса

Можете теперь настраивать по своему усмотрению графики, триггеры, события с отправкой оповещений и графиков в telegram.

Отправка оповещений в группу

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

Теперь ID группы надо использовать в способе оповещения пользователя. Там, где мы раньше использовали ID пользователя, теперь ставим ID группы. Можете либо отредактировать предыдущий способ, либо добавить новый. Я добавлю новый, конкретно проделав следующие действия:

  1. Создал 2 способа оповещения: Telegram private и Telegram group.  Способ оповещения в группу telegram
  2. Добавил оба этих способа пользователю администратор, указав соответствующие ID.  Параметры telegram id
  3. Добавил оба эти способа в Действия.  Действие для отправки уведомления в группу

Хочу обратить внимание, что ID группы начинается с тире, например -288179672. Я этот момент упустил и долго не мог сообразить, почему в группу не отправляются оповещения. Не знал, что этот символ является неотъемлемой частью.

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

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

Идем в web интерфейс zabbix и добавляем новый способ оповещений. Для этого переходим в раздел Администрирование -> Способы оповещений
и создаем новый.

Добавление нового способа оповещения

Заполняем необходимые поля.

Параметры нового оповещения

Добавим новый способ оповещения пользователю, для которого они будут добавляться. В моем примере только один пользователь администратор, ему я и добавлю. Для этого идем в раздел Администрирование -> Пользователи
. Выбираем нужного пользователя и добавляем ему новый тип оповещений — Telegram.

Редактирование оповещений пользователя

В поле «Отправлять на» вводим свой Telegram ID. Все, этого достаточно, если у вас используются дефолтные настройки действий разделе Настройка -> Действия
. По-умолчанию, там есть действие, которое отправляет администраторам при срабатывании любого триггера оповещение по всем указанным каналам связи.

Активация действия

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

Проверка срабатывания триггера

В телеграме бот пришлет уведомление.

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

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

Закрытие триггера

Скорее всего, вам не понадобится получать уведомления в телеграм на все события, которые происходят в системе. Вам нужно вручную настроить действия, на которые вы хотите получать уведомления. Для этого надо отредактировать дефолтное правило и оставить там только email оповещения. А для телеграма сделать отдельные действия.

Я покажу как это сделать на отдельном примере. Я оставил в дефолтном правиле уведомления только по email. В телеграм я буду получать сообщения только о срабатывании одного триггера. В данном случае это будет упоминаемый раньше тестовый триггер, срабатывающий на кол-во подключенных ssh пользователей. Вы можете выбрать абсолютно любой триггер из имеющихся в наличии.

Идем в Настройка -> Действия
и создаем новое действие. На первой вкладке «Действие» указываем имя и условие срабатывания.

Создание нового действия

На вкладке «Операции» добавляем нужное действие. Я выбрал отправку сообщения всей группе администраторов zabbix.

Параметры действия

Это же действие продублировал для операций восстановления и подтверждения. Сохраняем действие и проверяем. Вы должны получить следующие оповещения:

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

Другие переменные скрипта

Во многих триггерах в описании триггера вывожу дополнительные данные и значения итемов в конце сообщения. Бывает полезно получать оперативные данные прямо в алерте. В некоторых шаблонах эти описания могут быть очень длинными (например, ошибки в логах веб-сервера), а у телеги есть ограничения по длине текста в обычных сообщениях (4096 символов) и подписям к изображениям (1024 символа).

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

Максимальная длина текстов задается в переменных скрипта:

  • TELEGRAM_MESSAGE_LIMIT
    — макисмальная длина текстовых сообщений (по дефолту 4000
    );
  • TELEGRAM_CAPTION_LIMIT
    — максимальная длина подписей к графикам (по дефолту 900
    );

Для лучшего восприятия сообщений описание чаще всего в шаблонах запихиваю в блоки кода (тройной апостроф по краям):

  Started: {EVENT. TIME} {EVENT. DATE}
Severity: {EVENT. SEVERITY}

Original problem ID: {EVENT. ID}

```
{TRIGGER. DESCRIPTION}```
  

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

Оцените статью
Хостинги