Я уже достаточно плотно работаю с сервисом организации мониторинга Zabbix Server 4.4 on Ubuntu 18.04 Server, как дома, так и на работе. Мне – это интересно. Точнее мне интересно все что на Ubuntu системе можно сделать не используя Windows, руками и с большим количеством настроек. А где настройки – там шаги. Так вот для уведомления о том, что сработал такой – то триггер мне бы хотело получать их в Telegram.

Необходимые приготовления:

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

  • VM: srv-zabbix (172.33.33.117)
  • VM: srv-fog – Сервис по автоматизированному развертыванию операционных система: Windows, Ubuntu, HirensCD и т.д.
  • VM: srv-wiki (и на ней поднята связка 3proxy + TOR + Auth) которую я использую для работы Desktop Telegram клиента и всего того что не работает при обычном использовании из-за запретов нашего «Роскомнадзор». Я нахожусь в Московской области и попадаю в его юрисдикцию. Значит Socks мне нужен.) Socks5: 172.35.35.8:50001

Шаг №1: В локальной сети развернут сервис мониторинга Zabbix Server 4.4 on Ubuntu 18.04 Server amd64

Шаг №2: Регистрирую себе бота (процедура проста и бесплатна)

Token моего бота: 415624378:AAG4m_bSgEccPFf4W38-HSvHK_gcPnkfSz8

Шаг №3: За отправку уведомлений из Zabbix будет отвечать скрипт (я использую из заметки «Работа с Telegram из Ubuntu Bionic Server»), его нужно  в директории «/usr/lib/zabbix/alertscripts/

ekzorchik@srv-zabbix:~$ sudo apt-get install -y curl

ekzorchik@srv-bionic:~$ sudo nano /usr/lib/zabbix/alertscripts/telegram.sh

#!/bin/bash

#./bot_notify2.sh 361950788 Тест 'Проверяю отправку оповещений ботом'

TOKEN=415624378:AAG4m_bSgEccPFf4W38-HSvHK_gcPnkfSz8

CHAT_ID="$1"

SUBJ="$2"

MESSAGE="$3"

SOCKSIP=172.35.35.8

SOCKSPORT=50001

URL="https://api.telegram.org/bot$TOKEN/sendMessage"

curl -x socks5://$SOCKSIP:$SOCKSPORT -s --header 'Content-Type: application/json' --request 'POST' --data "{\"chat_id\":\"${CHAT_ID}\",\"text\":\"${SUBJ}\n${MESSAGE}\"}" "https://api.telegram.org/bot${TOKEN}/sendMessage"

ekzorchik@srv-bionic:~$ sudo chmod +x /usr/lib/zabbix/alertscripts/telegram.sh

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

  • CHAT_ID -> это идентификатор моего личного аккаунта на Telegram
ekzorchik@srv-bionic:~$ sudo /usr/lib/zabbix/alertscripts/telegram.sh 361950788 Тест 'Привет из Zabbix'

{"ok":true,"result":{"message_id":325,"from":{"id":415624378,"is_bot":true,"first_name":"Ekzbot","username":"Ekzorchikbot"},"chat":{"id":361950788,"first_name":"\u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440","last_name":"\u041e\u043b\u043b\u043e","username":"aka_ekzorchik","type":"private"},"date":1552321414,"text":"\u0422\u0435\u0441\u0442\n\u041f\u0440\u0438\u0432\u0435\u0442 \u0438\u0437 Zabbix"}}

Тестовое сообщение при работе скрипта

Шаг №5: Перехожу к настройка в серверной части Zabbix Server 4.4

http://IP&DNS/zabbix - user&pass - Администрирование – Способы оповещений – Создать способ оповещения

  • Имя: именую просто и со вкусом, как Telegram
  • Тип: изменяю на Script
  • Имя скрипта: именование скрипта берем из «Шаг №3», у меня это telegram.sh
  • Параметры скрипта: — Нажимаю «Добавить» и создаю параметры которые я передавал скрипту при тестовом запуске, их будет три параметра: {ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESSAGE}
  • Описание: Оповещение через Telegram
  • Активировано: Отмечаю галочкой

Где

  • {ALERT.SENDTO} — это chat_id
  • {ALERT.SUBJECT} — это тема
  • {ALERT.MESSAGE} — это сообщение

Так выглядят настройки:

Настраиваю способ оповещения через запуск Telegram скрипта

В конце нажимаю «Добавить». Мои способы оповещения. Т.к. Email & SMS я пока не использую, то деактивировал их:

Мои способы оповещения

Шаг №6: Теперь нужно присвоить либо группе, либо конкретному пользователю способ оповещения. Т.к. я один использую Zabbix то могу оставить пользователя Admin или же создать/добавить.

Пусть будет текущий – Admin

http://IP&DNS/zabbix - user&pass - Администрирование – Пользователи – нажимаю на Username=Admin, перехожу на вкладку «Оповещения» — «Добавить»

  • Тип: Telegram
  • Отправлять на: 361950788
  • Когда активен: 1-7,00:00-24:00
  • Использовать, если важность: Высокая, Чрезвычайная
  • Активировано: отмечаю галочкой

Скриншот для наглядного представления, как выглядят настройки способа оповещения для учетной записи:

Настройки способа оповещения для учетной записи

И нажимаю «Добавить». Итого настроенный способ оповещения для учетной записи Admin:

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

И нажимаю «Обновить».

Шаг №7: После активирую дефолтную настройку отправки отчета о проблемах Zabbix администраторам:

http://IP&DNS/zabbix - user&pass - Настройка – Действия

по умолчанию

Report problems to Zabbix administrators” в состоянии «Деактивировано», щелкаю по статусу «Деактивировано» и он изменяется на статус «Активировано». Хотя, наверное, лучше сделать настройку действий по следующему алгоритму:

а) все по Email

б) а определенные по Telegram

http://IP&DNS/zabbix - user&pass - Настройка – Действия –

  • Источник событий: Триггеры

И нажимаю «Создать действие». Но это будет после, сейчас моя задача оттестировать работу дефолтного созданного при установке Zabbix. Так состояние изменил на «Активировано», захожу в текущее действие “Report problems to Zabbix administrators” – вкладка «Операции» и нажимаю «Изменить» дабы предопределить кому отправлять отчет о проблеме и куда

Предопределяю действие на отправку

  • Отправлять группам пользователей: Zabbix administrators
  • Отправлять только через: изменяю «Все» на «Telegram».

После нажимаю «Обновить» — «Обновить»

Шаг №8: Проверяю на реальном примере если сработал триггер с предопределенным уровнем важности и что будет уведомление в Telegram.

Задействую заметку «Показания с DHT 11 Zabbix-агента на Zabbix-сервер» где на показания «Элемента данных» : Температура Датчика 1 создам триггер, если снимаемая температура более 25 градусов – это проблема

http://IP&DNS/zabbix - user&pass - Настройка – Узлы сети – выбираю хост raspberry и перехожу к колонке «Триггеры», нажимаю на элемент «Триггеры» — «Создать триггер»

  • Имя: “Температура с Датчика 1 более 25”

На заметку: Вычитал из документации (https://www.zabbix.com/documentation/4.4/ru/manual/config/triggers/trigger)

Имя может содержать поддерживаемые макросы: {HOST.HOST}, {HOST.NAME}, {HOST.CONN}, {HOST.DNS}, {HOST.IP}, {ITEM.VALUE}, {ITEM.LASTVALUE} и {$MACRO}.

  • Важность: Высокая
  • Выражение:

{raspberry:rpi.dht11temp.last()}>=25

Создаю триггер на датчик DHT 11

У меня интервал опроса для этого элемента данных составляет: 30s

  • Генерация ОК событий: Выражение восстановления
  • Выражение восстановления: {raspberry:rpi.dht11temp.last()}<25
  • Режим генерации событий ПРОБЛЕМА: Одиночная
  • ОК событие закрывает: Все проблемы
  • Разрешить закрывать вручную: Отмечая галочкой
  • Описание: к примеру «Датчик 1 – Коридор»
  • Активировано: Отмечаю галочкой

И нажимаю «Добавить»

Триггер

Так, дабы проверить, нагружаю Raspberry Pi 3 Model B + DHT 11 чтобы возросла температура – направляю на него Фен.

На главной странице «Мониторинг» — «Панель» — в «Проблемы» идет регистрации срабатывания триггера

Триггер сработал и на странице "Мониторинг" он отображается

И мне к Telegram боту приходит сообщение вида:

И мне к Telegram боту приходит сообщение вида:

На скриншоте выше множественные сообщения, а все из-за того, что я поставил для триггера настройку:

  • Режим генерации событий ПРОБЛЕМА: Множественный

Лучше ставить «Одиночная» или указывать с какой периодичностью слать уведомления, но это в настройках «Способы уведомлений».

А чтобы также было сообщение что триггер пришел в норму:

http://IP&DNS/zabbix - user&pass - Настройка – Действия – захожу в «Report problems to Zabbix administrators» — вкладка «Операции восстановления» — (Операции) Изменить – (Детали операции)

  • Тип операции: Отправить сообщение
  • Отправлять группам пользователей: Zabbix administrators
  • Отправлять только через: Telegram
  • Сообщение по умолчанию: Отмечено галочкой

И нажимаю «Обновить» — «Обновить».

Когда триггер придет в норму, в Telegram также будет сообщение о восстановление работоспособности:

Сообщение в Telegram о восстановление работоспособности

{TRIGGER.NAME} – имя триггера

{TRIGGER.STATUS} – статус триггера

{TRIGGER.KEY} – ключ проверки

{{HOSTNAME}:{TRIGGER.KEY}:{ITEM.VALUE}} – raspberry:rpi.cpuTemp:57

{TRIGGER.EXPRESSION} – Строка проверки значения (raspberry:rpi.cpuTemp.last()>=55)

Шаг №9: Кстати, в шаблон сообщение было бы неплохо изменить

  • Состояние датчика, т.е. какова температура в момент срабатывания триггера
  • Описание, что это за датчик

http://IP&DNS/zabbix - user&pass - Настройка – Действия – захожу в «Report problems to Zabbix administrators»

Вкладка «Операции» — Сообщение по умолчанию:

  • Зафиксирована проблема {EVENT.TIME} on {EVENT.DATE}
  • Имя проблемы:  {EVENT.NAME}
  • Имя хоста:  {HOST.NAME}
  • Уровень  тревоги:  {EVENT.SEVERITY}
  • Триггер на: {TRIGGER.EXPRESSION}
  • Текущие показания: {{HOSTNAME}:{TRIGGER.KEY}.last(0)}
  • Описание: {TRIGGER.DESCRIPTION}
  • Идентификатор проблемы:  {EVENT.ID}
  • {TRIGGER.URL}

Вкладка «Операции восстановления» —

  • Тема по умолчанию: Проблема устранена: {EVENT.NAME}
  • Сообщение по умолчанию:
  • Проблема была устранена {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}
  • Имя проблемы: {EVENT.NAME}
  • Имя хоста:  {HOST.NAME}
  • Уровень тревоги: {EVENT.SEVERITY}
  • Триггер на: {TRIGGER.EXPRESSION}
  • Текущие показания: {{HOSTNAME}:{TRIGGER.KEY}.last(0)}
  • Идентификатор проблемы:  {EVENT.ID}
  • {TRIGGER.URL}

Нажимаю «Обновить»

Создал триггер на элемент данных rpi.cpuTemp (из заметки )

Триггер на температуру CPU миникомпьютера Raspberry Pi 3 Model B

Нагружаю систему Raspbian Stretch вот такой вот командой и в следствии чего повышается температура процессора:

pi@raspberrypi:~ $ dd if=/dev/urandom | bzip2 -9 > /dev/null

по сочетанию клавиш Ctrl + C прерываю.

Сообщение на Telegram: (Проблема и Восстановление)

Сообщение о проблеме и восстановлении: Измененный шаблон

Думаю, по мере различных проблем шаблон сообщений будет дорабатываться для информативности и принятия мер по устранению проблем.

На заметку: Можно для каждого типа уведомлений создать свой шаблон. Выше это у меня для важности «Высокая» и «Чрезвычайная».

Итого по заметке. Она работоспособная и для моего домашнего «Умного дома» куда заведено все она подходит. И ее к рабочим моментам также можно приспособить. Универсальность, которую я прорабатываю описываю каждый шаг, ставя задачу и как я бы ее делал. На этом заметку пока считаю завершенной, с уважением автор блога Олло Александр aka ekzorchik.