среда, 23 октября 2019 г.

Telegram бот для Zabbix v2

Данный пост является переосмылением  предыдущего поста на эту тему и предполагает настройку Docker контейнера Zabbix, описанную в этом посте. Цель - отделить данные от контейнера и упростить процес обновления контейнера.

Создаем Telegram бота

  1. Для этого в Telegram добавляем бота @BotFather и жмем "запустить"
    BotFather меню

  2. Отправляем боту команду  /newbot (можно нажать ссылку меню)
    newbot запрос имени
  3. Вводим имя бота, которое будет отображаться в контактах
    запрос названия бота
  4. Вводим имя бота для вызова, которое должно заканчиваться на bot и быть уникальным и в ответ получаем токен
    запрос имени бота и получение токена
  5. Добавляем в контакт лист Telegram @userinfobot
  6. Жмем запуск и узнаем user_ID
    получаем User_ID
  7. Для отправки сообщений в группу, необходимо в группу добавить @groupinfobot, после чего инфобота можно удалить
    Получаем Group_ID
  8. Из консоли проверяем отправку(вместо User_ID можно указать Group_ID со знаком "-")
    curl --header 'Content-Type: application/json' --request 'POST' --data '{"chat_id":"User_ID","text":"Пров.org/bot<bot_token>/sendMessage"
    пришло тестовое сообщение
  9. Пишем скрипт отправки zsender.sh
    #!/bin/sh
    token='bot_token'
    chat="$1"
    subject="$2"
    message="$3"
    /usr/bin/curl -s --header 'Content-Type: application/json' --request 'POST' --data "{\"chat_id\":\"${chat}\",\"text\":\"${subject}\n${message}\"}" "https://api.telegram.org/bot${token}/sendMessage
  10. Делаем исполняемым
    chmod +x zsender.sh
  11. Проверяем
    ./zsender.sh User_ID 'Test message' 'it is test message'
    Отправка тестового сообщения из скрипта
    Скрипт работает

Настройка Zabbix для работы с ботом


Внимание!
Предполагается что мы имеем дело с последней версией контейнера, если нет - имеет смысл существующий контейнер удалить и на базе свежего образа запустить новый. Обновлять пакеты внутри контейнера не вижу смысла. Созданный на предыдущем этапе скрипт необходимо поместить в каталог хоста, связанный с /usr/lib/zabbix/alertscripts контейнера в моем случае это /var/lib/zabbix/alertscripts.

  1. Подключаемся к контейнеру с Zabbix-Server
    docker exec -i -t zabbix-server sh
    /var/lib/zabbix #
  2. устанавливаем curl
    apk add curl
  3. С помощью комбинации <Ctrl><D> отключаемся от консоли контейнера
  4. Добавляем в Zabbix новый способ оповещения, для чего идем
    Администрирование/Способы оповещения/Создать способ оповещения
    Добавляем способ оповещения zabbix
  5. Указываем наш скрипт, задаем имя и параметры:
    Задаем параметры нового оповещения Zabbix
  6. В итоге имеем
    Новый способ оповещения "Телеграм"
    Жмем тест
  7. В получателя вводим User_ID или Group_ID со знаком "-"
    Тестовое сообщение в Телеграм
    Сообщение телеграм бота из Zabbix
    Результат тестирования
  8. Добавляем оповещение для пользователя
    Добавляем yjdjt оповещение пользователю Zabbix
    Жмем добавить
    Настройка параметров оповещения Zabix
    Вводим User_ID/-Group_ID
    Добавленное оповещение zabix
    Результат
Оповещение через Telegram настроено!
Для тонкой настройки оповещений следует использовать пункт меню Настройка/действия(не является темой заметки). Интересующимся сюда .

4 комментария:

  1. Интересно, спасибо!
    Но есть вопрос, как сделать чтобы бот мог отвечать на некоторые запросы?
    К примеру: Сколько по времена определённый хост/триггер находится в состоянии ПРОБЛЕМА?

    ОтветитьУдалить
  2. Добрый день !! а как быть рутом в докер контейнере ?!? При подключении docker exec -i -t zabbix-server sh , я обычный пользователь и при попытке apk add curl - выдает permission denied

    ОтветитьУдалить
    Ответы
    1. Там зависит от базового образа - apk - для образа на базе alpine.
      попробуйте выполнить команду whoami должен быть root, если нет необходимо выполнить sudo.

      Удалить