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

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

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

Введение

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

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

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

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

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

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

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

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

  1. Установка CentOS 7.
  2. Настройка CentOS 7.
  3. Установка и настройка zabbix сервера.

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

  1. Установка Debian 9.
  2. Базовая настройка Debian 9.
  3. Установка и настройка zabbix на debian.

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

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

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

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

Мы создали бота для оповещений и получили для него 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 для отправки оповещений в 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 на отправку уведомлений в телеграм

Идем в web интерфейс zabbix и добавляем новый способ оповещений. Для этого переходим в раздел Администрирование -> Способы оповещений и создаем новый.

Добавление нового способа оповещения

Заполняем необходимые поля.

Параметры нового оповещения

В данном случае {ALERT.SENDTO}, {ALERT.SUBJECT} и {ALERT.MESSAGE} этот как раз наши параметры, которые мы будем передавать скрипту.

Добавим новый способ оповещения пользователю, для которого они будут добавляться. В моем примере только один пользователь администратор, ему я и добавлю. Для этого идем в раздел Администрирование -> Пользователи. Выбираем нужного пользователя и добавляем ему новый тип оповещений — Telegram.

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

В поле «Отправлять на» вводим свой Telegram ID. Все, этого достаточно, если у вас используются дефолтные настройки действий разделе Настройка -> Действия. По-умолчанию, там есть действие, которое отправляет администраторам при срабатывании любого триггера оповещение по всем указанным каналам связи.

Активация действия

Я обычно для проверки использую тестовый триггер, который срабатывает, если на сервер подключится по ssh 2 и более юзеров. Сделаю это на своем сервере и посмотрю результат. Когда триггер сработает, на дашборде будет информация.

Проверка срабатывания триггера

В телеграме бот пришлет уведомление.

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

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

Закрытие триггера

Скорее всего, вам не понадобится получать уведомления в телеграм на все события, которые происходят в системе. Вам нужно вручную настроить действия, на которые вы хотите получать уведомления. Для этого надо отредактировать дефолтное правило и оставить там только email оповещения. А для телеграма сделать отдельные действия.

Я покажу как это сделать на отдельном примере. Я оставил в дефолтном правиле уведомления только по email. В телеграм я буду получать сообщения только о срабатывании одного триггера. В данном случае это будет упоминаемый раньше тестовый триггер, срабатывающий на кол-во подключенных ssh пользователей. Вы можете выбрать абсолютно любой триггер из имеющихся в наличии.

Идем в Настройка -> Действия и создаем новое действие. На первой вкладке «Действие» указываем имя и условие срабатывания.

Создание нового действия

На вкладке «Операции» добавляем нужное действие. Я выбрал отправку сообщения всей группе администраторов zabbix.

Параметры действия

Это же действие продублировал для операций восстановления и подтверждения. Сохраняем действие и проверяем. Вы должны получить следующие оповещения:

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

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

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

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

  1. Создал 2 способа оповещения: Telegram private и Telegram group. Способ оповещения в группу telegram
  2. Добавил оба этих способа пользователю администратор, указав соответствующие ID. Параметры telegram id
  3. Добавил оба эти способа в Действия. Действие для отправки уведомления в группу
Хочу обратить внимание, что ID группы начинается с тире, например -288179672. Я этот момент упустил и долго не мог сообразить, почему в группу не отправляются оповещения. Не знал, что этот символ является неотъемлемой частью.

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

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

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

Речь идет вот об этом скрипте — https://github.com/ableev/Zabbix-in-Telegram. Скопируем себе исходники.

# cd /usr/src && git clone https://github.com/ableev/Zabbix-in-Telegram

Для его работы, как я уже сказал выше, у вас должен быть установлен в системе python версии 2.6.0. Именно такая версия указана у разработчика скрипта. У меня нормально работает на 2.7.5. Так же для работы необходим pip модуль requests. Если у вас его нет, то надо сначала установить pip:

# cd /usr/src && wget https://bootstrap.pypa.io/get-pip.py
# python get-pip.py

а потом и сам модуль:

# pip install requests

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

# -*- coding: utf-8 -*-

tg_key = "526250249:AAFtAqy4ln0BqK5vtU_9IoSlLduhtl8IaGg"  # 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://zabbix.server.ru/"  # zabbix server full url
zbx_api_user = "zerox"
zbx_api_pass = "password"
zbx_api_verify = False  # True - do not ignore self signed certificates, False - ignore

zbx_basic_auth = False
zbx_basic_auth_user = ""
zbx_basic_auth_pass = ""

proxy_to_zbx = None
proxy_to_tg = None

#proxy_to_zbx = "proxy.local:3128"
#proxy_to_tg = "proxy.local:3128"

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_wl_ids = [210806260, ]
zbx_tg_daemon_wl_u = ["zeroxzed", ]

zbx_db_host = "localhost"
zbx_db_database = "zabbix"
zbx_db_user = "zabbix"
zbx_db_password = "password"


emoji_map = {
    "OK": "✅",
    "PROBLEM": "❗",
    "info": "ℹ️",
    "WARNING": "⚠️",
    "DISASTER": "❌",
    "bomb": "?",
    "fire": "?",
    "hankey": "?",
}

Жирным я выделил те параметры, что нужно поменять. Вам необходимо указать token от бота, который мы ранее создавали, полный url адреса сервера с zabbix, учетную запись к нему. Лучше всего сделать отдельную учетку с доступом только на чтение. Она нужна для получения графиков. Так же вам нужно будет указать telegram id и логин. Они нам не понадобятся, так как мы не будем использовать локальную слежбу телеграма, но если поля оставить пустыми, то скрипт ругается на ошибку в конфиге. Поэтому заполняем своими данными. И в конце нужно будет указать параметры доступа к базе данных заббикса.

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

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

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

Проверка работы скрипта zbxtg.py

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

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

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

Идем в web интерфейс и добавляем 2 новых способа оповещения: один для приватных сообщений, второй для группы. Делаем все то же самое, что и раньше.

Добавление нового оповещения с помощью zbxtg.py

Я добавляю ключ —debug на время отладки, чтобы лог работы и картинки сохранялись в /var/tmp/. Это может быть полезно. Потом надо убрать. После этого добавляем новые способы оповещения пользователю. Все то же самое, что делали для первого способа.

Включение оповещения у пользователя

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

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

Шаблон операции

Тема по умолчанию {{WARNING}} Проблема: Превышено число SSH пользователей
Сообщение по умолчанию Последнее значение: {ITEM.VALUE1} ({TIME})
zbxtg;graphs
zbxtg;graphs_period=1800
zbxtg;itemid:{ITEM.ID1}
zbxtg;title:{HOST.HOST} — {TRIGGER.NAME}
Важность триггера: {TRIGGER.SEVERITY}
Host: {HOSTNAME} ({HOST.IP})
Описание:
{TRIGGER.DESCRIPTION}
  • {{WARNING}} — макрос для выставления иконки с восклицательным знаком
  • zbxtg;graphs — указывает, что будем отправлять график
  • zbxtg;itemid:{ITEM.ID1} — параметр автоматически определяет itemid для графика на основании информации об итеме в триггере, можно указать нужный itemid вручную
  • zbxtg;title — задает имя для заголовка графика

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

zbxtg;graphs включает отправку графиков
zbxtg;graphs_period=10800 период за который строится график
zbxtg;graphs_width=700 ширина графика
zbxtg;graphs_height=300 высота графика
zbxtg;itemid:{ITEM.ID1} выбор itemid для графика на основе триггера
zbxtg;title:{HOST.HOST} — {TRIGGER.NAME} заголовок графика
zbxtg;debug включает режим отладки, некоторая дополнительная информация сохраняется в tmp_dir
zbxtg;channel включает возможность отправки оповещения в telegram channel

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

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

Тема по умолчанию {{OK}} Решено: Превышено число SSH пользователей
 Сообщение по умолчанию  Server: {HOSTNAME} ({HOST.IP})
Описание:
Проблема устранена!
Время устранения проблемы: {DATE} {TIME}

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

Шаблон операции подтверждения

Тема по умолчанию {{OK}} Подтверждено: Превышено число SSH пользователей
 Сообщение по умолчанию {USER.FULLNAME} подтвердил проблему {ACK.DATE} {ACK.TIME} со следующим сообщением:
{ACK.MESSAGE}Текущее состояние проблемы {EVENT.STATUS}

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

Пример отправки графика из 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, то после выполнения скрипта никакого вывода не будет, а в телеграм будет отправлен выбранный график.

Отправка только графика в телеграм из заббикса

Можете теперь настраивать по своему усмотрению графики, триггеры, события с отправкой оповещений и графиков в telegram.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

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

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

Помогла статья? Есть возможность отблагодарить автора

81 комментарий

  1. Отличная статья!
    Огромное спасибо! Прикрутилось уведомление на телегу!
    Графики решил попозже сделать, но пока и этого более чем достаточно!

  2. спасибо!

  3. Дмитрий

    Как всегда хорошая статья, только вчера настроил по другому способу через Crier. Но Ваш гораздо интереснее.

    У меня Centos 6.5 phyton 2.7.5 zabbix 3.2.10 есть пару проблем:

    1. Скрипт отправки сообщений из консоли работает, но сам zabbix не отправляет хотя в отчете пишет, что уведомление отправлено.

    Все права на скрипт chown и chmod даны.

    2. при проверки на дебаг zbxtg.py вылезает ошибка

    File «/usr/lib/zabbix/alertscripts/zbxtg.py», line 717
    multiple_to = {i: [] for i in to_types}

    • Дмитрий

      Насчет второй проблемы вопрос решился, Centos новый python не увидел =)
      А вот с отправкой сообщений пока беда

      • Попробуй для теста запустить заббикс с правами рута. Там в конфиге есть такой параметр. И проверь.

        • Дмитрий

          Запустил через Allowroot=1 в zabbix_server.conf
          Не помогло.
          Все дело идет к тому, что настало время переселять zabbix на centos 7 и заодно новую версию ставить.

        • Привет, у меня такая же проблема. С терминала сообщения отправляются в telegram, а вот с самого zabbix нет, пишит что статус «отправлено». Версия zabbix 3.4.7
          Подскажи куда копать?

          • Вопрос снят. Нашел проблему. Случайно поставил пробел в функции {ALERT.SENDTO}
            Так что если у вас возникнет проблема, ищите пробелы 😉 либо, есть способ понять что происходит, в скрипте дописываем функцию:

            echo «$CHAT_ID» > /tmp/testzbb
            echo «$SUBJ» >> /tmp/testzbb
            echo «$MESSAGE» >> /tmp/testzbb
            echo «TEST» >> /tmp/testzbb

            в директорие /tmp/testzbb смотрим события .

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

            TOKEN=»ваш токин»
            CHAT_ID=»$1″
            SUBJ=»$2″
            MESSAGE=»$3″

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

            curl -s -X POST $URL -d chat_id=$CHAT_ID -d text=»$MESSAGE» -d subj=»$SUBJ»

  4. Андрей

    Настроил оповещения без графиков, работает только на пользователя, на группу не хочет. Хотя тире ставлю.

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

  5. Было бы круто, чтобы можно получить график по запросу
    Отправил команду боту, он тебе в ответ график 🙂

    Вообще из Zabbix скриптом каким-нибудь внешним есть возможность графики вытягивать — по itemid например?

  6. Николай

    Попробовал прикрутить скрипт к Zabbix 4.0pre вот такие результаты:
    При выполнении скрипта выходит ошибка: {«ok»:false, «error_code»:404, «description»:»Not Found»}

    Пробовал сделать так:
    /usr/bin/curl -s «https://api.telegram.org/bot${token}/sendMessage?chat_id=${chat}&text=${subj}\n${message}»

    При таком подходе скрипт отрабатывает, но при передаче параметров в скрипт из заббикса — сообщения не отправляются

    • Николай

      Да при этом сообщение приходит вот в таком виде: Test\nTest script.
      т.е форматирование не применяется

  7. При попытке отправить в групповой чат, выходит такая ошибка
    zbxtg.py: You need start a conversation with your bot first in ‘namegroup’ group chat, type ‘/start@NameBot’
    в личку нормально шлет, не могу понять — с чем может быть связно?
    в чате /start@NameBot писал, бесполезно.

    • Все, разобрался. Надо писать название группы, а я идентификатор ее писал 🙂

  8. Здравствуйте автор!
    Спасибо большее за Ваши статьи, очень помогают как начинающему сис админу.
    Вынужден заметить, что натолкнулся на проблему:
    «zbxtg.py: User ‘*********’ needs to send some text bot in private» — после выполнения файла. Решение это правка скрипта в этом же файле «zbxtg.py». При выполнении данного скрипта возникает ошибка проверки имени, по-скольку некоторые пользователи не имеют «uid Telegram».

    По сему по всему нужно убрать строки с куска функции get_uid:
    if «username» in chat: if chat[«username»] == name: uid = chat[«id»] оставив только uid = chat[«id»]. Всех благ жду от Вас The Dude.

  9. Добрый день!Спасибо за статью,у меня скрипт работает,но вместо одного события шлет 3,все оповещения затраиваются.С чем это может быть связано? Добавлены 3 пользователя и всем трем шлет по 3 оповещения

    • Надо раздел «Действия» смотреть и вникать в то, что там настроено. Все оповещения там.

  10. Ростислав

    в чем может быть проблема? сделал все так как в статье по телеграмму отправляю старт и не приходит ид чата

  11. Ростислав

    https://www.shellhacks.com/ru/telegram-api-send-message-personal-notification-bot/

    Кому цікаво ось по телеграму стаття

  12. Алексей

    Добрый день.
    Нужна помощь по настройке данной радости на zabbix 3.4 в docker.

    Изначально скрипт не срабатывает, ссылаясь на строку 8 в telegram.sh, со словами

    /usr/lib/zabbix/alertscripts/telegram.sh: line 8: /usr/bin/curl: No such file or directory

    что логично, ибо в контейнере любые сервисы отсутсвуют и курла нет.

    2й же метод сообщает

    Traceback (most recent call last):
    File «/usr/lib/zabbix/alertscripts/zbxtg.py», line 9, in
    import requests
    ImportError: No module named requests

    до сюда еще руки не дошли.

    т.к дефолтная ветка забикса для докера построена на linux alpine, там нет даже apt. Так что ставить курл нечем и этот путь слишком трудозатратный. Сначала нужно просто заставить работать.
    Это все мысли в слух, вдруг кому симптомы помогут.

    Заменил имидж сервера на ветку ubuntu-3.4-latest, установил курл внутрь контейнера. Питон там уже есть.
    способ временный, не суть важно.

    docker exec ID bash -c «apt update && apt install -y curl»

    Теперь ошибка следующая:
    Process exited with code: 60.

    2й метод не работает все с тем же выводом. —debug я на нем включил, но в логах пусто.

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

    а еще на сайте регистрация не работает=)

    • А в чем смысл запуска заббикса в докере? Не улавливаю. Это постоянные проблемы и неудобства.

  13. Приветствую, всё сделал из CLI работает.
    Журнал действий утверждает, что всё ок, но нет сообщений. Как это дело в заббиксе отладить?
    Спасибо за статью!

  14. Привет, попробовал этот скрипт на freebsd, не запускается, отбивает /usr/local/etc/zabbix22/zabbix/externalscripts/telegram.sh: Command not found. Или на фряхе он не работает?

    • Я так думаю, во фряхе путь к утилите curl будет другой. Именно об этом у тебя ошибка.

  15. Добрый день, спасибо за статью, все работает.
    # /usr/lib/zabbix/alertscripts/telegram.sh № Тест ‘Проверяю отправку оповещений ботом’ — приходит корректно, но при оповещении из zabbix вида Resolved: Service «Имя службы»….. обрезается оповещение до символа » , возможно поправить как-нибудь скрипт для отправки «?

    • Конечно, можно править, но надо тестировать. У меня без проблем, все работает как и должно.

  16. Добрый день! У меня почему то на SSL ругается…
    curl -v —header ‘Content-Type: application/json’ —request ‘POST’ —data ‘{«chat_id»:»215021143″,»text»:»Проверяю отправку оповещений ботом»}’ «https://api.telegram.org/bot548010018:AAHJ0OYoUJ_QhN3cU8LIx5yj6TmNYuY8nZk/sendMessage»
    Note: Unnecessary use of -X or —request, POST is already inferred.
    * Trying 149.154.167.220…
    * TCP_NODELAY set
    * Connected to api.telegram.org (149.154.167.220) port 443 (#0)
    * ALPN, offering h2
    * ALPN, offering http/1.1
    * successfully set certificate verify locations:
    * CAfile: /etc/ssl/certs/ca-certificates.crt
    CApath: /etc/ssl/certs
    * TLSv1.2 (OUT), TLS handshake, Client hello (1):
    * OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to api.telegram.org:443
    * stopped the pause stream!
    * Closing connection 0
    curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to api.telegram.org:443

    ОС Ubuntu 18.04

    • Надо разбираться с конкретной ошибкой — OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to.
      Чаще всего ошибки с ssl лежат на поверхности — неправильная дата и время на сервере.

  17. Добрый день,не могли бы помочь в чем может быть проблема?

    zbxtg.py: Conflict: can’t use getUpdates method while webhook is active
    Traceback (most recent call last):
    File «/usr/lib/zabbix/alertscripts/zbxtg.py», line 888, in
    main()
    File «/usr/lib/zabbix/alertscripts/zbxtg.py», line 767, in main
    uid = tg.get_uid(zbx_to)
    File «/usr/lib/zabbix/alertscripts/zbxtg.py», line 176, in get_uid
    for m in updates[«result»]:
    KeyError: ‘result’

    • Как показывают отзывы, ошибки все либо при копировании возникают, либо где-то еще из-за невнимательности. Надо проверять аккуратно все. Статья рабочая, сам по ней настраиваю.

  18. Что то отвалилось?
    Ubuntu 16.04 x86
    Бот создан, свой ID получил, ID группы тоже

    root@fox-vd:~# curl —header ‘Content-Type: application/json’ —request ‘POST’ —data ‘{«chat_id»:»0000000″,»text»:»Проверяю отправку оповещений ботом»}’ «https://api.telegram.org/botXXX:XXX»

    502 Bad Gateway

    502 Bad Gateway
    nginx/1.12.2

  19. Добрый день! Спасибо за отличную статью! Все классно работает. Однако, у меня куча хостов, и просто теряешься посмотреть кто поднялся или опустился, если что вдруг. Могли бы вы подсказать, как сделать так чтобы можно было сделать запрос у заббикса о всех хостах, чтобы я мог одним сообщением отправлять их ботом?

    • Это совсем другая логика работы и надо все делать с нуля и по-другому. А зачем в telegram отправлять все оповещения? Отправляйте только то, что реально нужно.

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

  20. Добрый день, можете подсказать, что нужно сделать, чтобы заббикс отправлял на русском языке оповещения? А то если меняешь слова «trigger» на русский язык, то он их сохраняет вопросами. Рус. лок стоит на ubuntu. Из самой системы на русском отправляются сообщения.

  21. Есть мысли как настроить оповещения через Телеграм после блокировки? Как прикрутить прокси в скрипт?

    • Он и так работает.

    • В скрипте уже все есть, надо только раскомментировать в кофниге параметры с proxy и указать сервер.

      • Посоветуйте годный прокси сервер, пробовал отсюда http://spys.one/proxys/DE/ не помогает, ругается.

        • Подскажите пожалуйста раскоментированию подлежат строка: #proxy_to_tg = «proxy.local:3128» ? или эту тоже нужно? #proxy_to_zbx = «proxy.local:3128» Я так понимаю приватную проксю сюда нельзя закинуть (с логином и паролем)? и всеравно пока не работает( У вас получилось?

  22. Maksim Isaev

    Обновите скрипт https://github.com/ableev/Zabbix-in-Telegram
    там добавлена поддержка прокси sock5

  23. Главная проблема — найти рабочий sock5
    проверить прокси можно так
    curl -IL —socks5 host:port —proxy-user username:password https://api.telegram.org

    но из кучи публичных пока не один не подошел((

  24. Руслан

    У кого то получилось подключить оповещение обратно?

  25. Было бы здорово намутить здесь коротенькую инструкцию как включить прокси у бота в телеграмме, потому что этот сайт выпадает первым в поиске когда ищешь zabbix bot telegram proxy!)

    • Если не сложно. Опешите подробно, что нужно сделать что бы подключить прокс. Где , что, раскоментировать. Где , что, скачать.

  26. /usr/bin/curl -s —header ‘Content-Type: application/json’ —request ‘POST’ —data «{\»chat_id\»:\»${chat}\»,\»text\»:\»${subj}\n${message}\»}» —proxy ‘socks5://telegram.vpn99.net:55655’ «https://api.telegram.org/bot${token}/sendMessage»

    • Александр

      Прокси это хорошо конечно, но где теперь уверенность что и его не заблочат, придётся теперь вк что ли подключать

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

        • Есть ли рабочий вариант для whatsapp или viber? Куда еще можно высылать оповещения?
          Еще заметил сообщения о проблеме или задваиваются или не приходят, а приходят только решения проблемы. В действиях все ок так как в почту все приходит корректно, грешу на работу прокси.

  27. У меня с прокси работает но надо искать работающие прокси
    Вот проблема графики не выводятся хотя в самих триггерах они есть

  28. Не приходят графики(
    $ sudo -u zabbix /usr/lib/zabbix/alertscripts/zbxtg.py мое_имя test «$(echo -e ‘zbxtg;graphs: \nzbxtg;graphs_period=3600\nzbxtg;itemid:2419\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 тот что в письме приходит, график для этого события есть

    • zbx_api_user и zbx_api_pass прописывал и администраторский и только для чтения.
      bx_db_database, zbx_db_user, zbx_db_password — тоже правильные

  29. Дрюбзик

    Не вкурю, зачем оповещения в «телегу», если есть sms+ mail? Есть инет = отправляем на почту, что-то серьезное тогда СМС!

    • Я сам для себя тоже не пользуюсь уведомлениями в телеграм. Мне достаточно почты. Тут удобство, как мне видится, именно в отправке в группы. Там же можно сразу ответить для всех разом. Для работы коллектива это удобно. Для одного особо нет смысла.

  30. День добрый.
    При тестировании запроса на Ubuntu 16.04 получаю следующее:
    curl: (35) gnutls_handshake() failed: Error in the push function.
    Не подскажите, в какую сторону рыть?

  31. команда:
    curl —header ‘Content-Type: application/json’ —request ‘POST’ —data ‘{«chat_id»:»————-«,»text»:»TEST»}’ «https://api.telegram.org/bo——————————-/sendMessage»

    выбрасывает ошибку:
    {«ok»:false,»error_code»:401,»description»:»Unauthorized»}

  32. Здравствуйте, в какую сторону ковать, чтобы алерты веб-мониторинга так же в телеграмм сыпались?

  33. Дмитрий

    /usr/lib/zabbix/alertscripts/telegram.sh 210806260 Тест ‘Проверяю отправку оповещений ботом’

    Скрипт из консоли отрабатывает, а в заббиксе пишет не удачная отправка и ошибка «Process exited with code: 35»

    Не пойму что за хрень

  34. Дмитрий

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

    curl -s -X POST https://api.telegram.org/токен моего бота/sendMessage -d chat_id=359999656 -d text=»Hello World»

    https://api.telegram.org/токен моего бота/sendMessage?chat_id=359999656&text=Hello%20World

    • Дмитрий

      все разобрался, не идет отправка на api.telegram.org с впски которая за бугром все работает, провайдер блочит отправку

  35. Может подскажет кто, как в скрипте настроить, чтобы через прокси обращение шло к api.telegram.org

    #!/bin/bash

    token=’452128666:AAF—WM1k-DbmSQigXZpXDmN8KbRbwD_kmU’
    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»

  36. Народ поделитесь готовым скриптом с прокси , пытаюсь добавить вот этот параметр —socks5 ServerProxy:8080 -U user:password у меня ругается на синтаксис, и главное везде пишут по разному, у кого заработало скиньте плиз.

  37. Дмитрий

    Спасибо за отличную статью ! Все сделал, все работает ! НО
    Сообщение приходят в урезанном виде

    OK: Serice или Problem:Service

    То есть какой сервис не видно. На почту приходит все нормально. В чем может быть проблема ?

  38. Александр

    Спасибо! На Ubuntu заработала всё сразу.
    Но спустя пару дней стало приходить криво — :
    Но не всегда криво — кажем сегодня пришло около 7 уведомленй подряд в телеграмм нормально. А потом снова «Problem: Service» как будто не справляеться с «наплывом» когда скрипту одновременно передают данные несколько триггеров.
    [05.08.18 14:08]
    Resolved: SBS4 has just been restarted
    Problem has been resolved at 14:08:35 on 2018.08.05
    Problem name: SBS4 has just been restarted
    Host: SBS4
    Severity: Average

    Original problem ID: 54730

    [05.08.18 14:09]
    Problem: Service

    [05.08.18 14:09]
    Problem: Service

    [05.08.18 14:09]
    Problem: Service

    [05.08.18 14:09]
    Problem: Service

    [05.08.18 14:09]
    Problem: Service

    [05.08.18 14:09]
    Problem: Service

    [05.08.18 14:09]
    Problem: Service

    [05.08.18 14:09]
    Problem: Service

    [05.08.18 14:09]
    Problem: Service

    Ва

  39. Привет, а у меня трабл такой:
    Centos 7 + zabbix 3.4, всё настроено по мануалу, но когда срабатывает триггер, то заббикс делает вот это:

    command:’/usr/lib/zabbix/alertscripts/telegram.sh ‘-140034388’ ‘Исправлено: Zabbix agent на Виртуалка с докером недоступен 5 минут’ ‘Проблема решилась в 16:39:17 2018.08.09

    Сообщение кавычкой не закрывает, поэтому оно не отправляется, как тут быть?

  40. Пока ещё не забыл всё. Напишу как я решил проблему со своего прошлого коммента.
    Заббикс пришлось переустановить т.к. я намудрил с макросами.
    В чистом исполнении сделал всё по этому ману, но при срабатывании триггера скрипт не отрабатывал, в ошибку писал, мол таймаут.
    Таймаут был т.к. скрипт обращается на апи телеграма, который у нас забанен роскомнадзором 🙂
    Это я предусмотрел заранее, но упустил из вида, что скрипты из заббикса выполняются от его имени ( я писал .curlrc, в который прописывал socks5 прокси ).
    По- умолчанию у zabbix выставлен nologin и домашняя директория где- то в /usr/lib
    Я дал заббиксу домашний каталог и баш:
    mkdir /home/zabbix
    chmod -R 777 /home/zabbix
    chown -R zabbix:zabbix /home/zabbix
    Положил туда curlrc
    nano /home/zabbix/.curlrc
    с таким содержимым:
    socks5 = proxyip:port
    proxy-user = user:password
    user-agent = «Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1»
    и сменил хоум и прописал баш заббиксу
    nano /etc/passwd
    Строчку с заббиксом привел к такому виду:
    zabbix:x:997:995:Zabbix Monitoring System:/home/zabbix:/bin/bash
    В итоге всё работает ( через прокси ).
    Донаты принимаю пивом.
    Раздел про проксю в ман впиши.

    • Дмитрий

      Ради интереса всё сделал как Роман написал, в итоге заббикс не запускается если родную строчку «zabbix:x:998:996:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin» менять на «zabbix:x:997:995:Zabbix Monitoring System:/home/zabbix:/bin/bash»

      Ошибка такая:
      Redirecting to /bin/systemctl start zabbix-server.service
      Job for zabbix-server.service failed because a configured resource limit was exceeded. See «systemctl status zabbix-server.service» and «journalctl -xe» for details.

      • А я сервер ребутнул, что бы наверняка проверить.
        У меня пути, который был прописан для заббикс не существовало, потому я и сменил его на /home/
        Но если он существует, то .curlrc лучше положить туда и вместо nologin прописать /bin/bash

Добавить комментарий

Ваш e-mail не будет опубликован.

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