Zabbix. Уведомление и графики в Telegram

Zabbix. Уведомление и графики в Telegram Хостинг

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

https://youtube.com/watch?v=opbTrobt0do%3Ffeature%3Doembed%26wmode%3Dopaque

Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Вы можете настроить отправку уведомлений о событиях Zabbix в Telegram. Начиная с версии 5 в Zabbix Server есть встроенная поддержка отправки сообщений в мессенджер Telegram через API и webhook.

Задайте название бота и имя пользователя. BotFather сгенерирует для вас токен HTTP API, который вам нужно скопировать.

создать бота в telegram

Перейдите к вашему боту в Telegram и нажмите:

Вы можете протестировать отправку уведомлений через Telegram бота из командной строки с помощью curl или PowerShell. Для этого вам понадобится токен бота ( HTTP API token: xxxxxxxxxxxxxxxxxxxxxxxxxxxx) и имя вашего пользователя (группы).

Your user ID: 123456789

отправка сообщения из zabbix в powershell

Проверьте, что вы получили уведомление в клиенте Telegram.

Теперь нужно настроить способ оповещения Telegram в веб-интерфейсе Zabbix. Как мы уже говорили ранее, встроенная поддержка отправки уведомлений в Telegram через webhook доступна начиная с Zabbix 5.

Укажите HTTP API токен вашего бота в настройках шаблона Telegram.

Токен бота telegram в zabbix

Символы Emoji можно вставить в поле через буфер обмена.

настройка шаблона оповещения в zabbix

Теперь проверьте отправку уведомления через Telegram. Укажите в поле TO ваш ID аккаунта и нажмите кнопку Test. В чат должно прийти сообщение от бота.

отправить тествое сообщение из telegram в zabbix

Укажите ID вашего пользователя в Telegram и выберите триггеры (Use if severity), при срабатывании которых нужно отправлять уведомления в бот Telegram.

триггеры для отправки в telegram из zabbix

Выберите ваш триггер оповещения в разделе Configuration -> Actions -> Trigger actions. Перейдите в раздел Operations и добавьте новую операцию. Выберите пользователя или группу, которых нужно оповестить. В разделе Send only to выберите Telegram. Настройка Telegram оповещения для события zabbix

Теперь при срабатывании триггеров Zabbix вы будете получать уведомления в Telegram.

отправка алерта в telegram из zabbix

Недостаток стандартных шаблонов Zabbix для отправки уведомления через Webhook в том, что через него можно отправлять только текст без форматирования и графиков. Допускается использования только символов emoji.

Ввиду того файла что сейчас у меня система мониторинга на базе Zabbix и ее версия 3.2.6 (Ставилась по заметке🙂

я вдруг вспомнил, а почему у меня еще до сих пор не настроено уведомление на почту для своевременного оповещения о неполадках. Покопавшись в заметках также пришел к выводу, что и заметки на этот счет нет. Да еще настройки почты будут применены к функционалу «Яндекс — почта для домена». Таким образом я сделаю два дела и пусть наработанное мне еще раз пригодится, либо с учетом новых версий я для себя уже буду знать что менялось, а что нет при написании заметок настроек сервисов.

Настраиваем в Zabbix’ксе, что присылать все уведомления от имени данного почтового ящика:

  • Email
  • : Email
  • smtp.yandex.ru
  • SMTP server port: 465
  • ekzorchik
  • support@ekzorchik.ru
  • SSL/TLS
  • SSL verify peer: отметить галочкой
  • SSL verify host: отметить галочкой
  • Normal password
  • support@ekzorchik.ru
  • PASSWORD
  • отмечаю галочкой

И нажимаю кнопку Update

Теперь создаем пользователя или связываем уже существующего административного пользователя Zabbix с почтой кому следует присылать уведомления:

Щелкаем по учетной записи (я щелкаю по доменной учетной записи, где сопряжение Active Directory и Zabbix настроено по заметке), после переходим на вкладку: Media – Add

  • Email
  • НА_КАКОЙ_@_СЛАТЬ_УВЕДОМЛЕНИЯ
  • 1-7,00:00-24:00
  • Use if severity: отмечаю галочкой: Not classified,Information,Warning, Average, High, Disaster
  • Enabled

Теперь включаем возможность отправки отчетов на Email, как в случае аварии так и восстановлении аварии:

  • Name: Report problems to Zabbix administrators

вкладка:

  • Trigger severifity = HIGH

и нажимаю Add

  • Enabled: отмечена галочка.
  • Default operation step duration: 3600 (minimum 60 seconds)
  • Default subject: {HOST.NAME} {TRIGGER.STATUS}:{TRIGGER.NAME}
  • Текущее время: {DATE} {TIME}
  • Узел сети: {HOST.NAME}
  • Элемент данных: {ITEM.NAME}
  • Trigger severity: {TRIGGER.SEVERITY}
  • Pause operations while in maintenance: отмечаю галочкой
  • 1
  • 60
  • Send message
  • Add → отмечаю Zabbix administrators и нажимаю Select
  • Add → отмечаю учетную запись alexander.ollo и нажимаю Select
  • отмечаю галочкой

Уведомлять всех в группе Zabbix Administration

Затем переключаюсь на вкладку Recovery operations

  • Default subject: {HOST.NAME} {TRIGGER.STATUS}:{TRIGGER.NAME}
  • Текущее время: {DATE} {TIME}
  • Узел сети: {HOST.NAME}
  • Элемент данных: {ITEM.NAME}
  • Trigger severity: {TRIGGER.SEVERITY}
  • Operations: Notify all who received any messages regarding the problem before →
  • Operation type: Send recovery message
  • Default message: отмечаем галочкой

http://IP&DNS — Profile —

  • Message timeout (seconds): 60
  • Отмечаю галочкой
  • Once
  • отмечаю галочками: Recovery, Warning, High, Disaster и нажимаю Update

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

Отчет от Zabbix сервера что отвалился транк на FreePBXА вот и логи через Web-интерфейс: ReportsAction Log

В Zabbix формируется лог что уведомление через почты сформировано

Итого я пока получил заготовку от которой я буду отталкиваться при настройке уведомлений на почту и выполнения дополнительных скриптов. К примеру я хочу чтобы после уведомления на почту, посредством АТС мне на мобильный происходил звонок где уже заранее записанный голос произносит что-то не так с сервисом и это уже срочно.

Читайте также:  Поддержка Eternalhost


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

Итак есть Zabbix-сервер и хост на котором стоит Zabbix-агент где поставлен на мониторинг статус транка (зарегистрировал или не зарегистрирован).

Настраиваем в ’ксе, что присылать все уведомления от имени данного почтового ящика:

<IP_ADDRESS_MAIL_SERVER>

<DNS-SUFFIX_MAIL_SERVER>

Отмечаем галочкой

И нажимаем Save для сохранения настроек.

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

Теперь создаем пользователя или связываем уже существующего административного пользователя с почтой кому следует присылать уведомления:

1-7,00:00-24:00

Use if severity: отмечаю галочкой: Warning, High, Disaster

Теперь включаем возможность отправки отчетов на Email, как в случае аварии так и восстановлении аварии:

Отмечаю галочкой (сообщение когда сервис восстановлен)

Работа сервиса восстановлена на хосте

Type of calculation: and / or

Trigger value = PROBLEM

расширенные макросы могут быть взяты из документации

вкладка Operations: – Edit –

как настраивать смотреть здесь: https://www.zabbix.com/documentation/2.2/ru/manual/config/notifications/action/escalations

Default operation step duration: (в секундах, по умолчанию 3600, т.е. 1 час) 3600

подтверждаю свое намерение Ok.

http://IP&DNS — Profile —

Отмечаю галочкой

Once

отмечаю галочками: Recovery, Warning, High, Disaster и нажимаю Save

Проверяю как работает уведомление на почту, выключаю транк:

Уведомление на почту о проблемах с транком
Всплывающее сообщение на консоли администрирования

на Web-панели администрирования Zabbix появляется всплывающее окно вместе с гудком (проигрывается звуковой файл) сигнализирующем о проблеме и о решении

Сообщение на консоли изменилось о возобновлении нормальной работы транка
и в тоже время на почту приходит письмо:

How to integrate Telegram and Zabbix

Pull requests are more than welcome!

Introduction

Zabbix

Zabbix is the ultimate enterprise-level software designed for real-time monitoring of millions of metrics collected from tens of thousands of servers, virtual machines and network devices.

Zabbix is Open Source and comes at no cost.

Telegram

Telegram is a cloud-based mobile and desktop messaging app with a focus on security and speed.

Telegram bot

Getting started

Dependencies

Installation

Using pip

$ pip install pyTelegramBotAPI

It is also recommended to install security packages. To do this, run:

$ pip install pyopenssl ndg-httpsclient pyasn1

It may be necessary to update the requests package (tested with Ubuntu 14.04.4):

$ pip install -U requests

From source

$ git clone https://github.com/eternnoir/pyTelegramBotAPI.git
$ cd pyTelegramBotAPI
$ python setup.py install

Creating a bot

Send /newbot and it will ask the bot’s name. Choose any name.

Configuration

Bot configuration

  • /token Shows your bot’s token.
  • /revoke Revoke the token and give you a new one.
  • /setname Change the bot’s name.
  • /setdescription Set the bot’s description, a window displayed when a person opens a chat with the bot.
  • /setabouttext Set the bot’s about message, displayed on the bot’s profile page.
  • /setuserpic The bot’s photo.
  • /setcommands The commands that will be listed as bot’s options.
  • /setjoingroups Defines if the bot may or may not join groups.
  • /setprivacy Set if the bot reads all the messages on a group or only messages that it is cited.
  • /deletebot Used to destroy the bot.

Zabbix integration

Python script

Create a file named telegram_notification.py on the folder /usr/src/zabbixbot:

$ vi telegram_notification.py

Then paste the code:

#!/usr/bin/env python
import telebot,sys
BOT_TOKEN='158700146:AAHOPReqqTR8V7FXysa8mJCbQACUWSTBog8'
DESTINATION=sys.argv[1]
SUBJECT=sys.argv[2]
MESSAGE=sys.argv[3]
MESSAGE = MESSAGE.replace('/n','\n')
tb = telebot.TeleBot(BOT_TOKEN)
tb.send_message(DESTINATION,SUBJECT + '\n' + MESSAGE, disable_web_page_preview=True, parse_mode='HTML')

Change the file permission and allow it to be executed

# chown -R zabbix: /usr/src/zabbixbot/
# chmod +x telegram_notification.py

Zabbix_server.conf

Go to file /etc/zabbix/zabbix_server.conf

vi /etc/zabbix/server.conf

find the line AlertScriptsPath=. And include:

AlertScriptsPath=/usr/src/zabbixbot/

The easiest way to find is typing /AlertScriptsPath=.

Restart Zabbix-server service.

service zabbix-server restart

Media type

  • Name: telegram_notification.py
  • Type: Script
  • Script name: telegram_notification.py
If using Zabbix 3.0.1:
  • Script Parameters
  • {ALERT.SENDTO}
  • {ALERT.SUBJECT}
  • {ALERT.MESSAGE}

Actions

Open Zabbix web interface, go to Configuration, Actions and click on Create Action.

  • Name: Telegram notification
  • Subject: #{HOSTNAME}: {TRIGGER.NAME} {TRIGGER.STATUS}
  • Message:
Value: {ITEM.VALUE} {TRIGGER.STATUS}
Date: {EVENT.DATE} Time: {EVENT.TIME}

The fields Subject and Message are supposed to be customized as your needs. HTML tags supported:

<div data-snippet-clipboard-copy-content="bold, bold
italic, italic
inline URL
inline fixed-width code

pre-formatted fixed-width code block

«>

<b>bold</b>, <strong>bold</strong>
<i>italic</i>, <em>italic</em>
<a data-hren="URL">inline URL</a>
<code>inline fixed-width code</code>
<pre>pre-formatted fixed-width code block</pre>

Go to tab Conditions and add settings as your needs.

Go to tab Actions and add settings as your needs.

If using Zabbix 4.0.0:
  • Action
    • Name: Telegram
    • Conditions
      • Set as your needs
  • Operations
  • Recovery operations
    • Recovery Operations
      • Set message as your needs (Recommended Actions)
      • Notify all involved
    • Update operations
      • Set message as your needs (Recommended Actions)
      • Notify all involved

Users

The last step is to set who will receive the alerts.

  • Type: telegram_notification.py
  • Send to: ID | Refer to Telegram ID

Telegram ID

Go to https://api.telegram.org/bot158700146:AAHOPReqqTR8V7FXysa8mJCbQACUWSTBog8/getUpdates using your browser.

UserID

"message":{"message_id":59,"from":{"id":9083329,"first_name":"Gabriel","last_name":"R F","username":"GabrielRF"},"chat":{"id":9083329,"first_name":"Gabriel","last_name":"R F","username":"GabrielRF","type":"private"},"date":1446911853,"text":"\/start"}}]}

GroupID

"message":{"message_id":60,"from":{"id":9083329,"first_name":"Gabriel","last_name":"R F","username":"GabrielRF"},"chat":{"id":-57169325,"title":"q31231","type":"group"},"date":1446912067,"group_chat_created":true}},{"update_id":727527785,

ChannelID

If this method doesn’t work or if you want to get an id from a private channel, please, visit https://github.com/GabrielRF/telegram-id

More info

Inspiration

Most of this method is based on a post from a Brazilian dev named Tobias. Zabbix com notificações pelo Telegram (Portuguese only)

pyTelegramBotAPI

Thanks

Finally, I would like to thank João Paulo Nascimento, from Sergipe, who was the first person to test this method, helping me to find bugs.

Zabbix Notification Telegram

Нотификатор оповещений в Telegram для Zabbix.
Легкая установка, гибкая настройка, информативные сообщения.

🔴 Проект закрыт. This project is deprecated. 🔴

Go to -> https://t.me/ZbxNTg/4241

  • Возможности
  • Планы
  • С чего начать
  • Создаем первое оповещение
  • Настраиваем нотификатор
  • Логирование
  • F.A.Q.
  • Последние значимые изменения
  • Помощь

Возможности

  • Графики, информативные заголовки, ссылки1, тэги2 и упоминания объединены в одно сообщение.
  • Формирование и обновление cash файла (privat, group, group -> supergroup)3
  • Гибкая настройка через конфигурационный файл, XML разметку в действиях триггеров и Trigger Tags4
  • Маппинг Emoji статуса и важности события.
  • Наложение watermark на изображение.
  • Обьединение графиков в альбом.

Планы

С чего начать

Для работы потребуется Python 3+ и Zabbix 3+.

Установка из source (git requires)*:

$ cd /usr/lib/zabbix/alertscripts
$ git clone https://github.com/xxsokolov/Zabbix-Notification-Telegram.git .

После этого нотификатор практически готов к работе, потребуется еще несколько шагов.

Подробную инструкцию вы можете найти на wiki: RU, ENG (vacant)

Создаем первое оповещение

Получаем API token

Если у Вас нет бота, я расскажу как это сделать: RU, ENG (vacant)

Настраиваем нотификатор

Конфигурационный файл

Основная конфигурация нотификатора производится через файл zbxTelegram_config.py.

Давайте разберем каждый параметр подробно:

XML разметка

Дополнительная конфигурация производится через XML разметку(пример) в Zabbix Action.

Также разберем эти параметры:

Полный список поддерживаемых макросов в Zabbix

Тэги ZNTSettings+

Более детальную настройку нотификатора можно произвести через тэги в триггерах.

Разберем эти параметры:

Пример:

Kitten

Логирование

  1. Обычный(по-умолчанию), ведется минимальный log об операциях в нотификаторе;
  2. Debug], более детальный log, требуется только для анализа ошибок в работе нотификатора (по-умолчанию False);
  3. exc_info], полный Traceback ошибок (по-умолчанию False);

F.A.Q.

Оповещение не приходит в группу или в личку

Последние значимые изменения

  • Добавлены и изменены переменные в конфиг файле.
  • Изменен XML.
Читайте также:  Что такое туннель tcp

Помощь


1Формирование списка urls в теле сообщения для быстрого перехода в разделы Zabbix (Trigger, History, Event, Acknowledget, Host)
2 Формирование списка tags в теле сообщения для быстрого поиска событий в Telegram (Trigger Tags, Eventid, Itemid, Triggeid, Actionid)
3 Кеш файл это json массив содержащий имена юзуров, групп, суппергруп и их идентификаторы(ИД). Безопасность Telegram не позволяет напрямую писать по имени, только по ИД. Чтобы получить данный ИД надо написать лично Вашему боту или бот должен быть добавлен в группу . Только после этого нотификатор «подключается» к боту и получает все обновления которые произошли у бота (getUpdates). Далее мы находим никнейм или имя групп, куда решили отправить нотификацию, и их ИД, которые и кладем в cash файл.
FAQ Telegram
4 Управление через Trigger Tags (Не прикреплять график, не отправлять уведомление, без push в Telegram dev и т.п.)

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

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

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

# cd ~
# git clone https://github.com/xxsokolov/Zabbix-Notification-Telegram

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

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

# chown -R zabbix. /usr/lib/zabbix/alertscripts
# chmod +x zbxTelegram.py

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

# dnf install virtualenv

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

# cd /usr/lib/zabbix/alertscripts
# virtualenv venv --python=python3
# source venv/bin/activate

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

# pip install -r .requirements
# deactivate

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

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

tg_proxy = False
tg_token = '1393668911:AFGHTRDVdfJ28R-wxKfvH1RTR6-vdNw'
zabbix_api_url = 'http://10.20.1.23/zabbix/'
zabbix_api_login = 'Admin'
zabbix_api_pass = 'zabbix'

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

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

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

{Problem} {TRIGGER.SEVERITY} {{TRIGGER.SEVERITY}}: {EVENT.NAME}
{Resolved} {TRIGGER.SEVERITY} {{TRIGGER.SEVERITY}} {EVENT.NAME}
{Update} {TRIGGER.SEVERITY} {{TRIGGER.SEVERITY}} {EVENT.NAME}
  • {Problem} — мапинг значений Problem\Resolved\Update в emoji (config: zabbix_status_emoji_map)
  • {{TRIGGER.SEVERITY}} — мапинг значений Severity в emoji (config: zabbix_status_emoji_map)

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

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

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

  • <graphs></graphs> — прикреплять график (True\False)
  • <graphlinks>True</graphlinks> — прикрепить ссылку url на History (True\False)
  • <triggerlinks>True</triggerlinks> — прикрепить ссылку url из триггера (True\False)
  • <tag>True</tag> — прикрепить теги (True\False)
  • <graphs_period></graphs_period> — период графика в секундах
  • <itemid></itemid> — передача itemid {ITEM.ID1}
  • <triggerid></triggerid> — передача triggerid {TRIGGER.ID}
  • <eventid></eventid>- передача eventid {EVENT.ID}
  • <title></title> — заголовок графика {HOST.HOST} — {EVENT.NAME}
  • <triggerurl></triggerurl> — передача url из триггера {TRIGGER.URL}
  • <tags></tags> — передача списка тэгов из триггера {EVENT.TAGS}

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

# ./zbxTelegram.py @serveradmin_zabbix_group test test

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

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

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

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

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

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

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

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

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

# cd ~
# git clone https://github.com/ableev/Zabbix-in-Telegram

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

# dnf install python3-pip
# pip3 install -r requirements.txt

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

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

# chown -R zabbix. /usr/lib/zabbix/alertscripts

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

# -*- coding: utf-8 -*-
tg_key = "1393668911:AAHtEDfgHJHYDVDwxKfvH1WR6-vdNw" # 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://127.0.0.1/zabbix/" # zabbix server full url
zbx_api_user = "Admin"
zbx_api_pass = "zabbix"
zbx_api_verify = True # True - do not ignore self signed certificates, False - ignore
#zbx_server_version = 2 # for Zabbix 2.x version
#zbx_server_version = 3 # for Zabbix 3.x version, by default, not everyone updated to 4.x yetzbx_server_version = 4 # for Zabbix 4.x version, default will be changed in the future with this
zbx_basic_auth = False
zbx_basic_auth_user = "zabbix"
zbx_basic_auth_pass = "zabbix"
proxy_to_zbx = None
proxy_to_tg = None
# proxy_to_zbx = "http://proxy.local:3128"
# proxy_to_tg = "https://proxy.local:3128"
# proxy_to_tg = "socks5://user1:password2@hostname:port" # socks5 with username and password
# proxy_to_tg = "socks5://hostname:port" # socks5 without username and password
# proxy_to_tg = "socks5h://hostname:port" # hostname resolution on SOCKS proxy. # This helps when internet provider alter DNS queries. # Found here: https://stackoverflow.com/a/43266186/957508
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_enabled_ids = [6931850, ]
zbx_tg_daemon_enabled_users = ["ableev", ]
zbx_tg_daemon_enabled_chats = ["Zabbix in Telegram Script", ]
zbx_db_host = "localhost"
zbx_db_database = "zabbix"
zbx_db_user = "root"
zbx_db_password = "123"
emoji_map = { "Disaster": "?", "High": "?", "Average": "❗", "Warning": "⚠️", "Information": "ℹ️", "Not classified": "?", "OK": "✅", "PROBLEM": "❗", "info": "ℹ️", "WARNING": "⚠️", "DISASTER": "❌", "bomb": "?", "fire": "?", "hankey": "?",
}

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

Читайте также:  8 лучших хостингов серверов Minecraft в 2022 году | Website Rating

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

zbxtg.py: User 'zeroxzed' needs to send some text bot in private

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

# sudo -u zabbix ./zbxtg.py zeroxzed test "$(echo -e 'zbxtg;graphs: \nzbxtg;graphs_period=3600\nzbxtg;itemid:23301\nzbxtg;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, то после выполнения скрипта никакого вывода не будет, а в телеграм будет отправлен выбранный график.

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

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

Курс "ВНЕДРЕНИЕ И РАБОТА В DEVSECOPS"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заключение

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

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

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