среда, 11 сентября 2019 г.

Telegram бот для Zabbix (устаревшее)

Актуальная версия здесь.
В предыдущем посте я описал установку системы мониторинга Zabbix с использованием Docker контейнеров. Сегодня мы попробуем настроить оповещения с помощью Telegram мессенджера.

Создаем 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 для работы с ботом

  1. Подключаемся к контейнеру с Zabbix-Server
    docker exec -i -t zabbix-server sh
    /var/lib/zabbix #
  2. устанавливаем curl
    apk update
    apk upgrade
    apk add curl
  3.  Переходим в каталог /usr/lib/zabbix/alertscripts и в него генерируем скрипт созданный и проверенный нами на предыдущем шаге(чтоб не перегружать контейнер ненужным софтом делаем все из командной строки)
    cd /usr/lib/zabbix/alertscripts
    echo $'#!/bin/sh\ntoken=\'<bot_token>\'\nchat="$1"\nsubject="$2"\nmessage="$3"\n/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"' >/usr/lib/zabbix/alertscripts/zsender.sh
    chmod +x /usr/lib/zabbix/alertscripts/zsender.sh
  4. Проверяем что в итоге получилось
    cat /usr/lib/zabbix/alertscripts/zsender.sh
    Скрипт для работы с Telegram ботом
  5. Добавляем в Zabbix новый способ оповещения, для чего идем
    Администрирование/Способы оповещения/Создать способ оповещения
    Добавляем способ оповещения zabbix
  6. Указываем наш скрипт, задаем имя и параметры:
    Задаем параметры нового оповещения Zabbix
  7. В итоге имеем
    Новый способ оповещения "Телеграм"
    Жмем тест
  8. В получателя вводим User_ID или Group_ID со знаком "-"
    Тестовое сообщение в Телеграм
    Сообщение телеграм бота из Zabbix
    Результат тестирования
  9. Добавляем оповещение для пользователя
    Добавляем yjdjt оповещение пользователю Zabbix
    Жмем добавить
    Настройка параметров оповещения Zabix
    Вводим User_ID/-Group_ID
    Добавленное оповещение zabix
    Результат
Оповещение через Telegram настроено!
Для тонкой настройки оповещений следует использовать пункт меню Настройка/действия(не является темой заметки). Интересующимся сюда .

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

  1. Добрый вечер! опишите пожалуйста подробно что куда вписывать
    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

    если не трудно с примером где есть постановка данных ( ну дял примера просто любые левые цифры символы)
    Заранее благодарю !

    ОтветитьУдалить
    Ответы
    1. Это содержимое файла zsender.sh, который длжен быть исполняемым и лежать в /usr/lib/zabbix/alertscripts.
      Если Вы имеете дело с Docker контейнером то лучше обратите внимание на более свежий вариант заметки - ссылка вверху статьи.

      Удалить
    2. вместо bot_token указываете токен, полученый при создании бота больше в скрипте ничего менять не нужно.
      Использовать скрипт из консоли можно таким образом:
      ./zsender.sh User_ID 'Test message' 'it is test message'
      где User_ID - User_ID получателя, а в кавычках заголовок и текст сообщения

      Удалить