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

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

Введение

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

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

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

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

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

Кстати, еще один способ отправки уведомлений из zabbix — с помощью звонка через asterisk. Если вам это интересно, читайте соответствующий материал — оповещения zabbix через asterisk.

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

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

  1. Установка CentOS 7.

Настройка CentOS 7.

Установка и настройка zabbix сервера.

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

  1. Установка Debian 9.

Базовая настройка Debian 9.

Установка и настройка zabbix на debian.

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

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

Напишем очень простой скрипт, который будет использовать 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 – Создание действия.

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

Как создать действие в ZABBIX – Страница действий

Обратите внимание, что здесь отображается вся информация по действиям, уже имеющимся в системе. Нам нужна кнопка “Создать действие”

В пример я приведу действие “KKT Notification”:

Как создать действие в ZABBIX – Страница создания

Снова пройдемся по полям:

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

Далее переходим на вкладку “Операции”. Здесь нам необходимо нажать на кнопку “Новый” в поле “Операции”.

Как создать действие – Новая операция

В появившихся поля нам необходимо указать:

  • Шаги – количество выполнения данной операции.
  • Длительность шага – время выполнения 1 шага.
  • Тип операции – сама операция, это поле уже на ваш выбор.
  • Отправлять группам пользователей – отправка сразу нескольким пользователям, входящих в указанную группу.
  • Отправлять пользователям – отправка указанным пользователям. (не забудьте поставить себя и в своем профиле указать свой электронный адрес)
  • Отправлять только через – способ отправки. (Нам нужен Email)
  • Условия – дополнительные условия отправки. (Указываем “Событие подтверждено =  Не подтверждено”)

Для того, чтобы добавить группу пользователей, пользователя отдельно или дополнительное условие, нажимайте на кнопки в этих полях “Добавить” и “Новый”.

После нажатия кнопки “Добавить”, вас перенесет на страницу действий, где появится только что созданное действие. Теперь нам осталось проверить работоспособность нашего действия. Для этого мне необходимо снова зайти на сервер vtrsagent и выключу блокнот.

После проделанных операций мне пришло письмо на почтовый адрес с содержанием проблемы:

Как создать действие – Письмо от ZABBIX

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

Ну-с, собственно все, могу вас поздравить! Вы только что создали систему оповещения алертов в заббиксе!

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

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

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

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

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

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

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

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

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

Скрипт

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

nano /usr/lib/zabbix/alertscripts/zbxtg.sh
#!/bin/bash

USERID=$1
THEME=$2
BODY=$3

KEY="токен:бота"
TIMEOUT="10"
URL="https://api.telegram.org/bot$KEY/sendMessage"

TEXT="$THEME
$BODY"

PARSEMODE="markdown"

curl -s --max-time $TIMEOUT -d "chat_id=$USERID&disable_web_page_preview=1&parse_mode=$PARSEMODE&text=$TEXT" $URL > /dev/null

Кстати, обратите внимание на вот этот кусочек кода:

TEXT="$THEME
$BODY"

Таким образом обеспечивается перенос строки, я пробовал всякие там , , /n, /r — ничего не работало, а вот такой перенос — работает ;-). И ещё хозяйке на заметку (хотя я это и не использую): All and & symbols that are not a part of a tag or an HTML entity must be replaced with the corresponding HTML entities (<, > with > and & with &).

Меняем владельца и делаем скрипт исполняемым.

chown zabbix:root /usr/lib/zabbix/alertscripts/zbxtg.sh
chmod +x /usr/lib/zabbix/alertscripts/zbxtg.sh

Параметрами $1, $2, $3 для скрипта являются получатель, тема и тело сообщения. Вы можете сами проверить как Zabbix будет дёргать скрипт, выполнив команду /usr/lib/zabbix/alertscripts/zbxtg.sh user_id message_theme message_body

"message":{"message_id":14681,"from":{...},"chat":{"id":123456789,"first_name":"REALNAME","username":"NICKNAME","type":"private"},"date":...

Где «chat»:{«id»:123456789 и будет user id. Для группы:

"message":{"message_id":14686,"from":{...},"chat":{"id":-12345678,"title":"GROUPNAME","type":"group"},"date":...

Где user id будет: «chat»:{«id»:-12345678

Заметка: чтобы добавить бота в группу, нужно нажать на название группы в Telegram, выбрать Добавить участников и в поиске набрать имя_бота.

Настройка Zabbix Telegram

Zabbix умеет отправлять оповещения, используя скрипт. Zabbix отправляет 3 параметра: получатель, тема сообщения, текст сообщения.

Создание скрипта

Давайте напишем скрипт, который и будет передавать нам информацию из Zabbix нашему боту, который в свою очередь будет передавать ее нам:

#!/bin/bash
PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
wget -O /dev/null "http://crierbot.appspot.com/$1/send?message=Subj: $2 || Message:$3"

Где $1, $2, $3 переданные Zabbix’ом параметры: получатель, тема сообщения, сообщение.

Данный скрипт сохраняем с произвольным именем, например. telegram.sh в директорию Zabbix’а, где хранятся скрипты уведомлений (в Freebsd по умолчанию это директория:     —       (Для версии 3.2)

Делаем наш скрипт исполняемым:

chmod +x /usr/local/zabbix32/zabbix/alertscripts/telegram.sh

Выдаем zabbix права на этот скрипт:

chown zabbix:zabbix /usr/local/zabbix32/zabbix/alertscripts/telegram.sh

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

Теперь переходим в веб-интерфейс Zabbix’а и переходим по Меню: «Администрирование» -> «Способы оповещения» и нажимаем «Создать способ оповещения»

Тут заполняем:

Имя — Произвольное

Тип — Скрипт

Имя скрипта — так, как вы назвали скрипт при его создании

Параметры срипта:

{ALERT.SUBJECT}

{ALERT.MESSAGE}

(Это как раз и есть наши $1, $2 и $3)

И ставим галочку «Активировано»

И нажимаем Добавить (у меня обновить, так как он уже создан у меня)

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

Далее заходим в «Администрирование» -> «Пользователи«. Выбираем нашего пользователя и переходим на вкладку «Оповещения» и нажимаем «Добавить»

В появившемся окне выбираем тип — под каким именем мы создали действие, вставляем наш токен, который выдал нам бот и нажимаем «Добавить»

После этого у пользователя в Оповещениях появится новый способ оповещения. Нажимаем «Обновить«.

Теперь нам осталось только создать действий, по которому нам будет приходить какое-либо сообщение.

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

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

Действие:

Имя — Пишем любое понятное для нас имя

Условие — Настраиваем условие, при котором будет происходит наше действие (ниже я приведу пример 1 из своих действий)

Операции:

Выбираем что будет присылаться нам во время срабатывание нашего условия

В операциях нажимаем Новый и добавляем наш способ оповещения:

Должно получиться что то типа вот этого.

На вкдадке Операции восстановления Выбираем в операциях «оповещение о восстановлении», чтобы знать, что проблема ушла.

И нажимаем «Добавить«. В принцип на этом этапе мы уже все настроили!

Telegram ID

Telegram needs to send messages. The easiest way to get this id is using the bot you have just created.

Go to using your browser.

UserID

If you want to get a user id, send a message from this user to the bot. Reload the page and the user id will be shown.

Example:

In this case, the user id is . So, on the step , the field would be .

GroupID

If you prefer to have your bot working on a group, then create the group and add the bot to it. Reload the page and you will see a message like:

In this case, the group id is . So, on the step , the field would be .

Note that a group id is always negative. Only user’s id are positive.

ChannelID

The last alternative is the easiest one. There’s no need to get a channel id. Simply set the field on the step to . The symbol is obligatory.

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

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

Рассмотрим ситуацию, когда мы хотим отправлять уведомления из zabbix не конкретным людям, а сразу в группу, где будут несколько пользователей. Никаких особых настроек для этого не надо. Просто создайте группу в Телеграме, добавьте в эту группу бота @my_id_bot и напишите /start. Так вы узнаете ID группы. В эту же группу добавьте своего бота.

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

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

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

Не знал, что этот символ является неотъемлемой частью.

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

Configuration

Bot configuration

No bot configuration is needed, but there are optional settings.

Commands available on @BotFather:

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

Create a file named on the folder :

Then paste the code:

Change the file permission and allow it to be executed

Go to file

find the line . And include:

The easiest way to find is typing .

Restart Zabbix-server service.

Media type

On the Zabbix interface, go to Adminstration, Media types, and click on Create media type.

  • Name:
  • Type:
  • Script name:
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:
  • Subject:
  • Message:

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

Go to tab Conditions and add settings as your needs.

Go to tab Actions and add settings as your needs.

Users

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

Go to Administration, Users and choose who will receive the notifications. Then, go to Media and click on Add.

  • Type:
  • Send to: | Refer to Telegram ID

Getting started

Installation

The only installation required is pyTelegramBotAPI. Choose one of the following methods:

From source

Creating a bot

To create a bot, talk to @BotFather on Telegram.

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

Then it will ask the bot’s username. The username must end with and is unique.

When everything is done, the @BotFather will display the bot’s token. Save it and keep it secret. Here is an example of a token:

In order to receive messages, the recipient user MUST send a message to the bot at least once.

If a group will be used, add the bot on the group before testing.

For channels, add the bot to the channel as an administrator.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделитесь с друзьями:
Технарь
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.