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

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

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

Если у вас есть желание научиться администрировать системы на базе Linux, рекомендую познакомиться с онлайн-курсом «Linux для начинающих» в OTUS. Курс для новичков, для тех, кто с Linux не знаком. Подробная информация.

Введение

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

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

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

  • Использовать встроенный webhook в zabbix.
  • Написать свой простой скрипт для уведомлений.
  • Взять готовую реализацию уведомлений в telegram на github.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Отправка уведомлений в telegram через webhook

Начиная с 5-й версии, в Zabbix из коробки работают уведомления в telegram через механизм webhook. Чтобы настроить его, переходите в Администрирование -> Способы оповещений и выбирайте там Telegram.

Отправка уведомлений в telegram через webhook

Если у вас нет этого шаблона оповещения, то вы можете скачать его самостоятельно из официального репозитория Zabbix в разделе /templates/media/telegram/. Шаблон будет отсутствовать, если вы обновляли сервер с более ранних версий. При обновлениях новые шаблоны автоматически не добавляются. Вам нужно вручную скачать исходный код шаблона в текстовом формате yaml и импортировать его на свой сервер. Выбрать версию шаблона нужно такую же, как ваш сервер. По умолчанию в репозитории скачивается шаблон последней версии из ветки master. Вам нужно выбрать свою через выбор ветки репозитория, например, release/6.0.

Шаблон для оповещений в Telegram

Внутри шаблона увидите некоторые параметры. Можно так же посмотреть текст скрипта, который используется для отправки оповещений. В целом, тут сейчас не обязательно что-то менять. Дефолтные настройки полностью рабочие. Надо только указать токен бота.

Настройка токена бота

Тут же можете шаблоны поправить так, как вам нравится. Это нововведение 5-й версии Zabbix - правка шаблонов оповещений в настройках самих оповещений. Это позволяет создавать для каждого типа свои шаблоны. Очень удобно. Я люблю добавлять в заголовки emoji, что-то переводить или добавлять новые макросы. Как минимум, всегда добавляю в заголовок имя хоста через макрос {HOST.NAME}.  Получается примерно так:

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

Давайте теперь проверим отправку уведомлений через этот способ. Нажимайте Тест.

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

Я указал текст сообщения, заголовок, свой id и token бота. В итоге мне в личку пришло сообщение от бота.

Проверочное сообщение

Если хотите отправить оповещение в группу, то сначала создайте ее, а потом добавьте туда бота. Не потеряйте минус в id группы. Его тоже нужно указывать. Я сначала не понял этого и копировал id группы без минуса. В итоге, оповещения в группу не отправлялись.

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

Итак, убедились, что сообщения в telegram нормально отправляются. С технической стороны проблем нет. Теперь настроим отправку уведомлений по событиям. Я обычно для этого использую тестовый триггер. В стандартном шаблоне Linux by Zabbix agent  есть элемент данных Number of logged in users, который считает количество залогиненных пользователей. Я для него делаю триггер, чтобы он срабатывал, когда пользователей 2 и более. И с его помощью тестирую уведомления, просто подключаясь на сервер по ssh двумя подключениями одновременно.

Проверочный триггер

Выражение триггера:

last(/Zabbix server/system.users.num)>1

Теперь идем в настройки пользователя и добавляем ему способ оповещений через Telegram.

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

Если у вас ранее не работали никакие уведомления, то не забудьте активировать действия через НастройкаДействияДействия триггеров.

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

У нас всё настроено для отправки оповещений в Telegram. Добейтесь срабатывания триггера и проверяйте Телеграм канал, в который настроили отправку сообщений.

Проверка работы уведомлений в telegram

Сообщение от триггера

Все работает. Если вам достаточно такого функционала, то можно оставлять и пользоваться. Но как по мне, так бледновато эти уведомления выглядят. Можно немного шаблоны изменить, чтобы было более читаемо. Так же есть возможность всё настроить более красиво и наглядно, да еще и с графиками. Дальше я расскажу еще 2 разных способа отправки уведомлений из zabbix в telegram с графиками и готовыми ссылками на события.

Настройка Zabbix на отправку графиков в Telegram

Для отправки графиков в telegram предлагаю воспользоваться известным скриптом на Python - https://github.com/ableev/Zabbix-in-Telegram. Пользуясь случаем, передаю благодарность автору за его создание. Копируем исходники себе.

# cd ~
# git clone https://github.com/ableev/Zabbix-in-Telegram

Нам нужно будет установить несколько модулей python, перечисленные в requirements.txt. Для этого нам понадобится pip. Ставим его и модули.

# dnf install python3-pip
# cd Zabbix-in-Telegram/
# pip3 install -r requirements.txt

Установка модулей python

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

# chown -R zabbix. /usr/lib/zabbix/alertscripts

Приводим содержимое zbxtg_settings.py примерно к такому виду.

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

tg_key = "1393668911:AAHtEDfgHJHYDVDwxKfvH1WR6-vdNw"  # 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://127.0.0.1/zabbix/"  # zabbix server full url
zbx_api_user = "Admin"
zbx_api_pass = "zabbix"
zbx_api_verify = True  # True - do not ignore self signed certificates, False - ignore

#zbx_server_version = 2  # for Zabbix 2.x version
#zbx_server_version = 3  # for Zabbix 3.x version, by default, not everyone updated to 4.x yet
zbx_server_version = 4  # for Zabbix 4.x version, default will be changed in the future with this

zbx_basic_auth = False
zbx_basic_auth_user = "zabbix"
zbx_basic_auth_pass = "zabbix"

proxy_to_zbx = None
proxy_to_tg = None

# proxy_to_zbx = "http://proxy.local:3128"
# proxy_to_tg = "https://proxy.local:3128"

# proxy_to_tg = "socks5://user1:password2@hostname:port" # socks5 with username and password
# proxy_to_tg = "socks5://hostname:port" # socks5 without username and password
# proxy_to_tg = "socks5h://hostname:port" # hostname resolution on SOCKS proxy. 
                                          # This helps when internet provider alter DNS queries.
                                          # Found here: https://stackoverflow.com/a/43266186/957508

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_enabled_ids = [6931850, ]
zbx_tg_daemon_enabled_users = ["ableev", ]
zbx_tg_daemon_enabled_chats = ["Zabbix in Telegram Script", ]

zbx_db_host = "localhost"
zbx_db_database = "zabbix"
zbx_db_user = "root"
zbx_db_password = "123"


emoji_map = {
    "Disaster": "🔥",
    "High": "🛑",
    "Average": "❗",
    "Warning": "⚠️",
    "Information": "ℹ️",
    "Not classified": "🔘",
    "OK": "✅",
    "PROBLEM": "❗",
    "info": "ℹ️",
    "WARNING": "⚠️",
    "DISASTER": "❌",
    "bomb": "💣",
    "fire": "🔥",
    "hankey": "💩",
}

Жирным я выделил те параметры, что нужно поменять. Вам необходимо указать token от бота, который мы ранее создавали, полный url адреса сервера с zabbix. Обратите внимание на этот урл. Не факт, что у вас по localhost/zabbix/ будет открываться web интерфейс Zabbix. Это зависит от настроек Web сервера. Лично я указал просто http://localhost. Дальше указываете учетную запись мониторинга. Лучше всего сделать отдельную учетку с доступом только на чтение. Она нужна для получения графиков. И в конце нужно будет указать параметры доступа к базе данных заббикса. При желании, можете и иконки emoji изменить. Я меняю местами PROBLEM и WARNING. Желтый треугольник на проблемах смотрится более наглядно.

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

zbxtg.py: User 'zeroxzed' needs to send some text bot in private

Проверим из консоли работу скрипта.

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

Если получите ошибку:

/usr/bin/env: ‘python’: No such file or directory

то откройте скрипт и в самом начале вместо python напишите python3:

#!/usr/bin/env python3

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

Проверка скриптаА в консоли появится примерно такой вывод.

Работа скрипта по отправке сообщений в консоли

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

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

Обращаю внимание на команду выше. Многие путают правильное написание и в итоге получают сообщение:

zbxtg.py: User 'serveradmin_zabbix_group' needs to send some text bot in private

Эту ошибку вы увидите, если вместо имени группы напишите её ID. Тут писать нужно именно название группы и без @ в начале. И в конце команды не забудьте добавить ключ --group.

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

Идем в web интерфейс и добавляем 2 новых способа оповещений с помощью скрипта. Один для персональных сообщений, второй для групповых. Во втором случае надо добавить ключ --group, все остальное идентичное.

Оповещения в приват телеграма

Уведомления в telegram group

Так же нам нужно настроить шаблоны оповещений. Я предлагаю следующий вариант. Тип сообщений Проблема.

Тема по умолчанию {{WARNING}} {HOST.NAME} - {TRIGGER.STATUS}: {TRIGGER.NAME}
Сообщение по умолчанию Последнее значение: {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}} - макрос для выставления иконки emoji с восклицательным знаком
  • zbxtg;graphs - указывает, что будем отправлять график
  • zbxtg;itemid:{ITEM.ID1} - параметр автоматически определяет itemid для графика на основании информации об итеме в триггере, можно указать нужный itemid вручную
  • zbxtg;title - задает имя для заголовка графика

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

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
zbxtg;to:username1,username2,username3 можно сразу в шаблоне указать, кому будут отправляться оповещения
zbxtg;to_group:Group то же самое, что выше, только для групп

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

Тема по умолчанию {{OK}} {HOST.NAME} - {TRIGGER.STATUS}: {TRIGGER.NAME}
Сообщение по умолчанию Server: {HOSTNAME} ({HOST.IP})
Описание:
Проблема устранена!
Время устранения проблемы: {DATE} {TIME}

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

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

Тема по умолчанию {{OK}} {HOST.NAME} - {TRIGGER.STATUS}: {TRIGGER.NAME}
Сообщение по умолчанию {USER.FULLNAME} подтвердил проблему {ACK.DATE} {ACK.TIME} со следующим сообщением:
{ACK.MESSAGE}Текущее состояние проблемы {EVENT.STATUS}

Шаблон обновления

Разные оповещения о разных событиях

Далее показываю на примере, как можно слать уведомления в личку и в группу, одновременно и по отдельности, в зависимости от настроенных условий. По каким-то действиям пишем в личку, по каким-то в группу. Достаточно просто сделать 2 отдельных пользователя для этого. Одному настроить в качестве способа оповещений личные сообщения, а второму указать группу. Затем в действиях, указывая, какому пользователю отправлять сообщение, выбирать способы уведомлений.

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

Создание группы в zabbix

Если учетка техническая, только для оповещений, то доступ к веб интерфейсу можно не делать. Даём ей права доступа на чтение только к группе Zabbix servers, так как будем слать уведомления только по триггерам этого хоста.

Права доступа группы

Теперь добавляем пользователя и помещаем его в эту группу.

Добавление пользователя в zabbix

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

Настройка оповещений в telegram группу

Так же добавим персональные уведомления Telegram пользователю admin. Здесь уже указываем id учетной записи .

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

Настраиваем действия. В данном примере я делаю отправку всех уведомлений пользователю Admin, у которого в способах оповещений указана личка telegram. А сообщения по конкретному триггеру Zabbix server: Zabbix agent is not available (for 3m) пользователю tg-group, у которого указана группа telegram.

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

Думаю, идею вы поняли. Можно очень гибко настроить уведомления в Zabbix и это очень круто и удобно. И работает из коробки. Проверим теперь, как будут выглядеть оповещения в telegram. Останавливаем на сервере zabbix-agent и ждем работы триггера с оповещениями.

Проверка работы уведомлений в telegram

Проверяем Телеграм и видим там одинаковые уведомления и в группе, и в личке.

Сообщение от zabbix в группу

После обновления проблемы или закрытия, придут свои оповещения.

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

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

Оповещения в telegram со ссылками на график и триггер

Расскажу про еще один интересный скрипт для отправки красивых и функциональных оповещений в telegram, в котором помимо всего прочего сразу же публикуются ссылки на триггер, график и некоторые другие полезности. Вот он на гитхабе - https://github.com/xxsokolov/Zabbix-Notification-Telegram. Инструкция от автора в некоторых местах не очень понятная, так что я немного повозился, прежде чем все получилось. В основном c xml были проблемы, но обо всем по порядку.

Клонируем к себе репозиторий.

# cd ~
# git clone https://github.com/xxsokolov/Zabbix-Notification-Telegram

Копируем в /usr/lib/zabbix/alertscripts папку zbxTelegram_files и файлы _config.yml, zbxTelegram.py, .requirements и zbxTelegram_config.example.py. Последний переименовываем в zbxTelegram_config.py.

Делаем пользователя zabbix владельцем этих файлов и разрешаем исполнение скрипта.

# chown -R zabbix. /usr/lib/zabbix/alertscripts
# chmod +x zbxTelegram.py

Автор скрипта предлагает запускать его в виртуальном окружении, поэтому поставим пакет virtualenv.

# dnf install virtualenv

Переходим в /usr/lib/zabbix/alertscripts, создаем виртуальное окружение и активируем его.

# cd /usr/lib/zabbix/alertscripts
# virtualenv venv --python=python3
# source venv/bin/activate

Ставим зависимости и деактивируем окружение.

# pip install -r .requirements
# deactivate

Установка зависимостей скрипта

Редактируем конфигурационный файл zbxTelegram_config.py. Список параметров, которые нужно поменять.

tg_proxy = False
tg_token = '1393668911:AFGHTRDVdfJ28R-wxKfvH1RTR6-vdNw'
zabbix_api_url = 'http://10.20.1.23/zabbix/'
zabbix_api_login = 'Admin'
zabbix_api_pass = 'zabbix'

В url на конце должен обязательно быть слеш. Дальше делаем всё то же самое, что и ранее. Идем в Способы оповещений и добавляем новый тип, где в качестве скрипта указываем zbxTelegram.py.

Оповещения в telegram со ссылками

Шаблоны тем сообщений можете настроить как вам больше нравится. Автор предлагает такие:

{Problem} {TRIGGER.SEVERITY} {{TRIGGER.SEVERITY}}: {EVENT.NAME}
{Resolved} {TRIGGER.SEVERITY} {{TRIGGER.SEVERITY}} {EVENT.NAME}
{Update} {TRIGGER.SEVERITY} {{TRIGGER.SEVERITY}} {EVENT.NAME}
  • {Problem} - мапинг значений Problem\Resolved\Update в emoji (config: zabbix_status_emoji_map)
  • {{TRIGGER.SEVERITY}} - мапинг значений Severity в emoji (config: zabbix_status_emoji_map)

В поле Сообщение копируется xml конфиг полностью, который приведен в файле actions.example. Копируйте его 1 в 1.

Типовой шаблон оповещений через скрипт

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

  • <graphs></graphs> - прикреплять график (True\False)
  • <graphlinks>True</graphlinks> - прикрепить ссылку url на History (True\False)
  • <triggerlinks>True</triggerlinks> - прикрепить ссылку url из триггера (True\False)
  • <tag>True</tag> - прикрепить теги (True\False)
  • <graphs_period></graphs_period> - период графика в секундах
  • <itemid></itemid> - передача itemid {ITEM.ID1}
  • <triggerid></triggerid> - передача triggerid {TRIGGER.ID}
  • <eventid></eventid>- передача eventid {EVENT.ID}
  • <title></title> - заголовок графика {HOST.HOST} - {EVENT.NAME}
  • <triggerurl></triggerurl> - передача url из триггера {TRIGGER.URL}
  • <tags></tags> - передача списка тэгов из триггера {EVENT.TAGS}

Проверим работу уведомлений. Сначала через консоль.

# ./zbxTelegram.py @serveradmin_zabbix_group test test

В данном случае слова test менять нельзя. Именно они инициируют отправку тестового сообщения. Вот как оно выглядит.

Уведомление из zabbix в telegram с графиком и ссылками

То же самое можно сделать через web интерфейс.

Проверка отправки

Если всё в порядке, подключайте данный тип уведомлений к пользователю, указывайте его в действиях и проверяйте. Уже не буду это подробно описывать, так как устал. Материал и так очень объемный получился. В итоге уведомления в Телеграме от этого скрипта будут выглядеть вот так:

Прпимер сообщения в телеграме

Текст более информативен по дефолту и выглядит приятнее, графики в одном сообщении с текстом. В последней строке есть готовые ссылки на триггер, историю по айтему. Только имейте ввиду, что url для ссылок берется из конфига и если у вас там указан localhost, то только с него и можно будет их посмотреть. Так что указывайте внешний, а не локальный url. Из минусов отмечу тоненькие графики без заливки. В скрипте от ableev они более наглядные.

Заключение

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

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

Себе я шлю оповещения в Telegram только для тех событий, на которые нужна немедленная реакция. Их на самом деле не так много. Если у вас их много, я вам искренне сочувствую. Лучше сделать так, чтобы их было как можно меньше, а в идеале не было совсем. Жизнь будет комфортнее.

Если у вас есть желание научиться администрировать системы на базе Linux, но вы с ними никогда не работали и не знакомы, то рекомендую начать с онлайн-курса «Linux для начинающих» в OTUS. Курс для новичков, для тех, кто с Linux не знаком. Цена за курс минимальная (символическая). Информация о курсе и цене.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

417 комментариев

  1. Владимир

    Всем привет. Не могу установить графики на Debian 12.
    root@zabbix:~/Zabbix-in-Telegram-master# pip3 install -r requirements.txt
    error: externally-managed-environment

    × This environment is externally managed
    ╰─> To install Python packages system-wide, try apt install
    python3-xyz, where xyz is the package you are trying to
    install.

    If you wish to install a non-Debian-packaged Python package,
    create a virtual environment using python3 -m venv path/to/venv.
    Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
    sure you have python3-full installed.

    If you wish to install a non-Debian packaged Python application,
    it may be easiest to use pipx install xyz, which will manage a
    virtual environment for you. Make sure you have pipx installed.

    See /usr/share/doc/python3.11/README.venv for more information.

    note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
    hint: See PEP 668 for the detailed specification.

    Как решить проблему?

    • Можно попробовать вот так:
      pip3 install -r requirements.txt --break-system-packages
      Вам выдано предупреждение, что пакеты python лучше устанавливать через apt, а не pip. В принципе, можно через apt и поставить, нужно только их названия найти. Они могут не совпадать с тем, что ставится через pip.

  2. а можно как-то вместо отправки текстового сообщения _инициировать с консольки звонок в телеграм ?

  3. Добрый день! Неделю назад перестал отправлять сообщения. Хотя 9 месяцев отработал.
    Ошибка
    00:00:00.000 [Debug] [Telegram Webhook] URL: https://api.telegram.org/bot/sendMessage
    00:00:00.000 [Debug] [Telegram Webhook] params: {"chat_id":"-995920443","text":"{ALERT.SUBJECT}\n{ALERT.MESSAGE}","disable_web_page_preview":true,"disable_notification":false}
    00:00:05.013 [Debug] [Telegram Webhook] notification failed: Error: cannot get URL: Couldn't connect to server.

    Может кто подсказать ?

  4. Николай

    Подскажите, как настроить отправку уведомлений в одну из тем группы?

    • Я не делала такое ни разу, поэтому не подскажу. Надо смотреть API запрос для отправки в тему, и использовать его в скриптах.

  5. может кто знает как в скрипте xxsokolov/Zabbix-Notification-Telegram в сообщениях делать текст выделенным шрифтом?
    в стандартном скрипте раньше делал так:
    💔 {HOST.NAME}
    {EVENT.NAME}
    детали: {EVENT.OPDATA}
    время аварии:
    {EVENT.TIME} on {EVENT.DATE}

    очень эффектно и читаемо выглядело.
    сейчас попробовал вставить это все в XML формат в шаблона, и оно конечно же не заработало.
    полез в скрипт, там стоит метод HTML.
    Чую что дело все в разметке XML. и еще этот тег который экранирует спецсимволы .
    а без него не работает.
    кто знает как сделать разметку?

  6. Сергей

    Владимир, а вы не в курсе, как сделать, чтобы в телегу отправлялись оповещения только от настроенных нами в Action -> Trigger actions ? Только и ИСКЛЮЧИТЕЛЬНО от них.
    Если настроить пользователя на получение оповещений, то он сразу их начинает получать... Вообще по всем триггерам, совпадающим по уровню важности (если галочки в профиле пользователя стоят) Еще до настройки Action -> Trigger actions.
    В итоге мне приходит сразу 2 уведомления: от настроенного там триггера и второе от настроенной в параметрах пользователя в Media столбец Use if severity. Не знаю как это все по русски сформулировать.

    • Я не понял вопроса. В Action -> Trigger actions как раз и настраивается то, что будет отправляться. И там это гибко реализовано. Можно отдельно пользователей, триггеры выбирать, по которым будут оповещения.

  7. Получается emoji без скрипта для отправления графиков не внедрить в уведомления?

    • Тоже задался этим вопросом и обратил внимание что эмоджи вставленные в поле Subject при отправке игнорируются, а если вставить код текстом вида \u2705 то они экранируются и отправляются текстом (\\u2705 в логе)

      пришлось править джаваскрипт который можно увидеть после параметров
      var Telegram = {....

      нашел строчку Telegram.message = params.Subject + '\n' + params.Message;

      и добавил к ней "анализатор" темы, в зависимости от этого прицеп кода эмоджи. ну в общем думаю понятно что к чему

      if (params.Subject.match(/Problem/)) {
      Telegram.message = '\u274C ' + Telegram.message
      }
      if (params.Subject.match(/Resolved/)) {
      Telegram.message = '\u2705 ' + Telegram.message
      }

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

  8. Аноним

    Traceback (most recent call last):
    File "/usr/lib/zabbix/alertscripts/zbxtg.py", line 17, in
    import zbxtg_settings
    ModuleNotFoundError: No module named 'zbxtg_settings'

    Ошибка после теста

  9. Доброго вечера! создал несколько групп в telegram, добавил бота во все группы. Подскажите пожалуйста, как теперь настроить, чтобы для каждой группы хостов уведомления отправлялись соответствующим группам в telegram. есть группа хостов в Zabbix: cisco и hp, соответственно есть группы в telegram, в одной группе оповещения по cisco и hp, а другая группа только должна видеть уведомления по hp

    • В статье есть пример, где создаётся учетная запись, у неё указывается конкретная группа tg, куда будут отправляться уведомления. Можно насоздавать разных пользователей с разными группами в адресе назначения. И дальше действиями распределить уведомления по разным пользователям, и соответственно по разным группам.

  10. При попытке отправить график из консоли
    zbxtg.py: authorization has failed, url: http://127.0.0.1/zabbix//
    zbxtg.py: Login to Zabbix web UI has failed (web url, user or password are incorrect), unable to send graphs check manually

  11. Добрый день! Подскажите как настроить определённую группу компьютеров для оповещения. Например: у меня есть сервера 1с , создал группу телеге, добавил людей, но мне нужно добавить определенные сервера или группу серверов. Где их добавлять? Спасибо

    • Добавить необходимые сервера в отдельную группу в Zabbix.
      Создать отдельного пользователя, для него прописать ид группы в телеге.
      В "действиях триггеров" создать оповещение этому пользователю указав группу узлов как условие.

      Как-то так.

  12. Евгений

    Добрый день.
    Centos 8 , zabbix 6.4
    Настраиваю отправку оповещений (email, telegram)
    При отправки тестового сообщения выходит ошибка: "Подтвердите действия на странице, SyntaxError: Unexpected end of JSON input"

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

  13. Максим

    Если у кого-то, после обновления возникают ошибки:

    RequestsDependencyWarning: urllib3 (1.24.3) or chardet (2.2.1) doesn't match a supported version!
    zbxtg.py: Conflict: can't use getUpdates method while webhook is active; use deleteWebhook to delete the webhook first

    то мне помогло:

    curl -F "url=" https://api.telegram.org/bot"номер API"/setWebhook

    Потом

    pip uninstall urllib3
    pip uninstall chardet
    pip install requests

  14. Всем привет!
    Скажите, на Zabbix 6.4 кто то добился отправки графиков? Текст норм летает, а вот картинки не могу добиться пересылать.

    • Добавьте доступ к веб-интерфейсу для аккаунта, от которого отправляется. Без этого не робит

  15. Евгений

    при проверке отправки графика выдает ошибку
    # sudo -u zabbix ./zbxtg.py user1 test "$(echo -e 'zbxtg;graphs: \nzbxtg;graphs_period=3600\nzbxtg;itemid:23301\nzbxtg;title:ololo')"
    zbxtg.py: Bad Request: IMAGE_PROCESS_FAILED
    Судя по логу - файл png создается

  16. Евгений

    Все уведомления по триггерам приходят.
    Но.. если шаблон содержит кириллицу, то приходят "?????"
    Таблицы БД с кодировкой utf8.
    Это лечится?

    • По идее, да, потому что у меня нет проблем с кириллицей в шаблонах. И ни разу не было. То есть у Вас явно какая-то проблема с кодировками, но где именно, не знаю. Заочно трудно сказать. Либо в базе, либо в шаблонах.

  17. при тесте выдает ошибку:
    Traceback (most recent call last):
    File "/usr/lib/zabbix/alertscripts/zbxTelegram.py", line 12, in
    import telebot
    File "/usr/lib/zabbix/alertscripts/venv/lib/python3.6/site-packages/telebot/__init__.py", line 13, in
    import telebot.util
    File "/usr/lib/zabbix/alertscripts/venv/lib/python3.6/site-packages/telebot/util.py", line 14, in
    from telebot import types
    File "/usr/lib/zabbix/alertscripts/venv/lib/python3.6/site-packages/telebot/types.py", line 2
    from __future__ import annotations
    ^
    SyntaxError: future feature annotations is not defined

    все настроил по инструкции, что не так (я полный профан) Заббикс версия 6.2.6

    • Похоже на то, что зависимость в виде модуля telebot не установлена.

    • Аноним

      Подскажите вы разобрались с ошибкой? Елси да то как, у меня абсолютно такая же(

    • Такая же история, разобрались в чём проблема?

      Traceback (most recent call last):
      File "/usr/lib/zabbix/alertscripts/zbxTelegram.py", line 64, in
      loggings = System(config_debug_mode if not args.debug else True).log
      File "/usr/lib/zabbix/alertscripts/zbxTelegram.py", line 50, in __init__
      file_handler = logging.FileHandler(filename=config_log_file, mode='a')
      File "/usr/lib/python3.9/logging/__init__.py", line 1142, in __init__
      StreamHandler.__init__(self, self._open())
      File "/usr/lib/python3.9/logging/__init__.py", line 1171, in _open
      return open(self.baseFilename, self.mode, encoding=self.encoding,
      PermissionError: [Errno 13] Permission denied: '/usr/lib/zabbix/alertscripts/zbxTelegram_files/znt.log'

  18. Привет я настроил оповещения в Телеграм согласно ваши статия, у меня через user не работает
    1) python скрипт через user проверяю не работает тестовые сообшения не получаю
    zbxtg.py: User 'ZabbixGetMonBot' needs to send some text bot in private
    2) python скрипт через группа проверил работает

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

  19. Анатолий

    Настроил оповещения в Телеграм согласно этой статьи, автору спасибо всё работает, но моя радость была не долгой, рассказываю почему.
    У нас есть очень критичное оборудование на проблемы с которым нужно реагировать как можно быстрее и вот, я настраиваю телеграм оповещение и начинаю тесты. Что я ждал от телеграм оповещения, допустим я гуляю с детьми и мне нужно, чтобы в случае аварии телефон разрывался, играла громкая музыка или сирена и играла долго, пока я не услышу. Но то, что я увидел в телеграм на практике меня шокировало, Телеграм, весь такой покрытый аурой всемогущественности, миллионов ботов и т.д. как оказалось не может проигрывать на пришедшее сообщение мелодию длиннее 5 секунд, не больше 300 кбайт. На практике это выглядит как пару пиков и всё гудбай. Пока я гулял с детьми я пропустил все важные аварии которые только возникали. Вот знаете даже и не верится, что они создали кучу супер ботов и споткнулись на такой фигне. Удалил этот Телеграм из zabbix, теперь пробую Discort. Нужна софтина которая сможет играть длинную музыку на входящее сообщение, телеграму это оказалось не по зубам.

    • Можно звонок через Asterisk сделать, если последний есть под рукой. Настраивается не сильно сложно, зато звонок точно не пропустишь. Можно повторяющиеся оповещения делать хоть каждую минуту, пока ты не отреагируешь на инцидент. Вариантов решения задачи с оповещением через Zabbix множество.

  20. Не совсем по теме, но все-же : есть около 200 камер dahua и десяток регистраторов, некоторые из них не поддерживают snmp , этот зоопарк можно мониторить в zabbix как-то кроме icmp ping?

    • Если у камер есть веб интерфейс, можно и его проверять. А у каких-то камер через веб интерфейс можно и картинку с камеры взять. Можно мониторить её размер. Если близок к нулю, значит картинки с камеры нет. Так что варианты разные могут быть.

      • Спасибо , очень помогли. Если я правильно понял, если у меня 200 камер мне надо завести в шаблоне 200 веб сценариев с отличием только в ip адресе камер ? Или можно поумнее сделать ?

        • Да, либо вручную, либо писать какую-то автоматику через Zabbix API. Механизмы авторегистрации или автообнаружения недоступны для web сценариев.

        • Можно создать шаблоны с веб-сценариями и применять их к группам хостов

  21. Stanley Goodspeed

    Добрый день!

    Требуется направлять уведомления о состоянии только конкретных устройств (не всех) и только конкретным пользователям (не всем) Заббикс.
    Подскажите пожалуйста, каким образом это можно реализовать?

    И можно ли направлять уведомления только по конкретным триггерам?

    Спасибо!

    • Это всё без проблем настраивается через штатный функционал Actions (Действия). Там можно выбрать конкретные триггеры по разным признакам, например тэгам или группам, и выбрать группы пользователей, которым будут отправляться уведомления.

  22. подскажите, куда копать
    (Rocky linux 8, Zabbix 6.0 LTS, Python 3.9)
    при использовании zbxtg.py приходит только текст. в логах такая ошибка
    Traceback (most recent call last):
    File "/usr/local/lib/python3.9/site-packages/urllib3/connection.py", line 158, in _new_conn
    conn = connection.create_connection(
    File "/usr/local/lib/python3.9/site-packages/urllib3/util/connection.py", line 80, in create_connection
    raise err
    File "/usr/local/lib/python3.9/site-packages/urllib3/util/connection.py", line 70, in create_connection
    sock.connect(sa)
    PermissionError: [Errno 13] Permission denied
    Из консоли это же сообщение проходит
    собственно в логе в этот момент
    zbxtg.py: http://127.0.0.1:8080/chart3.php?from=now-1800&to=now&name=Zabbix%20server%20-%20High%20CPU%20utilization&width=900&height=200&graphtype=0&legend=1&items%5B0%5D%5Bitemid%5D=42269&items%5B0%5D%5Bsortorder%5D=0&items%5B0%5D%5Bdrawtype%5D=5&items%5B0%5D%5Bcolor%5D=00CC00
    zbxtg.py: Trying to /sendPhoto:
    zbxtg.py: https://api.telegram.org/bot6024253820:AAFkO2OOdsDBPK5dzDHcKqxIJw4ixytZcFE/sendPhoto
    zbxtg.py: {'chat_id': '-862329935\n', 'caption': '', 'disable_notification': True, 'reply_markup': '{}', 'reply_to_message_id': 151}
    zbxtg.py: files: {'photo': }
    т.е., как я понимаю, по какой-то причине urllib3 не коннектится к 127.0.0.1

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

  23. При выполнении скрипта ./zbxtg.py willmaxx test "$(echo -e 'zbxtg;graphs: \nzbxtg;graphs_period=3600\nzbxtg;itemid:23301\nzbxtg;title:ololo')"

    Traceback (most recent call last):
    File "/usr/local/etc/zabbix6/zabbix/alertscripts/./zbxtg.py", line 940, in
    main()
    File "/usr/local/etc/zabbix6/zabbix/alertscripts/./zbxtg.py", line 885, in main
    zbx.login()
    File "/usr/local/etc/zabbix6/zabbix/alertscripts/./zbxtg.py", line 294, in login
    answer = requests.post(self.server + "/", data=data_api, proxies=self.proxies, verify=self.verify,
    File "/usr/local/lib/python3.9/site-packages/requests/api.py", line 116, in post
    return request('post', url, data=data, json=json, **kwargs)
    File "/usr/local/lib/python3.9/site-packages/requests/api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
    File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 524, in request
    resp = self.send(prep, **send_kwargs)
    File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 659, in send
    history = [resp for resp in gen] if allow_redirects else []
    File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 659, in
    history = [resp for resp in gen] if allow_redirects else []
    File "/usr/local/lib/python3.9/site-packages/requests/sessions.py", line 156, in resolve_redirects
    raise TooManyRedirects('Exceeded %s redirects.' % self.max_redirects, response=resp)
    requests.exceptions.TooManyRedirects: Exceeded 30 redirects.
    Кто нибудь сталкивался?

    • Михаил

      Проблему решил. Кому интересно.
      В конфиге апача был прописан не правельный Alias на страницу доступа к web интерфейсу, т.е прописан путь к папке где лежит zabbix на сервере - есть, а индексный файл не грузился. Что то не так указал в hhtpd.conf, что он не грузится. Не долго разбираясь воткнул "DirectoryIndex
      index.php" и все обрашение пошло , графики посыпались. Т.е в настройке конфа zbxtg_settings.py строка"zbx_serverver="http://192.168.1.1/zabbix6" начала правильно обращаться к zabbix.
      Кривые руки!)) Спасибо за статью!

      • Я поэтому не отвечал ничего. Знал, что где-то ошибка. Не так давно проверял всю статью. Всё, что описано, работает корректно, если правильно повторить.

  24. Анатолий

    Прочитав статью и большинство комментариев я не понял почему ни у кого не возникает вопрос о том, как ограничить для сервера где установлен zabbix выход в интернет только в сторону серверов Telegram и не более, неужели все дают полный доступ в интернет для сервера Zabbix ?
    В основном zabbix это софт который у всех опрашивает технологическое оборудование, выходит что с одной стороны к примеру серверу Ubuntu + Zabbix дали полный выход в Интернет а с другой стороны доступ ко всему технологическому оборудованию компании. Да это самый страшный сон безопасника. Кто может быть уверен куда ломится ubuntu, куда ломится zabbix, что они скачают и не будет ли это зловред или anydesk внутрь корпоративной сети для чужаков. Я у себя для эксперимента сначала запустил уведомление в телеграм от zabbix но так как не знаю как ограничить доступ только для телеграм, пришлось это отключить и перейти на почтовые уведомления, с почтой хотя бы понятно, что можно зарезать выход только на один почтовый TCP порт.

    • А какие могут быть глобальные проблемы с безопасностью, если доступ к серверу имеете только вы и софт ставите только вы? Zabbix сервер не обязательно должен быть виден из интернета. И если уж у вас такие повышенные требования к безопасности, то вообще странно, что вы смотрите в сторону Telegram.

  25. Андрей

    Добрый день!

    Делаю оповещение по кол-ву авторизованных пользователей Zabbix более 1.
    Возникла ошибка при сохранения триггера в шаблоне "Zabbix server health":
    Не удалось обновить триггер
    Ошибочный параметр "/1/expression": некорректное выражение начиная с "{Zabbix server:system.users.num.last()}>1".

    ПО:
    Версия Zabbix 6.2.6

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

    • Аноним

      last(/VM Webserver/system.users.num)>1
      Просто используй конструктор выражений в 6.2.6, там все подставится как надо.

  26. Добрый день!
    Спасибо за статью, помогла)
    Вопрос по дополнительной настройки сообщения.
    Как-то можно передать в Event Name значение данных, которое получаем с мониторинга?
    Т.е. допустим мониторим свободное место на диске, срабатывает тригер, что места стало меньше. Как можно отправить текущее свободное место?

    • Для этого можно использовать макрос {EVENT.OPDATA}. Если не ошибаюсь, именно в нём хранится информация о метрике айтема, на который сработал триггер.

  27. mrsupermenov

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

    • Я прям так сходу не отвечу, но по-моему, это реально. Настройки оповещений в Zabbix гибкие. Можно исключить эту группу из общих оповещений и сделать для них отдельное правило с и исключениями.

  28. Максим

    Здравствуйте, интересует следующий вопрос. На Zabbix настроено оповещение в телеграмм-боту. Оповещения работают, все ок, но так как сотрудники работают в разных часовых поясах, и у серверов так же могут быть разные часовые пояса, то оповещения приходят не совсем вовремя.
    Если часовой пояс совпадает, то все ок, если нет то приходят только когда наступает нужное время для отправки. Уточните пожалуйста, можно ли это где то настроить что бы все оповещения шли без разницы какое время на сервере где мониторинг ведется?

    • При настройке действий триггеров ведь можно указать "отправлять незамедлительно". Или вам это не подходит?

    • Если честно, я не совсем понял детали проблемы. Что и кому приходит не вовремя? По идее все рассылки сервер мониторинга делает в соответствии со своими настройками времени.

      А вообще задача нетривиальная. У Zabbix есть встроенный триггер на соответствие времени серверов и самой системы мониторинга. Важно, чтобы время было одинаковое. А если оборудование в разных часовых поясах, то мне кажется, тут удобнее поднять под каждый часовой пояс свой сервер мониторинга. А потом их свести в какую-то единую систему, например Grafana или Monq.

  29. Магомед

    Полезный материал, для начала настроил через WebHook, чтобы хоть какая нибудь информация поступала, как нибудь сяду остальное почитаю, автору спасибо

  30. Владимир

    вопрос снимается, гугл в помощь:
    Для получения идентификатора группы можно воспользоваться ботами, например Get My ID

  31. Владимир

    Добрый день, прошу прощения за совсем простой вопрос, застопорился на этапе инструкции где описывается скрипт " id моего аккаунта. Чтобы его узнать, добавьте бота @my_id_bot и напишите ему /start"
    я контакт добавил, пишу ему /start, но не пойму где брать "id моего аккаунта" ?

  32. Владимир

    Отличнейшая статья!
    Были вопросы (в Linux я совсем новичок), но самое главное прочитать до конца и делать все внимательно.
    Автору огромное спасибо!

  33. Аноним

    А можно ли исключить оповещения по определенному признаку?
    Например, есть точки доступа Wi-Fi. Постоянно сыпятся оповещения, что устройство отключилось от wi-fi
    Допустим, исключить опрашивание интерфейса wlan.
    Пример сообщения, которое приходит в телеграм:

    • Пример оповещения в телеграм:
      Проблема: Interface wlan2(): Link down
      Началось в 12:21:01 on 2022.07.05
      Конкретно: Interface wlan2(): Link down
      Host: ap-topkinsky44
      Важность: Average
      Operational data: down (2)
      Original problem ID: 2635863

      • Аноним

        Так это в самом заббиксе можно сделать, просто деактивировать соответствующий триггер.

        • А именно исключение можно сделать?
          Шаблон используется для всех сетевых устройств (свичи, маршрутизаторы, точки доступа и так делаее).
          Если деактивировать триггер, он перестанет опрашивать сетевые интерфейсы на всех устройствах.
          Хотелось бы сделать исключение по интерфейсу.
          Даже, если создать отдельный шаблон с деактивированным триггером, то как он будет опрашивать саму точку доступа по интерфейсу ethernet?

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

    • Андрей

      Получилось корректно отключить сообщение?
      Так столкнулся, в 17:00 сотрудники вышли с кабинета пришло оповещение, в 8:00 пришли на следующий день проблема закрылась.

  34. Здравсвтуйте!

  35. Спасибо за статью! Все настроил практически без изменений))

    Несколько моментов, может кому поможет т.к. статья в топе:

    1) т.к. версия заббикса у меня 6-я столкнулся с проблемой несвязанной напрямую с отправкой сообщений. При настройке триггера на количество активных подключений по ssh столкнулся с проблемой из-за изменений в синтаксисе. Будучи плохо знаком с системой, не сразу сообразил, в чем дело. В 6-й версии выражение для триггера будет выглядеть так: last(/Zabbix server/system.users.num)>1

    2) Как и писали в комментариях ниже, после установки python3 нужно сделать символическую ссылку:
    ln -s /usr/bin/python3 /usr/bin/python

    3) При проверке работы скриптов через консоль у меня работает только с ID, имя аккаунта не принимает ни с @ ни без нее, говорит что боту я еще не писал.

    4) Скрипт для третьего варианта Zabbix-Notification-Telegram видимо претерпел изменения, потому настраивал по руководству автора самого скрипта, теперь оно подробное и даже на русском :)

    5) В третьем способе графики тоже можно сделать с заливкой, немного поправив сам скрипт:

    zabbix_graph_chart = '{zabbix_server}chart3.php?' \
    'name={name}&' \
    'from=now-{range_time}&' \
    'to=now&' \
    'width=900&' \
    'height=200&' \
    'items[0][itemid]={itemid}&' \
    'legend=1&' \
    'showtriggers=1&' \
    'showworkperiod=1&' \
    'items[0][drawtype]=5&' \
    'items[0][color]=00CC00'

    Да и в целом там очень много довольно интуитивных настроек. Кроме того, как сделать жирным имя хоста в сообщении, это я не осилил :)))

    • Система FreeBSD.
      Долго мучался и не мог понять. При отправке тестового сообщения Zabbix ругался на "env: python: No such file or directory", хотя всё установлено и с консоли тестовое сообщение улетает.
      Оказывается, помимо ln -s /usr/local/bin/python3.9 /usr/local/bin/python нужно сделать ссылку еще и в папку /usr/bin/python

      Спасибо за подсказку!

  36. выдает такую ошибку
    Sending failed: Error: cannot get URL: Couldn't resolve host name..
    когда отправлял из терминала при помощи curl, все сообщения отправляются и доходят без каких либо ошибок

  37. всем привет, может кто сталкивался с такой проблемой
    Traceback (most recent call last):
    File "./zbxtg.py", line 940, in
    main()
    File "./zbxtg.py", line 893, in main
    zbxtg_file_img = zbx.graph_get(settings["zbxtg_itemid"], settings["zbxtg_image_period"],
    File "./zbxtg.py", line 310, in graph_get
    title = requests.utils.quote(title)
    File "/usr/lib/python3.8/urllib/parse.py", line 851, in quote
    return quote_from_bytes(string, safe)
    File "/usr/lib/python3.8/urllib/parse.py", line 876, in quote_from_bytes
    raise TypeError("quote_from_bytes() expected bytes")
    TypeError: quote_from_bytes() expected bytes

    причем сообщения приходят а вот график нет

  38. Добрый день, как отправить приватное сообщение боту?

  39. После обновления centos8 до oracle
    сломались оповещения
    у меня одного так?
    Traceback (most recent call last):
    File "/usr/lib/zabbix/alertscripts/zbxtg.py", line 9, in
    import requests
    File "/usr/local/lib/python3.6/site-packages/requests/__init__.py", line 113, in
    from . import packages
    File "/usr/local/lib/python3.6/site-packages/requests/packages.py", line 7, in
    locals()[package] = __import__(package)
    ModuleNotFoundError: No module named 'idna'

  40. Уважаемые, кто сталкивался с

    [Telegram Webhook] notification failed: Error: cannot get URL: Timeout was reached.

    Никак не могу побороть
    Zabbix 5.4.10 (revision db03ff023d)
    Ubuntu 20.04.3

    Использую официальный скрипт из официальной репы
    Подозреваю что проблема где-то на этапе
    response = request.post(url, data);
    но как это отдебажить не знаю.

    курлом могу выполнить на том же хосте запрос и получить месагу в телеге. Скриптом в заббиксе не работает.

    На 4 уровне лога есть такое:
    55451:20220208:020816.322 [Telegram Webhook] notification failed: Error: cannot get URL: Timeout was reached.
    55451:20220208:020816.322 End of zbx_es_execute():FAIL Sending failed: Error: cannot get URL: Timeout was reached..
    55451:20220208:020816.322 In zbx_ipc_socket_write()
    55450:20220208:020816.322 End of zbx_ipc_service_recv():1
    55450:20220208:020816.322 In am_process_result()
    55450:20220208:020816.322 am_process_result() alertid:4 mediatypeid:16 alertpoolid:0xffff0000c3f25838
    55450:20220208:020816.322 In zbx_ipc_client_send() clientid:4
    55450:20220208:020816.322 End of zbx_ipc_client_send():SUCCEED
    55450:20220208:020816.322 am_remove_mediatype() mediatypeid:16
    55450:20220208:020816.322 End of am_process_result()
    55450:20220208:020816.322 In zbx_ipc_service_recv() timeout:1
    55467:20220208:020816.322 End of zbx_ipc_async_socket_recv():0
    55467:20220208:020816.322 In zbx_ipc_async_socket_close()
    55467:20220208:020816.322 In zbx_ipc_socket_close()
    55467:20220208:020816.322 End of zbx_ipc_socket_close()
    55467:20220208:020816.322 End of zbx_ipc_async_socket_close()

    • У вас чётко указана проблема: Error: cannot get URL: Timeout was reached.
      Нет сетевого доступа к урлу телеграма.

  41. Александр

    Добрый день. Статья отличная, спасибо!
    Такой вопрос. При отправке в Телеграм сообщения о проблеме с хостом, имеющем в Visible name кириллицу, в Телеграм приходит сообщение с ??? вместо русских букв. Кодировка базы zabbix - UTF8. В чём может быть проблема?

    • Алексей

      Такая же проблема. Обновлялся с 4.0.14 до 6.0 Бьюсь второй день, пока ничего не помогло.

  42. Александр

    День добрый. Настроил отправку уведомлений с графиками в личку, Все отлично работает. Создал группу в телеграмм, включил туда IDBot и личного бота. При проверке группы
    curl --header 'Content-Type: application/json' --request 'POST' --data '{"chat_id":"-697ХХХХХ","text":"Проверяю отправку оповещений ботом"}' "https://api.telegram.org/bot50019ХХХХХ74:AAEuiwrF48odfwnFkr4RFGA-qnIzhLZ8eW4/sendMessage"
    сообщения до группового бота доходят, если попытаться отправить в группу

    /usr/lib/zabbix/alertscripts/zbxtg.py "-69725ХХХ" "тест" "тестовое сообщение" --debug --group
    то получаю ошибку
    zbxtg.py: You need start a conversation with your bot first in '-6972ХХХ' group chat, type '/start@OMz_Bot'
    в групповом чате писал /start@OMz_Bot, никакого результата.
    Через веб в группу ничего не отправляется, в чат свободно.
    Способы оповещений
    Имя
    Telegram Script private GROUP
    Тип
    Скрипт
    Имя скрипта
    zbxtg.py
    Параметры скрипта
    Параметр Действие
    {ALERT.SENDTO}
    Удалить
    {ALERT.SUBJECT}
    Удалить
    {ALERT.MESSAGE}
    Удалить
    --group
    Удалить
    Добавить

    что я делаю не так? Как устранить проблему?

  43. Андрей

    Здравствуйте, возможно не совсем понимаю, но ведь этот бот легко ищется в поиске, и потом кто угодно может добавить его себе в контакты\группу и тоже будет получать уведомления о всех проблемах в нашей системе ? Например я добавлю себе вашего бота, и буду знать когда у вас какая-нибудь система имеет проблему. Или это не совсем так работает ?

    • Нет, это не так работает. Чтобы бот что-то вам отправлял, надо его настроить. А чтобы его настроить, нужно знать его token. Так что пока ваш токен никто не знает, вашего бота невозможно никак использовать.

      • Добрый день, подскажите пожалуйста, может кто-то сталкивался и делал такую вещь. У меня настроено Обнаружение устройств и действие на это правило обнаружение - все находиться в определенной подети и добавляет узел как надо, вешаются шаблоны и т.д. , но появилась необходимость в этом действии добавить сообщение в jira или telegram, о том что узел новый найден - но не работает, хотя сообщения по авариям (тригерам) в jira и telegram стабильно отправляются.

      • У меня тоже самое
        You need start a conversation with your bot first ...
        token есть! id группы есть! сообщение /start@имя_бота в группу отправлял.
        НЕ РАБОТАЕТ!

  44. Нам нужно будет установить несколько модулей python, перечисленные в requirements.txt. Для этого нам понадобится pip. Ставим его и модули.

    # dnf install python3-pip
    # pip3 install -r requirements.txt - после ввода этой строки в терминал получаю это

    WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
    Could not open requirements file: [Errno 2] No such file or directory: 'requirements.txt'

    Подскажите как исправить

    • Вам нужно выполнить команду в директории с файлом requirements.txt или написать полный путь к нему. В ошибке указано, что файл requirements.txt не найден.

  45. Добрый день, подскажите пожалуйста, как решить проблему
    По 3му способу: https://github.com/xxsokolov/Zabbix-Notification-Telegram

    ERROR: Exception occurred: Username or groupname not found in the cache file. No access occurred or bot is not added to group "test" (Add bot group and/or send message to testzbx_bot)

    test это я условно сейчас написал, так группа по другому называется.
    Права все возможные раздал, действовал строго по инструкции.

    • забыл упомянуть, эта ошибка при отправке тестового сообщения.
      Он проходит через стадии
      INFO: Connection check passed
      INFO: Telegram API: method getUpdate: started
      и после этого как раз выдает ошибку

  46. Константин

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

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

  47. Доброго дня!
    все настроил и все работает. Немного раздражает что прихожят по 2 одинаковых сообщения)
    не понял почему и где надо "крутить"?

  48. Добрый день!
    Можно ли настроить оповещения следующим образом?

    Если есть интернет, то все оповещения уходят через Telegram,
    иначе все оповещения уходят через SMS.

    Как только появляется интернет, все оповещения опять уходят через Telegram.

    • По-моему, можно. Но я на 100% не уверен. Надо уточнять, есть ли возможность в действиях делать условие на доставку уведомления по одному из способов.

      • Вот именно, что нет, по-крайней мере в версии Zabbix 5.0.12.
        Я решил спросить у вас, надеясь на то, что возможно вы сталкивались с этим вопросом и решили его по своему.

  49. Я настривал по статье 2 года назад, сейчас необходимо внести изменения, но статья уже не бьётся. Тут уже 5ый заббикс и т.д. Толку от неё 0.

    • Вообще-то от статьи с 4-й версией сейчас будет толку 0, так как 5-я вышла уже давно. Скоро 6-я выходит. Поддерживать статьи под все старые версии у меня нет ни времени, ни желания.

  50. Нашел решение проблемы с графиками, которые перестали отправляться в Zabbix 5.2 (скриптом от ableev).

    В zbxtg_settings.py в переменной zbx_server убрать в конце слэш.
    Было:
    zbx_server = "https://example.com/"
    Стало:
    zbx_server = "https://example.com"

  51. Добрый день, подскажите где ошибка.
    Настроил по этому шаблону https://github.com/xxsokolov/Zabbix-Notification-Telegram, тест работает прекрасно.
    А триггеры сыпет ошибками, в логах вот что:
    [2021-05-20 14:46:45,422] - PID:13099 - main() - zbxTelegram.py:498 - INFO: Send to -xxxxxxxxxx action: {Problem} Average {Average}: Zabbix agent is not available (for 3m)
    [2021-05-20 14:46:45,558] - PID:13099 - get_chart_png() - zbxTelegram.py:194 - ERROR: Exception occurred: cannot identify image file

    И естественно ничего не приходит, подскажите куда копать?

  52. Ильнур

    Добрый день!
    Прошу помочь.
    Все настроил по вашей инструкции. Спасибо что все доступно объяснили.
    Сообщения о возникших проблемах приходят на telegram.
    Возникла проблема с отправкой графиков. Версия Zabbix 5.2.6
    Вместо графика пишет следующее:
    Zabbix получил некорректный запрос. Поле "from" не корректно: ожидался период времени.

    • Ильнур

      Решил. Моя ошибка в оформлении шаблона.
      Еще раз спасибо Владимир, за отличную статью!

  53. Аноним

    все работает просто огонь, спасибо!

  54. Максим

    Здравствуйте!
    По какой-то причине, не отправляются не только графики но и обычные сообщения в телеграм. Тест из консоли - работает. Тест из настройки Media Telegram в Zabbix - работает. Добавил пользователю Media Telegram. Добавил Action Send message to user через Telegram. Возникает Problem - через веб интерфейс всплывает сообщение, а в телеграм не приходит. Подскажите, пожалуйста, куда копать.
    Спасибо!

    • В веб интерфейсе можно посмотреть статус отправки всех оповещений по триггеру. У вас там что на тему уведомлений в телеграм?

  55. Аноним

    кто то может поделиться скриптом который начинается var Telegram = {...

    • Аноним

      Вообще на githab'е есть но вот:
      var Telegram = {
      token: null,
      to: null,
      message: null,
      proxy: null,
      parse_mode: null,

      sendMessage: function() {
      var params = {
      chat_id: Telegram.to,
      text: Telegram.message,
      disable_web_page_preview: true,
      disable_notification: false
      },
      data,
      response,
      request = new CurlHttpRequest(),
      url = 'https://api.telegram.org/bot' + Telegram.token + '/sendMessage';

      if (Telegram.parse_mode !== null) {
      params['parse_mode'] = Telegram.parse_mode;
      }

      if (Telegram.proxy) {
      request.setProxy(Telegram.proxy);
      }

      request.AddHeader('Content-Type: application/json');
      data = JSON.stringify(params);

      // Remove replace() function if you want to see the exposed token in the Log file.
      Zabbix.Log(4, '[Telegram Webhook] URL: ' + url.replace(Telegram.token, ''));
      Zabbix.Log(4, '[Telegram Webhook] params: ' + data);
      response = request.Post(url, data);
      Zabbix.Log(4, '[Telegram Webhook] HTTP code: ' + request.Status());

      try {
      response = JSON.parse(response);
      }
      catch (error) {
      response = null;
      }

      if (request.Status() !== 200 || typeof response.ok !== 'boolean' || response.ok !== true) {
      if (typeof response.description === 'string') {
      throw response.description;
      }
      else {
      throw 'Unknown error. Check debug Log for more information.'
      }
      }
      }
      }

      try {
      var params = JSON.parse(value);

      if (typeof params.Token === 'undefined') {
      throw 'Incorrect value is given for parameter "Token": parameter is missing';
      }

      Telegram.token = params.Token;

      if (params.HTTPProxy) {
      Telegram.proxy = params.HTTPProxy;
      }

      if (['Markdown', 'HTML', 'MarkdownV2'].indexOf(params.ParseMode) !== -1) {
      Telegram.parse_mode = params.ParseMode;
      }

      Telegram.to = params.To;
      Telegram.message = params.Subject + '\n' + params.Message;
      Telegram.sendMessage();

      return 'OK';
      }
      catch (error) {
      Zabbix.Log(4, '[Telegram Webhook] notification failed: ' + error);
      throw 'Sending failed: ' + error + '.';
      }

  56. zbxtg.py: Bad Request: IMAGE_PROCESS_FAILED на Centos 8 и Zabbix 5.2
    Так и не понял пока как победить

    • Кирилл

      Аналогичная проблема. Решение так и не нашел

      • Кирилл

        Содержимое png вот. Но вроде логинюсь.

        Warning [refreshed every 30 sec.]

        You are not logged inYou must login to view this page.If you think this message is wrong, plesetTimeout('document.location.reload();', 30000);

    • Сергей

      В конфиге
      попробуйте убрать / в конце url адреса. Так "zbx_server = "http://127.0.0.1/zabbix" # zabbix server full url". М
      не помогло.

  57. Добрый день."
    Zabbix 5.0.8.
    В настройках "администрирование/способы оповещений" нет шаблона "Telegram" (как и многих других, показанных в данной статье). С чем это может быть связано?

    Прочтя комментарии понял, что придется вручную добавлять этот способ. Скачал шаблон отсюда "https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/telegram". При попытке его импорта Zabbix пишет: "Ошибка при импортировании. Неподдерживаемое расширение файла импорта "yaml".
    Помогите, пжлста, советом как добавить способ оповещения через Telegram

  58. Вроде все настройки сделал правильно, я все это делал не на локальном компе , а на сервере, и меня при тестовой отправке уже в самом заббиксе выходит ошибка, Media type test failed. Cannot execute command "/usr/lib/zabbix/alertscripts/zbxtg.py": [2] No such file or directory , как будто заббикс не видит скрипт, хотя делал все как тут описано, можете сказать что не так?

    • Проверяйте файл - /usr/lib/zabbix/alertscripts/zbxtg.py
      Либо в пути или названии ошибка, либо у заббикса нет прав на этот файл. Тут четко указана проблема доступа.

  59. Добрый день.
    Не отправляются графики в телеграмм.

    Если выполнить команду
    ./zbxtg.py "my_user" "$(echo -e 'zbxtg;graphs: \nzbxtg;graphs_period=3600\nzbxtg;itemid:23301\nzbxtg;title:ololo')" --debug --group
    График в телегу приходит.

    Как я понимаю, проблема в шаблоне сообщений.
    Если я меняю шаблон сообщения, где указывается zbxtg;graphs, как сделали Вы, то приходит стандартный шаблон сообщения.

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

    Шаблон сообщения к примеру:
    ProblemA22 started at {EVENT.TIME} on {EVENT.DATE}
    TEST name: {EVENT.NAME}
    Host: {HOST.NAME}
    Severity: {EVENT.SEVERITY}
    Operational data: {EVENT.OPDATA}
    Original problem ID: {EVENT.ID}
    {TRIGGER.URL}

    • Забыл сказать, что сохранить шаблоны и все остальные изменения не забываю.

    • @Zerox не подскажите в чем может быть проблема?
      Может мне шаблон сообщения в самих файлах попробовать поменять?
      Только не могу найти в каком файле этот шаблон зашит.

      • Не знаю в чем проблема, надо разбираться. Я недавно настраивал по статье, у меня все получилось. Попробуйте другой способ, если этот не получается настроить. В статье описаны 3 разных способа.

        • Вот шаблон сообщения от zabbix:

          Problem started at {EVENT.TIME} on {EVENT.DATE}
          Problem name: {EVENT.NAME}
          Host: {HOST.NAME}
          Severity: {EVENT.SEVERITY}
          Operational data: {EVENT.OPDATA}
          Original problem ID: {EVENT.ID}
          {TRIGGER.URL}

          В БД zabbix есть таблица - media_type_message.
          Там есть шаблоны сообщений которые я создавал.
          Если я делаю rename table для media_type_message, то отправка сообщений в телеграм не прерывается, ошибок никаких нет.
          Т.е. он даже эти шаблоны не использует. Я даже удалил данные из этой таблицы.

          Есть таблица alerts. Там история всех алертов.
          Там есть столбец message, если смотреть, то он отправляет шаблон который я указал выше.
          FK для message нет.

          Если переименовать таблицу alerts, то в логах заббикс сервера выходит ошибка.
          " [Z3005] query failed: [1146] Table 'zabbix.alerts' doesn't exist [select a.alertid,a.mediatypeid,a.sendto,a.subject,a.messa ge,a.status,a.retries,e.source,e.object,e.objectid ,a.parameters,a.eventid,a.p_eventid from alerts a left join events e on a.eventid=e.eventid where alerttype=0 and a.status=3 order by a.alertid]"

          Непонятно, откуда он берет шаблон сообщений.

          Поковырял php файлы, ничего подозрительного не нашел.
          Грепнул всю виртуалку, с поиском текста "Problem started at", ничего не нашел кроме файла CMediatypeHelper.php(Но это точно не то).
          Форумы все облазил, не у кого такой проблемы нет.

          Искал в БД строки, где есть слова "Problem started at", выводит только на таблицу alerts.
          Получается, что php и БД zabbix не генерирует данное сообщение.

          Попытался обновить заббикс с 5.0 до 5.2 по вашей инструкции, не получилось. Версия остается прежней.
          Может есть какие то идеи?
          Мне по идее нужно найти откуда он берет этот шаблон, изменить его и все.

          • "Попытался обновить заббикс с 5.0 до 5.2 по вашей инструкции, не получилось."
            Почему не получилось? Там нет никаких проблем с обновлением.

            • Добрый день!
              По поводу оповещений в группу я не понял, создал группу, добавил туда бота своего, но когда в настройках оповещений добавляю токен, который получил от father, а в пользователях для оповещения выбираю телегу, добавляю свой id, то приходит оповещение в чатбот созданный мной, а вот как сделать чтоб приходило оповещение не в чатбот а в группу? у группы другой id, даже если его добавляю в пользователях, то ошибка при передаче оповещений. Что не так делаю?

          • Решил проблему.
            Может кому пригодится, было потрачено много времени на это =)
            Хотя глупость, глупостью. Скорее всего невнимательно смотрел.

            Необходимо зайти в Configuration->Action.
            У меня был один Action - Report problems to Zabbix administrators.
            Открываем его, нажимаем Operations. И там мне удалось поменять шаблон.

            @Zerox, Вам огромное спасибо за статьи. По Вашим статьям обновился с 4 до 4.2, с 4.2. до 4.4. с 4.4 до 5 =)
            Так же уведомлялки настроил.

            • В Zabbix до 5-й версии, шаблоны были там. В 5-й и далее они переехали в настройки media types (способы оповещений). Подписывайтесь на мой телеграм канал, я рассказывал об этом :)

  60. не совсем понял что нужно делать при такой ошибке, можете объяснить

    • Нужно перестать писать мне в личку (zeroxzed), а использовать свою учетную запись для тестов.

  61. zbxtg.py: User 'zeroxzed' needs to send some text bot in private

  62. Доброго дня.
    curl --header 'Content-Type: application/json' --request 'POST' --data '{"chat_id":"xxxxxxxxx","text":"Hello!"}' "https://api.telegram.org/botxxxxxxxxxx/sendMessage"

    Стал возвращать:
    curl: (6) Could not resolve host: application

    400 Bad Request

    400 Bad Request
    nginx/1.16.1

    Пробовал с разных провайдеров. Не в курсе что-то поменялось? У Вас этот вариант работает ?

    • Так это у вас команда curl неправильно сформирована. Проверьте синтаксис. У вас в качестве хоста приходит слово application.

      • Рукалицо.
        Под windows другой синтаксис:
        curl -X POST -H "Content-Type:application/json" -d "{\"chat_id\":\"xxxidxxx\",\"text\":\"test test\"}" "https://api.telegram.org/botXXXXXXXXXXX/sendMessage"

        Если вдруг кому-то пригодиться.
        Спасибо!

  63. Дмитрий

    Добрый день. Спасибо за статью. Столкнулся с проблемой, через консоль проверку проходит, в чат отправляет, через веб меню , не проходит тест (Ошибка при тестировании способа оповещения.
    SyntaxError: invalid object literal (line 1)) все уже по десять раз перепроверил).Может кто сталкивался .

    • Каким способом отправляете? В статье 3 разных описано. Вообще, статья 100% рабочая. Недавно совсем проверял.

      • Дмитрий

        curl --header 'Content-Type: application/json' --request 'POST' --data '{"chat_id":"-4481xxxx","text":"Тестовое сообщение"}'
        "https://api.telegram.org/bot1483678667:AAGlYkQKRAuuyxflAxtAcFRyCK-xxxxx/sendMessage/sendMessage"
        так отправляет.
        Через тестовые сообщения, через веб меню (Webhook) нет.

  64. Кирилл

    А есть статья как отправлять sms не через gsm, а через оператора который есть?

    • Статьи нет. Настройка зависит от оператора. Кому-то можно просто email отправить и он перешлет по sms. У кого-то api, у кого-то вебхуки. В общем, тут от сервиса надо отталкиваться.

  65. Кто смог настроить это дело на Zabbix 5.2? До этого всё работало, после обновление отвалилось(

    • Пока не видел информации, что это починили.

      • У меня на zabbix 5.2.6 не работали графики
        Включил в Администрирование-Аутентификация-Настройки HTTP:
        Поставить галку в чекбоксе- Активация HTTP аутентификации
        Диалог входа в систему по умолчанию - Диалог входа в систему Zabbix

  66. На последней версии скрипта выдает ошибку:

    TypeError: undefined not callable (property 'log' of [object Object])
    at [anon] (duktape.c:65639) internal
    at [anon] (function:55) preventsyield

    Если в скрипте поменять Zabbix.log на Zabbix.Log, то выдает другую ошибку:
    Sending failed: ReferenceError: identifier 'HttpRequest' undefined.

    Если в скрипте поменять request = new HttpRequest(), на request = new CurlHttpRequest(),
    то выдает Sending failed: TypeError: undefined not callable (property 'addHeader' of [object Object]).

    А что с этим делать я не понимаю. Ощущение, что объектная модель скрипта не совпадает с сервером

    сервер 5.2.1
    скрипт https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/telegram/media_telegram.yaml

    Сильное ощущение, что где-то просто свернул не туда. Есть предположение из-за чего такое может быть?

  67. Анатолий

    Здравствуйте! Zabbix server 5.0.4 к нему подключены 4 виндовые машины и 7 Linux. Есть проблема с отображением оповещения об ошибках именно виндовых серверов, с линуксами таких проблем нету. Например если отваливается какая-то служба на серваке, то инфа в телегу падает вот в таком виде: "Проблема: Service", и всё на этом, никакой информации о том что это за тачка, какая именно это службы была тоже нету. При этом все ошибки и проблемы в панели мониторинга отображаются нормально с указанием тачки и что за проблема с указанием службы. Не подскажите как можно решить данную проблему? Заранее благодарю.

    • Анатолий

      Проблему решил переходом от скрипта который отправлял оповещения на webhook. Сразу заббикс стоял 4 какой-то версии, потом обновился до 5.0.4. До 5.0.4 стояло оповещение в телеграм через скрипт, сейчас же заббикс добавил сам оповещение в телеграм через Webhook с уже готовым скриптом и нужно добавить только токен бота, всё как у автора в статье. И если ранее стояла версия старше, чем 5.0, то при обновлении до последней данный шаблон и скрипт сам не добавляется, нужно добавлять его ручками, взял его вот здесь: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/telegram. Так же важно при импортировании данного способа оповещения и уже есть способ оповещения который называется "Telegram", то его нужно переименовать или удалить, иначе ничего не импортируется, хотя напишет, что импортировалось и все ок. Далее уже настроил оповещения через webhook и всё завелось как надо, сообщения в телегу теперь приходят как надо. Почему на скрипте это отрабатывало некорректно разобраться так и не удалось и останется загадкой.

      • Станислав

        Настраивал по данной инструкции, первый метод, скачал шаблон с гита, и не заработало. Там скрипт не работает в заббиксе 5.2.1, рабочий скрипт можно взять тут https://pastebin.com/qN0ukhpf

  68. Zabbix не хочет отправлять графики из-за того, что не может подцепиться к хосту по библиотеки urllib3.
    Apache отключен (использую PHP-FPM), в конфиге, соответственно, доменное имя.

    Помогите, пожалуйста, разобраться!

    Traceback (most recent call last):
    File "/usr/lib/python3.6/site-packages/urllib3/connection.py", line 159, in _new_conn
    (self._dns_host, self.port), self.timeout, **extra_kw)
    File "/usr/lib/python3.6/site-packages/urllib3/util/connection.py", line 57, in create_connection
    for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):
    File "/usr/lib64/python3.6/socket.py", line 745, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
    socket.gaierror: [Errno -2] Name or service not known

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 600, in urlopen
    chunked=chunked)
    File "/usr/lib/python3.6/site-packages/urllib3/connectionpool.py", line 354, in _make_request
    conn.request(method, url, **httplib_request_kw)
    File "/usr/lib64/python3.6/http/client.py", line 1254, in request
    self._send_request(method, url, body, headers, encode_chunked)
    File "/usr/lib64/python3.6/http/client.py", line 1300, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
    File "/usr/lib64/python3.6/http/client.py", line 1249, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
    File "/usr/lib64/python3.6/http/client.py", line 1036, in _send_output
    self.send(msg)
    File "/usr/lib64/python3.6/http/client.py", line 974, in send
    self.connect()
    File "/usr/lib/python3.6/site-packages/urllib3/connection.py", line 181, in connect
    conn = self._new_conn()
    File "/usr/lib/python3.6/site-packages/urllib3/connection.py", line 168, in _new_conn
    self, "Failed to establish a new connection: %s" % e)
    urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [Errno -2] Name or service not known

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File "/u

    • Ни разу такой ошибки не видел. Вы явно делаете что-то не то.

    • Благодарю за помощь! Разобрался сам. Совсем вылетело из головы, что DNS то у меня эта запись внесена только на избранных ПК ))

      • Я, кстати, сразу на dns подумал, потому что "Name or service not known", но раз вы написали про библиотеку urllib3, подумал, что уже исследовали этот вопрос.

  69. Добрый день.
    Подскажите, почему может вместо графика приходить картинка:
    no permissions to referred object or it does not exist

    И админа и специально созданного пользователя пробовал в скрипте прописывать, результат одинаковый.

    • Аноним

      itemid неверный. верный id можно посмотреть в адресной строке, выбрав нужный item-values в latest data

  70. Проблема при тестировании ..

    Traceback (most recent call last):
    File "/usr/lib/zabbix/alertscripts/zbxTelegram.py", line 60, in
    loggings = System(config_debug_mode if not args.debug else True).log
    File "/usr/lib/zabbix/alertscripts/zbxTelegram.py", line 46, in __init__
    file_handler = logging.FileHandler(filename=config_log_file, mode='a')
    File "/usr/lib64/python3.6/logging/__init__.py", line 1032, in __init__
    StreamHandler.__init__(self, self._open())
    File "/usr/lib64/python3.6/logging/__init__.py", line 1061, in _open
    return open(self.baseFilename, self.mode, encoding=self.encoding)
    PermissionError: [Errno 13] Permission denied: '/usr/lib/zabbix/alertscripts/zbxTelegram_files/znt.log'

    • Права на папку не настроили.

      PermissionError: [Errno 13] Permission denied: '/usr/lib/zabbix/alertscripts/zbxTelegram_files/znt.log'
  71. Traceback (most recent call last):
    File "/usr/lib/zabbix/alertscripts/zbxTelegram.py", line 60, in
    loggings = System(config_debug_mode if not args.debug else True).log
    File "/usr/lib/zabbix/alertscripts/zbxTelegram.py", line 46, in __init__
    file_handler = logging.FileHandler(filename=config_log_file, mode='a')
    File "/usr/lib64/python3.6/logging/__init__.py", line 1032, in __init__
    StreamHandler.__init__(self, self._open())
    File "/usr/lib64/python3.6/logging/__init__.py", line 1061, in _open
    return open(self.baseFilename, self.mode, encoding=self.encoding)
    PermissionError: [Errno 13] Permission denied: '/usr/lib/zabbix/alertscripts/zbxTelegram_files/znt.log

  72. Не хочет отправлять кириллицу...

    Traceback (most recent call last):
    File "/usr/lib/zabbix/alertscripts/zbxtg.py", line 940, in
    main()
    File "/usr/lib/zabbix/alertscripts/zbxtg.py", line 849, in main
    tg.send_message(uid, zbxtg_body_text)
    File "/usr/lib/zabbix/alertscripts/zbxtg.py", line 94, in send_message
    answer = requests.post(url, params=params, proxies=self.proxies)
    File "/usr/local/lib/python3.6/site-packages/requests/api.py", line 116, in post
    return request('post', url, data=data, json=json, **kwargs)
    File "/usr/local/lib/python3.6/site-packages/requests/api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
    File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 510, in request
    prep = self.prepare_request(req)
    File "/usr/local/lib/python3.6/site-packages/requests/sessions.py", line 453, in prepare_request
    hooks=merge_hooks(request.hooks, self.hooks),
    File "/usr/local/lib/python3.6/site-packages/requests/models.py", line 313, in prepare
    self.prepare_url(url, params)
    File "/usr/local/lib/python3.6/site-packages/requests/models.py", line 431, in prepare_url
    enc_params = self._encode_params(params)
    File "/usr/local/lib/python3.6/site-packages/requests/models.py", line 104, in _encode_params
    v.encode('utf-8') if isinstance(v, str) else v))
    UnicodeEncodeError: 'utf-8' codec can't encode characters in position 0-15: surrogates not allowed

    Если вручную с консоли отправлять - все норм.

    • zabbix-server 5.0.3

    • Добрый день, Юрий
      У меня такая-же проблема, пишет UnicodeEncodeError: 'utf-8' codec can't encode characters in position, не отправляет кириллицу, на английском отправляется без проблем, вы решили это проблему? если да можете подсказать решение. Спасибо

  73. Добрый день. Можно ли формат даты оповещения изменить на 'ДД.ММ.ГГГГ' ?

    • Где именно формат даты изменить? Не совсем понял.

      • При отправке в телеграм алерт.
        В стандартных шаблонах передается как {DATE}

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

          • "ЕДИНЫЙ ФОРМАТ ДАТЫ И ВРЕМЕНИ начиная с версии 2.4.0
            Форматы даты и времени в веб-интерфейсе Zabbix приведен к единому виду ГГГГ-ММ-ДД чч:мм:сс согласно стандарту ISO 8601. Новый формат применяется во всех местах за исключением графиков."
            Макросы {DATE} {TIME} - наверняка берутся как системные ...А в линуксе по умолчанию ГГГГ-ММ-ДД. Можно только командой перевернуть...

  74. А у меня почему-то в способах оповещения только Email, Jabber и SMS, хотя заббикс обновлен до 5 версии

  75. Дмитрий

    Добрый день. Тестовое сообщение отправляется успешно как из консоли, так со страницы "Способы оповещений". Но сам Заббикс сервер не отправляет в Телегу. В логах также пусто. В каком направлении копать?

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

      • Дмитрий

        Нисколько не сомневаюсь в неработоспособности вашего способа.

        Методом затыка "куда попало", нашел такое сообщение "No message defined for media type."

  76. Артур Аветисян

    Самая шикарная нотификация которую я видел, все легко настраивается, у него даже чат с поддержкой есть. Постоянные обновления.

    https://github.com/xxsokolov/Zabbix-Notification-Telegram

  77. А что щас использовать для телеграма чтобы обходить зхапрет РКН? Текущим методом запросы не отправляются...

    • Прокси. Других вариантов нет. У некоторых хостеров телеграм не заблокирован. Я с них отправляю сообщения.

      • а у вас поддерживается markdown в новом zabbix ?

        • Я через скрипт, описанный в этой статье, отправляю. Специально markdown не проверял. У меня без него оповещения.

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

  78. Сергей

    Здравствуйте. У меня вопрос. А этот скрипт, который пушит графики в телегу, только обычные классические линейные графики шлет? К примеру, в системе, у меня на события по месту на HDD круговой график, а присылается все равно стандартный линейный, который, конечно, показывает ерунду. И еще один вопрос по событиям у которых графика вообще нет, он все равно шлет его, но пустой, без данных (ошибок нет при этом, как писалось в статье). Можно сделать так, чтобы он не генерил графики там где их нет? Может кто-то задавался этими вопросами? Спасибо

  79. Дмитрий

    вместо https://api.telegram.org
    используйте
    https://api.tlgr.org/
    и будет счастье

  80. Сергей

    При тестировании способа оповещений выдает сообщение:
    Traceback (most recent call last):
    File "/usr/lib/zabbix/alertscripts/zbxtg.py", line 9, in
    import requests
    ImportError: No module named 'requests'

    Но модуль 'requests установлен.

    Тестирование из консоли ./zbxtg.py test test - успешно, я получаю сообщение.
    даже отправляет график если подставить itemid графика командой: ./zbxtg.py test "$(echo -e 'zbxtg;graphs: \nzbxtg;graphs_period=3600\nzbxtg;itemid:45900\nzbxtg;title:ololo')"

    И еще момент: Если отправить тестовое сообщение в групповой чат (именно скрипт zbxtg.py) выдает сообщение:
    zbxtg.py: User 'my_group_id' needs to send some text bot in private. Но как ему группа отправит в личку, а? Я пробовал прям в группе это сделать через "@"
    Хотя при тестировании групповой рассылки через обычный скрипт telegram.sh групповые сообщения доходят.

    • Сергей

      решено самостоятельно.
      1. sudo su -
      2. pip install requests

      А в групповой чат оказывается надо слать не по -chat_id, а по имени.
      zabbix 4.4.6
      Ubuntu 16.04.6

  81. Добрый день. при выполнении: curl -v https://api.telegram.org выводится следущее
    [root@zabbix ~]# curl -v https://api.telegram.org
    * About to connect() to api.telegram.org port 443 (#0)
    * Trying 149.154.167.220...
    * Connected to api.telegram.org (149.154.167.220) port 443 (#0)
    * Initializing NSS with certpath: sql:/etc/pki/nssdb
    * CAfile: /etc/pki/tls/certs/ca-bundle.crt
    CApath: none
    * NSS error -5978 (PR_NOT_CONNECTED_ERROR)
    * Network file descriptor is not connected
    * Closing connection 0
    curl: (35) Network file descriptor is not connected

    Проблема в блокировке провайдера или в сертификате?

  82. Кирилл

    Отличная статья!
    Всё замечательно и доступно разложено - рекоммендую к настройке!

    Так же хочу поделиться, что на версии 4.4.7 завелось всё согласно статьи, но делая аналогично на LTS-версии 4.0 столннулся с проблемой, когда при срабатывании триггера и должен отправляться уведолмение в телеграмм выдавало ошибку :

    bin/bash: /20/usr/lib/zabbix/alertscripts/telegram.sh отказано в доступе

    Спустя короткое время поисков и пыток, завелось когда выдал zabbix права на этот скрипт командой :
    chown zabbix:zabbix /usr/lib/zabbix/alertscripts/telegram.sh

    Возможно, кому-то поможет :)
    Всем удачи!

  83. Для тех, у кого не получается настроить уведомления в телеграм по данному способу. Хочу с вами поделиться одной находкой - бот в telegram @gmailbot. С его помощью можно получать уведомления в телеграм о новой почте в ящиках gmail. Тут же можно прочитать, переслать, пометить письмо прочитанным и т.д. Сама идея дублировать свою почту куда-то на сторону не кажется мне хорошей, но я увидел другое применение для этого бота.

    Так вот. Сделайте отдельный ящик для Zabbix и настройте для него @gmailbot. Либо просто организуйте пересылку нужных писем в этот ящик. Будете получать уведомления сразу в телегу без настройки скриптов отправки, борьбы с блокировкой и т.д. Нужно будет только настроить штатную отправку уведомлений на почту, с чем в zabbix особых проблем нет.

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

  84. Если провайдер совсем совсем плохой, и даже через socks5 не работает, пробуйте tor

    Если провайдер блокирует телеграм, и даже через socks5 не работает, то можно отправлять сообщения через сеть TOR
    yum install tor torsocks
    systemctl start tor.service

    curl
    --socks5-hostname 127.0.0.1:9050
    --header 'Content-Type: application/json'
    --request 'POST'
    --data '{"chat_id":"-347712505","text":"Проверка связи"}'
    "https://api.telegram.org/bot985805478:AAGyvUJVl9OhqYD-PEsOTHIfh9eqm3SBg/sendMessage"

  85. Евгений

    Добрый день.
    Подскажите пожалуйста, каким правильным образом вы добавили зелёный смайлик в тему сообщения в телеграме как на вашей картинке в статье:
    https://serveradmin.ru/wp-content/uploads/2018/01/zabbix-telegram-notify-22.png

    • Евгений

      Разобрался.

      Со смайликами можно ознакомиться тут:https://apps.timwhitlock.info/emoji/tables/unicode#note1
      после чего найти нужный смайл, скопировать его значение Unicode (U+1F198), пойти на сайт
      http://www.fileformat.info/info/unicode/char/1F198/index.htm где код смайла присутствует в адресе. На открывшейся странице ищете C/C++/Java source code "\uD83C\uDD98", так вот код смайла для вставки в заббикс - \uD83C\uDD98.

      Наверное можно проще ))

      • Бехзод

        так вот код смайла для вставки в заббикс - \uD83C\uDD98. С этого момента можно подробнее?

      • Евгений

        Редачите шаблон сообщений, у меня так:

        Тема: \uD83C\uDD98 Проблема: {TRIGGER.NAME}

        Сообщение:
        Когда: {EVENT.TIME} {EVENT.DATE}
        Где: {HOST.NAME}
        Важность: {TRIGGER.SEVERITY}

        ID события: {EVENT.ID}
        {TRIGGER.URL}

  86. Алексей

    Здравствуйте, столкнулся с проблемой. Прописываю тестовое сообщение:

    /usr/lib/zabbix/alertscripts/zbxtg.py @Morfan98 test "$(echo -e 'zbxtg;graphs: zbxtg;graphs_period=3600\zbxtg;graphs_width=700\zbxtg;graphs_height=300\nzbxtg;itemid:1811\nzbxtg;title:test')"

    И в ответ на него присылает картинку с данным содержанием:"Zabbix получил некорректный запрос. Поле "from" не корректно: ожидался период времени"
    У кого-нибудь было такое? Подскажите где искать ошибку :D

  87. Дмитрий

    День добрый

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

    соответственно id и токен свой поставил
    и получил вот такую ошибку

    curl: (35) error:14094419:SSL routines:ssl3_read_bytes:tlsv1 alert access denied

    подскажите - что делать ?

  88. Попробую уточнить еще раз. Выход в Интернет осуществляется через proxy. От root команда выполняется ./zbxtg.py «@ivanov» «test» «test» и сообщения приходят в telegram. Если выполнять от пользователя zabbix команду: sudo -u zabbix ./zbxtg.py «@ivanov» «test» «test» то выдаются сообщения об ошибках. Удалось запустить команду от пользователя zabbix, которая приводит к отправке сообщений в телеграм: sudo -u zabbix -E bash -c '/usr/lib/zabbix/alertscripts/zbxtg.py "@ivanov" "test" "test"'. Как использовать эту команду, чтобы zabbix отправлял сам сообщения в telegram.

  89. Здравствуйте. Есть проблема. Есть zabbix сервер 4.4.6. Если с командной строки под root-ом (или переключить командную строку под пользователя "zabbix") послать сообщение командной: ./zbxtg.py "ID" "test" "test" или командой: /zbxtg.py "@ivanov" "test" "test", то сообщения приходят на telegram. Если попытаться отправить сообщение командой: sudo zbxtg.py "@ivanov" "test" "test", то ничего не происходит. В zabbix-е при срабатывании триггера ничего не происходит, а в логе zabbix-сервера появляются сообщения: Failed to execute command "/usr/lib/zabbix/alertscripts/zbxtg.py 'ID 'test' 'test'": Timeout while executing a shell script. Права на скрипты и на каталоги даны всем пользователям. Не подскажите в чем может быть проблема или хотя бы что сделать, чтобы попытаться определить проблему.

    • Так вы пробуйте отправлять не
      sudo zbxtg.py «@ivanov» «test» «test»
      а так:
      sudo -u zabbix zbxtg.py «@ivanov» «test» «test»
      И эту команду ставьте на исполнение.

      • Аноним

        Я пробовал вариант который Вы подсказали. Выполнение команды sudo -u zabbix zbxtg.py «@ivanov» «test» «test» ни к чему не приводит. Эта команда не отрабатывает, а словно уходит в бесконечное исполнение.

        • Если запустить команду sudo -u zabbix zbxtg.py «@ivanov» «test» «test» и прервать то выдается:

          File "./zbxtg.py", line 937, in
          main()
          File "./zbxtg.py", line 846, in main
          tg.send_message(uid, zbxtg_body_text)
          File "./zbxtg.py", line 94, in send_message
          answer = requests.post(url, params=params, proxies=self.proxies)
          File "/usr/lib/python2.7/site-packages/requests/api.py", line 116, in post
          return request('post', url, data=data, json=json, **kwargs)
          File "/usr/lib/python2.7/site-packages/requests/api.py", line 60, in request
          return session.request(method=method, url=url, **kwargs)
          File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 533, in request
          resp = self.send(prep, **send_kwargs)
          File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 646, in send
          r = adapter.send(request, **kwargs)
          File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 449, in send
          timeout=timeout
          File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 672, in urlopen
          chunked=chunked,
          File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 376, in _make_request
          self._validate_conn(conn)
          File "/usr/lib/python2.7/site-packages/urllib3/connectionpool.py", line 994, in _validate_conn
          conn.connect()
          File "/usr/lib/python2.7/site-packages/urllib3/connection.py", line 334, in connect
          conn = self._new_conn()
          File "/usr/lib/python2.7/site-packages/urllib3/connection.py", line 157, in _new_conn
          (self._dns_host, self.port), self.timeout, **extra_kw
          File "/usr/lib/python2.7/site-packages/urllib3/util/connection.py", line 74, in create_connection
          sock.connect(sa)
          File "/usr/lib64/python2.7/socket.py", line 224, in meth
          return getattr(self._sock,name)(*args)

          • Но если выполнить по root-ом команду:
            sudo -u zabbix ./zbxtg.py «@ivanov» «test» «test» то сообщение приходит в телеграм

    • здесь откуда берете @ivanov?

  90. Доброго времени.
    Столкнулся с проблемой на Centos 8, конкретно с отправкой графиков в тележку.
    Ошибка при выполнении теста
    /usr/bin/env: : Нет такого файла или каталога.

    Продублировал выполнение команды через консоль, получилось отправить добавив python3. если не добавить версию ошибка в отправке.

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

    Ошибка при отправке python /usr/lib/zabbix/alertscripts/zbxtg.py "@XXXXXX" "тест" "тестовое сообщение" --debug:

    bash: python: команда не найдена...

    Есть ли варианты где можно изменить в конфиге выполнение с команды python на python3 ?

    Заранее весьма всем благодарен за Ваши варианты.

    • Попробуйте просто alias сделать с python3 на python. А вообще, там нет особых проблем с установкой и настройкой python. В интернете есть материалы на эту тему.

      • Выполнил изменение в zbxtg.py
        В шапке поправил #!/usr/bin/env python на #!/usr/bin/env python3

        И пошла жара=)

        Спасибо Вам за статью Zerox=)

  91. Здравствуйте, подскажите пожалуйста, как можно убрать отображение элементов данных с кавычками, если кавычки находятся в самом элементе? С помощью предобработки или фильтрации?

    https://drive.google.com/file/d/1W3ZygaNOZeEFcyKdf4JnABD15glmuusg/view?usp=sharing

    https://drive.google.com/file/d/1UGQiBTQOpMfO3y_VVUiuK0DRZi57F3yk/view?usp=sharing

    • Не понял смысл задачи. Откуда убрать отображение? Чем мешают кавычки? Они находятся в названии элемента и ни на что не должны влиять. Названия могут быть любыми.

      • Кавычки находятся в названии элемента данных, просто при отправлении алерта через телеграм в котором есть кавычки, он некорректно отправляется, точнее все что после кавычек стирается, поэтому хотел узнать , есть ли способ убрать кавычки в названии в котором используется макрос #SERVICE.DISPLAYNAME?

        • Тут скорее надо в скрипт заглянуть и посмотреть, почему кавычки вызывают проблемы. Может это из-за разметки markdown, или может экранирования где-то не хватает. Как в заббиксе автоматом убирать кавычки из названий итемов я не знаю. Вряд ли это возможно штатным способом. Если только прямым запросом к базе. Но это тоже надо сначала выборку таких итемов делать, потом правку. В принципе, ничего сложного, но надо заморочиться и протестировать решение.

          • #!/bin/bash
            export LC_ALL="C"
            export LANG="en_US.UTF-8"
            #------------------------------------------------------------------------------

            BOT_AUTH_TOKEN=""
            LOG_FILE="/var/log/zabbix/telegram.log"

            DATETIME=$(date '+%Y/%m/%d %H:%M:%S')
            CHAT_ID="$1"
            TEXT=$(echo "$2" && echo "$3")

            #------------------------------------------------------------------------------

            if [[ "${CHAT_ID}" == "getid" ]]; then
            RESULT=$(curl -sS -i --max-time 30 "https://api.telegram.org/bot${BOT_AUTH_TOKEN}/getUpdates" 2>&1)
            RC=$?
            if [ ${RC} -ne 0 ]; then
            echo "${RESULT}"
            exit 1
            elif ! echo "${RESULT}" | grep -iq '"ok":true'; then
            echo "${RESULT}"
            exit 1
            fi
            echo "${RESULT}" | awk -F'"chat":' '{print $2}' | awk -F'"date":' '{print $1}' | sort -u | grep --color -E "\-?[0-9]{7,}"
            exit 0
            elif [[ "${CHAT_ID}" =~ ^-?[0-9]+$ && -n "${TEXT}" ]]; then
            echo "[${DATETIME}] CHAT_ID:\"${CHAT_ID}\" TEXT=\"${TEXT}\"" >> "${LOG_FILE}"
            RESULT=$(curl -sS -i --max-time 30 \
            --header 'Content-Type: application/json' \
            --request 'POST' \
            --data '{"chat_id": "'"${CHAT_ID}"'", "text": "'"${TEXT}"'"}' \
            "https://api.telegram.org/bot${BOT_AUTH_TOKEN}/sendMessage" 2>&1)
            RC=$?
            if [ ${RC} -ne 0 ]; then
            echo "${RESULT}" | tee -a "${LOG_FILE}"
            echo '' >> "${LOG_FILE}"
            exit 1
            elif ! echo "${RESULT}" | grep -iq '"ok":true'; then
            echo "${RESULT}" | tee -a "${LOG_FILE}"
            echo '' >> "${LOG_FILE}"
            exit 1
            fi
            echo "${RESULT}" >> "${LOG_FILE}"
            echo '' >> "${LOG_FILE}"
            echo "[OK] Message was sent"
            exit 0
            else
            echo "[${DATETIME}] CHAT_ID:\"${CHAT_ID}\" TEXT=\"${TEXT}\"" >> "${LOG_FILE}"
            echo "[EE] Invalid arguments" | tee -a "${LOG_FILE}"
            echo '' >> "${LOG_FILE}"
            exit 1
            fi

            exit 0

            • Предлагаете, чтобы я за вас этим занимался? :)) У меня нет на это времени.

              • Может тогда подскажите, чем можно заменить двойные кавычки в скрипте? echo "$2"? :)

              • Просто не пойму, почему текст после " не отправляется?

                • Допустим текст сообщения у вас в переменной TEXT, тогда просто за экранируйте кавычки, например так TEXT=$(echo ${TEXT} | sed 's/"/\\\"/g')

  92. Всем привет. Решил настроить отправку графиков и столкнулся с проблемой.
    Оповещение в телегу приходит но без emoji и графиков в таком виде:

    {{WARNING}} Проблема: Высокая температура на сервере
    Последнее значение: 32 (10:42:35)
    zbxtg;graphs
    zbxtg;graphs_period=1800
    zbxtg;itemid: 30037
    zbxtg;title:DL360 - CPU1Temperature
    Важность триггера: High
    Host: DL360

    id графика соответствует, но сам график не приходит.
    Через консоль поставил номер своего графика, всё приходит
    sudo -u zabbix ./zbxtg.py fyakhyaev test "$(echo -e 'zbxtg;graphs: \nzbxtg;graphs_period=3600\nzbxtg;itemid:30037\nzbxtg;title:ololo')"

  93. Народ. Помогите пожалуйста кто сталкивался. Zabbix 4.4 + Zabbix-in-Telegram

    Конфиги все поправил (до этого так же настраивал и все было хорошо, только на CentOS7 я делал) и отправляю только со своими данными
    /usr/lib/zabbix/alertscripts/zbxtg.py "@zeroxzed" "тест" "тестовое сообщение" --debug

    Traceback (most recent call last):
    File "./zbxtg.py", line 17, in
    import zbxtg_settings.py
    File "/usr/lib/zabbix/alertscripts/zbxtg_settings.py", line 15
    zbx_server = "http://10.1.22.10/" # zabbix server full url
    ^
    IndentationError: unexpected indent

  94. Failed to execute command "/usr/lib/zabbix/alertscripts/zbxtg.py 'z7172' '{{WARNING}} Проблема: Host is not available 8.8.8.5' 'Последнее значение: 0 (11:52:29)
    zbxtg;graphs
    zbxtg;graphs_period=1800
    zbxtg;itemid:29243
    zbxtg;title:DNS Google — Host is not available 8.8.8.5
    Важность триггера: ❗ High
    Host: DNS Google (8.8.8.5)
    Описание:
    '": Traceback (most recent call last):
    File "/usr/lib/zabbix/alertscripts/zbxtg.py", line 939, in
    main()
    File "/usr/lib/zabbix/alertscripts/zbxtg.py", line 884, in main
    zbx.login()
    File "/usr/lib/zabbix/alertscripts/zbxtg.py", line 295, in login
    auth=requests.auth.HTTPBasicAuth(self.basic_auth_user, self.basic_auth_pass))
    File "/usr/lib/zabbix/alertscripts/venv/lib/python2.7/site-packages/requests/api.py", line 116, in post
    return request('post', url, data=data, json=json, **kwargs)
    File "/usr/lib/zabbix/alertscripts/venv/lib/python2.7/site-packages/requests/api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
    File "/usr/lib/zabbix/alertscripts/venv/lib/python2.7/site-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
    File "/usr/lib/zabbix/alertscripts/venv/lib/python2.7/site-packages/requests/sessions.py", line 668, in send
    history = [resp for resp in gen] if allow_redirects else []
    File "/usr/lib/zabbix/alertscripts/venv/lib/python2.7/site-packages/requests/sessions.py", line 247, in resolve_redirects
    **adapter_kwargs
    File "/usr/lib/zabbix/alertscripts/venv/lib/python2.7/site-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
    File "/usr/lib/zabbix/alertscripts/venv/lib/python2.7/site-packages/requests/adapters.py", line 514, in send
    raise SSLError(e, request=request)
    requests.exceptions.SSLError: HTTPSConnectionPool(host='10.70.10.13', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:618)'),))

    Ошибка именно с отправкой графиков, resolved без графиков отправляется и приходит
    Помогите, пожалуйста с ошибкой

    • Ошибся, суля по всему вот:
      1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
      Я так понял, 10.70.10.13 это адрес zabbix сервера? К нему не получается подключиться, чтобы забрать график. Попробуйте не по https это делать.

      • Исправил, сейчас ошибка Zabbix user couldn't get graph (probably has no rights to get data from host), но у пользователь в группе Admins

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

    • Все пакеты из requirements.txt установлены
      Requirement already satisfied: requests in /usr/lib/python2.7/site-packages (2.20.0)

  96. Дмитрий

    Статья как всегда отличная! Давно уже копии статей находятся в WIKI как инструкции к работам.

    По сабжу, также столкнулся с проблемой отсутствия информации о службе, при оповещении.
    Приходят сообщения "PROBLEM: Service" и все. Подскажите как исправить?

    • Дело в том, что у вас есть кавычки в сообщении, их надо за экранировать
      Допустим текст сообщения у вас в переменной TEXT, тогда
      TEXT=$(echo ${TEXT} | sed 's/"/\\\"/g')

  97. Скрипт отрабатывает из консоли, а с заббикса не отправляет сообщения.

    Детали Media type test failed.
    Process exited with code: 7.

    Подозреваю что не хватает каких то прав...
    Стоит убунту сервер, развернул из готового образа...

    • Такс, проблему частично решил дописав прокси в скрипт. НО! Теперь тест проходит, на проксе вижу обращение но мне в группу ничего не прилетает. Хотя тест с консоли прилетает.

  98. Семен Клыков

    Мне очень понравился скрипт который отправляет все в одном сообщение, куча настроек!

    https://github.com/xxsokolov/Zabbix-Notification-Telegram

  99. Что то я не понял от слова совсем настройки.
    zbx_tg_daemon_wl_ids = [-XXXXXXXXX ] - вот у меня не группа а чат. ChatID -XXXXXXX не работает когда я подставляю сюда его. Ставлю ID бота и боту все приходит.
    zbx_tg_daemon_wl_u = ["ООО "Тра ля ля"", ] - вот тоже у меня имя чата на русском с пробелами и ковычками. В общем ребята, кто и как отправляет в чат сообщения?

    • Я так и отправляю, как в статье написано. Все работает. На прошлой неделе настраивал последний раз.

  100. Добрый день, коллеги. Есть ли у кого ни то желание (у кого в наличии есть Zabbix под рукой для экспериментов) соорудить универсальный модуль для отправки уведомлений в Telegram, Viber, Skype, Sms и др.?

  101. День добрый.
    1000 раз уже все проверил, но сам заббикс не отправляет в телегу сообщения. Из консоли сервера все прекрасно уходит. CentOs 7 zabbix3.4, куда копать?

    • ошибка в журнале заббикса следующая выходит "Process exited with code: 35"

    • Разобрался со всем. Теперь хочу навести красоту. Когда сам заббикс отправляет уведомления по аллерту, то текст уведомления прилетает в телегу без разделения на абзацы. Почему?

  102. Добрый день. Подскажите из за чего возникает ошибка {"ok":false,"error_code":404,"description":"Not Found"}

    Спасибо.

  103. Дмитрий

    Добрый день!
    Помогите, пожалуйста, разобраться.
    В телеграм отлично приходят события с linux-серверов, а вот с Win-машин все оповещения о сервисах только в таком виде:
    Kakannivi ( terminal server 10.1.10.2) - PROBLEM: Service
    На почту и в самом заббиксе всё содержательно. Запускаю сервис руками и в чат прилетает:
    Resolved: Service
    В комментах поднимался этот вопрос два раза и советовали поменять кавычки.
    Игрался в разных вариациях, но всёравно не приходит полное содержание проблемы в телеграм (((
    Можете ткнуть носом куда смотреть, а то нигде найти не могу эту проблему

  104. Здравствуйте, проблема следующего характера:

    Traceback (most recent call last):
    File "/usr/lib/zabbix/alertscripts/zbxtg.py", line 909, in
    main()
    File "/usr/lib/zabbix/alertscripts/zbxtg.py", line 785, in main
    uid = tg.get_uid(zbx_to)
    File "/usr/lib/zabbix/alertscripts/zbxtg.py", line 179, in get_uid
    updates = self.get_updates()
    File "/usr/lib/zabbix/alertscripts/zbxtg.py", line 67, in get_updates
    answer = requests.post(url, params=params, proxies=self.proxies)
    File "/usr/lib/python2.7/site-packages/requests/api.py", line 116, in post
    return request('post', url, data=data, json=json, **kwargs)
    File "/usr/lib/python2.7/site-packages/requests/api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
    File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 524, in request
    resp = self.send(prep, **send_kwargs)
    File "/usr/lib/python2.7/site-packages/requests/sessions.py", line 637, in send
    r = adapter.send(request, **kwargs)
    File "/usr/lib/python2.7/site-packages/requests/adapters.py", line 510, in send
    raise ProxyError(e, request=request)
    requests.exceptions.ProxyError: HTTPSConnectionPool(host='api.telegram.org', port=443): Max retries exceeded with url: /bot603890438:AAE5T7edt2I3JCZ_SfoXC_YnERgSZrkExE0/getUpdates?offset=0 (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError(': Failed to establish a new connection: [Errno 13] Permission denied',)))

    Не отрабатывает ни один из скриптов, причем, из командной строки, тестовые сообщения отправляются без проблем, подскажите в чем проблема, таится?
    (Есть похожая машина, с zabbix, и там все работает, на этой нет)!

    • Вот ошибка:

      requests.exceptions.ProxyError: HTTPSConnectionPool(host=’api.telegram.org’, port=443): Max retries exceeded with url: /bot603890438:AAE5T7edt2I3JCZ_SfoXC_YnERgSZrkExE0/getUpdates?offset=0 (Caused by ProxyError(‘Cannot connect to proxy.’, NewConnectionError(‘: Failed to establish a new connection: [Errno 13] Permission denied’,)))

      Похоже на то, что подключение к прокси не проходит.

      • Аноним

        Увы, но прокси рабочий, при точно таких же настройках работает на другом ПК.
        Но проверил с другим прокси (также из командной строки тестовые сообщения отправляются), а при срабатывании триггера нет.
        Такое чувство, пользователь не авторизуется в zabbix, тем самым не получает параметр $1-$3.
        Но это именно скрипт с графиками.
        А если простой способ отправки использовать.
        То там: Process exited with code: 7.
        Возможно, что zabbix, что-то блокирует?

  105. Добрый день. Подскажите пожалуйста, может кто сталкивался. Настроил проксирование через Tor, при проверки когда отправляешь запрос
    /usr/lib/zabbix/alertscripts/telegram.sh botНомер Тест 'Проверяю отправку оповещений ботом', возврат с таким сообщением: {"ok":false,"error_code":404,"description":"Not Found"}
    Как исправить?
    Если на установленном telegram на ПК прописать ip машины где стоит tor то сообщения ходят нормально.

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

    экранирование можно сделать прямо в баше. символ экранирования обратный слэш '\'
    чтобы вывести в текст обратный слэш его тоже надо экранировать обратным слэшем :)

    правило такое
    ${mystring//pattern/replacement}

    начало скрипта менять так
    chat="$1"
    subj="${2//\"/\\\"}"
    message="${3//\"/\\\"}"

  107. Спасибо за статью!
    Настроил по методу с графиками, все работает!

  108. Спасибо за статью!

  109. Подскажите что делать ? у кого нибудь была такая проблема?

    [root@localhost ~]# curl --header 'Content-Type: application/json' --request 'POST' --data '{"chat_id":"мой айди","text":"Привет, я Telegram-bot для Zabbix!"}' "https://api.telegram.org/botтокен/sendMessage"

    {"ok":false,"error_code":400,"description":"Bad Request: strings must be encoded in UTF-8"}[root@localhost ~]#

    • Ответ должен быть очевиден из надписи "Bad Request: strings must be encoded in UTF-8"...
      т.е. ваша кодировка в запросе не соответствует UTF-8.
      Наберите текст в кодировке UTF-8 и будет вам счастье.

      Также весь запрос в секции data на проверку бота у вас не заполнен.

  110. Доброго вечера, создал бота, id и token вставил, получил ошибку:
    -bash: curl: command not found
    - установил:
    apt install curl
    -запустил ещё раз и получил ошибку:
    curl: (3) Illegal port number
    -ошибка новая тупо из-за копипасты, затер случайно /api.telegram.org/bot, оставил ток token
    в итоге строчка стала норм (без soc5)
    запускаю и ничего, ошибки нет, сообщения в телеге нет...на сервере просто после ввода курсор переходит на новую строчку:
    >
    что это может быть? (заббикс 4.0+ngix)

    • а, всё, torsocks помог, ркн не пускал

      • Аноним

        и ещё "+", чтобы работали скрипты, то можно и в них перед /usr/lib/zabbix/alertscripts/..... дописать torsocks
        работает норм + бесплатный

  111. А как сделать отправку графика по заданному интервалу времени из забкса в телеграм?

  112. Будет ли статья про оповещения в телеграм, с новым API Zabbix 4.0, насколько мне известно через прокси данная статья не работает.
    Есть у нас реализации на питоне, которые это обрабатывают корректно. Но хотелось бы увидеть данную статью на вашем сайте с вашей точки зрения.

    • Оповещения по этой инструкции для версии Zabbix 4.0 работают. Это я точно знаю, сам настраивал. Но не через прокси, а напрямую. Судя по отзывам тут в комментариях, через прокси она тоже работает. Да я и не вижу причин, почему не будет работать. Прокси на работу с Zabbix никак не влияет, а используется только для отправки данных в Телеграм.

  113. Добрый день!
    при отправке с сервера все отлично, сообщения приходят, а при срабатывании триггера состояние отправки "неудачно", инфо:
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed

    0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* About to connect() to proxy blabla.ru port 1080 (#0)
    * Trying x.x.x.x...
    * Failed to connect to x.x.x.x: Permission denied
    * couldn't connect to proxy at blabla.ru:1080
    * Closing connection 0
    curl: (7) Failed to connect to x.x.x.x: Permission denied

    -rwxr-xr-x. 1 zabbix zabbix 358 Mar 27 09:18 telegram.sh
    centos7 zabbix4
    кому и какие разрешения нужно дать?
    заранее благодарен.

  114. Андрей

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

    • А что вы хотите получать при доступности сайта? Все шаблоны уведомлений хранятся в разделе Настройка -> Действия. Там можно задать шаблон письма о проблеме и о восстановлении.

  115. Андрей

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

    SSL received a record that exceeded the maximum permissible length.

    • Проверяйте все внимательно. Буквально позавчера все настроил по этой статье. Заработало сразу.

      • Андрей

        Проверил, все сделал корректно,ошибка:

        SSL received a record that exceeded the maximum permissible length.

        Может, провайдер заблокировал доступ телеграмм, можно проверить ?

        • Такая же проблема:
          curl: (51) SSL: no alternative certificate subject name matches target host name 'api.telegram.org'
          Похоже на блокировку telegram

          • Во втором скрипте, который с графиками, есть возможность использовать proxy. Настройки в конфигурационном файле. У меня как-то так всегда получается, что все сервера, что используют уведомления в телеграм, хостятся в европе. Ни разу не пришлось использовать прокси.

  116. Подскажите как вручную узнать itemid у графика zabbix 4.0

  117. Никак не могу понять, каким образом можно выделять текст оповещения жирным или курсивом.
    В Wiki проекта на github указано, что поддерживается Markdown, в описании telegram api говорится о возможности HTML и Markdown (В скрипте по дефолту, насколько я понял markdown).
    В любом случае, никакие теги не работают.
    Никто не заморачивался?

    • curl --header 'Content-Type: application/json' --request 'POST' --data '{"chat_id":"7678567467","text":"\uD83D\uDC4C - *Here* is OK emoji","parse_mode":"MARKDOWN"}' "https://api.telegram.org//sendMessage"

  118. Измененный скрипт для прокси, если кому нужно.
    #!/bin/bash

    token='ваш токен бота'
    chat="$1"
    subj="$2"
    message="$3"

    curl --socks5-hostname 27.113.255.154:1080 -s --header 'Content-Type: application/json' --request 'POST' --data "{\"chat_id\":\"${chat}\",\"text\":\"${subj}\n${message}\"}" "https://api.telegram.org/bot${token}/sendMessage"

    27.113.255.154:1080 - прокси для примера.
    Работает на centos 7

  119. Руслан

    Из-за ковычек, например в ошибке Problem name: Service "STacSV" (Audio Service) is not running
    режется сообщение и приходит Problem name: Service
    Подскажите, пожалуйста, как решить

  120. Никак не могу победить отправку графики, ошибка: zbxtg.py: Bad Request: IMAGE_PROCESS_FAILED
    да, кстати zabbix 4.0

  121. Аноним

    Всем привет, вопрос на засыпку. Забикс отправляет график на основе тригера (срабатывание загрузка порта). В телегу приходит только график Bits recived, но проблема наблюдается на bits sent.
    Я так понимаю график выжимает отсюда zbxtg;itemid:{ITEM.ID1}. То может нужно в место 1 ставить переменную? подскажите какую?

    • Открываешь в Заббиксе "Настройки" -> "Узлы сети" -> и в нужном узле переходишь в "Элементы данных".
      Наводишь курсор на нужный элемент, внизу смотри ссылку и находишь свой itemid.

  122. Здравствуй, All. Я только начинаю изучать линукс и заббикс, до этого все время админил на винде. Прочитав манул и комменты, все в итоге получилось. Попробую резюмировать для тех, у кого остались вопросы, т.к. вижу, что тема не стихает и все еще актуальна. Итак, подразумевается, что вы в России и что для телеграм вы подняли свой прокси-сервер, скажем, во Франции (как это сделал я) на Socks5. Скрипт /usr/lib/zabbix/alertscripts/telegram.sh
    будет иметь вид:
    ---
    #!/bin/bash

    token='67ххххх97:AAHKW8Zy0FeDwFcN2Tabrakadabra'
    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}\"}" --proxy 'socks5://193.70.ххx.xxx:52xxx' --proxy-user proxyloginvasya:proxypwdpupkin "https://api.telegram.org/bot${token}/sendMessage"
    ---
    остальное четко по манулу и все будет работать. Обращаю внимание, что при копипасте может "съехать" синтаксис команд, там, где двойное тире может вставиться одно длинное, также и кавычки съезжают. Короче, в терминале в редакторе стирайте копипастные спецсимволы и вбивайте заново, ну в общем не мне вас учить ;)

  123. Для работы через http-proxy в скрипте команде curl добавьте:

    /usr/bin/curl -x http://proxy-address:proxy-port - если прокси без авторизации

    /usr/bin/curl -x http://USER:PASSWORD@proxy-address:proxy-port - для прокси с авторизацией

    далее команда без изменений

    Узнать chat-id у канала:

    Если канал - Делаем канал публичным (можно после сделать приватным) и выполняем, изменив выделенное на своё:

    curl https://api.telegram.org/botBOT:TOKEN/getChat?chat_id=@mychannelname

    В ответ получите что-то типа:

    {«ok»:true,»result»:{«id»:-100ХХХХХХХХХ8,»title»:………

  124. Чтобы получить идентификатор группового чата, сделайте следующее:

    Добавьте в группу TeleOT BOT.

    Получить список обновлений для вашего BOT:

    https://api.telegram.org/bot/getUpdates
    Пример:

    https://api.telegram.org/botjbd78sadvbdy63d37gda37bd8/getUpdates
    Ищите объект "chat":

    { "update_id": 8393, "сообщение": { "message_id": 3, "с": { "ID": 7474, "first_name": "AAA" }, "чат": { "ID":, "название": "}," дата ": 25497," new_chat_participant": { "ID": 71, "first_name": "NAME "," имя пользователя ":" YOUR_BOT_NAME"}}}

  125. Алексей

    Подскажите, что за ошибка?
    * About to connect() to api.telegram.org port 443 (#0)
    * Trying 149.154.167.220...
    * Connected to api.telegram.org (149.154.167.220) port 443 (#0)
    * Initializing NSS with certpath: sql:/etc/pki/nssdb
    * CAfile: /etc/pki/tls/certs/ca-bundle.crt
    CApath: none
    * NSS error -5961 (PR_CONNECT_RESET_ERROR)
    * TCP connection reset by peer
    * Closing connection 0
    curl: (35) TCP connection reset by peer

    NSS обновлен.

  126. Добрый день!
    Сделал все по мануалу. С консоли отлично работает.
    /usr/lib/zabbix/alertscripts/telegram.sh xxxxxxxxxxx Проверка 'Тестовое сообщение'.

    При срабатывании тригера в zabbix, пишет: Неудачно "Process exited with code: 35"

    Отправка на почту работает отлично.
    Подскажите, пожалуйста, куда копать?

  127. Дмитрий

    Здравствуйте.
    Иногда приходит уведомление.

    Escalation cancelled: trigger

    Как понять что это за триггер?

  128. Мне тоже статья очень помогла полтора года назад, но в июле в Телеграм перестали падать оповещения... В zabbix показывает, что оповещения успешно отправлены, а на деле - нет. У меня одной такое и стоит разбираться самой или это у многих сейчас так из-за того, что Телеграм сейчас пытаются блокировать?

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

  129. Никита

    Разобрался- В меню Действия нужно включить было опцию отправки сообщений администраторам и выбрать отправить через Telegram.Автору большое спасибо

  130. Никита

    HELP все уже перепроверил.скрипт сделал исполняемым,из консоли отправляет.Когда настроил zabbix то пропадес созданоое оповещение в настроках пользователя само по себе то вообще отключиться оповещение.У меня zabbix 3.4 Помогите знатоки

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

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

    • вася пупкин

      тогда сам добавлю. для тех у кого сокс5 по паролю, чтобы заработал запрос curl, то перед --header надо вставить --socks5-basic Enable --proxy 'socks5://:' --proxy-user ':'

      у самого на centos7 работает

  132. Дмитрий

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

    centos 7
    curl 7.61 (пробовал так же с 7.29)
    open ssl 1.1.0.i (пробовал 1.0.2k-fips )
    firewalld Отключет
    selinyx отключен

    Connected to api.telegram.org (149.154.167.220) port 443 (#0)
    * Initializing NSS with certpath: sql:/etc/pki/nssdb
    * CAfile: none
    CApath: none
    * loaded libnssckbi.so
    * NSS error -5961 (PR_CONNECT_RESET_ERROR)
    * TCP connection reset by peer
    * stopped the pause stream!
    * Closing connection 0

    • Дмитрий

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

  133. Евгений

    Добрый день!
    У вас сейчас работает отправка сообщений из скрипта в телеграм?
    После подключения прокси перестал отправлять

    • Не знаю, надо будет найти время и проверить. Я сам не пользуюсь этой отправкой и после включения блокировок не проверял работу.

  134. Пока ещё не забыл всё. Напишу как я решил проблему со своего прошлого коммента.
    Заббикс пришлось переустановить т.к. я намудрил с макросами.
    В чистом исполнении сделал всё по этому ману, но при срабатывании триггера скрипт не отрабатывал, в ошибку писал, мол таймаут.
    Таймаут был т.к. скрипт обращается на апи телеграма, который у нас забанен роскомнадзором :)
    Это я предусмотрел заранее, но упустил из вида, что скрипты из заббикса выполняются от его имени ( я писал .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

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

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

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

  136. Александр

    Спасибо! На 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

    Ва

    • Дмитрий

      Нужно убрать ковычки " в прототипе триггера

      • Алексей

        #!/bin/bash

        token='000000000'
        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"
        ~
        ~
        ~

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

    • Поясните пожалуйста, где на надо кавычки убрать, что бы приходило помимо "Problem: Service" еще название службы и узла.

  137. Дмитрий

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

    OK: Serice или Problem:Service

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

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

  139. Может подскажет кто, как в скрипте настроить, чтобы через прокси обращение шло к 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"

  140. Дмитрий

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

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

  141. Дмитрий

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

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

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

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

  143. команда:
    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"}

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

    • использование прокси решает проблему

      • Ну хоть бы написал как это решает проблему. Что для этого надо? Взять бесплатный прокси? Купить? Или ваще ничего не надо, просто поставить в конфиге использование прокси. Ещё пошлите меня маны читать....

  145. Дрюбзик

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

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

  146. Не приходят графики(
    $ 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 - тоже правильные

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

  148. /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? Куда еще можно высылать оповещения?
          Еще заметил сообщения о проблеме или задваиваются или не приходят, а приходят только решения проблемы. В действиях все ок так как в почту все приходит корректно, грешу на работу прокси.

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

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

  150. Руслан

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

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

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

    • Какой ответ должен прийти? У меня приходит ответ такого плана: SSL received a record that exceeded the maximum permissible length.

  152. Maksim Isaev

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

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

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

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

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

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

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

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

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

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

  156. Что то отвалилось?
    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

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

    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'

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

  158. Добрый день! У меня почему то на 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 лежат на поверхности - неправильная дата и время на сервере.

    • Доброе утро. Попробуйте так:
      curl -k --insecure --socks5-basic Enable --proxy 'socks5://ip:порт' --header 'Content-Type: application/json' --request 'POST' --data '{"chat_id":"-ваш id чата","text":"Проверяю отправку оповещений ботом"}' "https://api.telegram.org/токен"

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

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

    • Алексей Швецов

      Старайтесь в элементах данных/триггерах не использовать "
      У меня похожий случай. Настроены SNMP Trap, там по факту всегда используется символ ", пришлось в элементе данных настроить предобработку replace/замена. Меняю " на '

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

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

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

  162. Алексей

    Добрый день.
    Нужна помощь по настройке данной радости на 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 я на нем включил, но в логах пусто.

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

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

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

      • даниил

        простота обновления контейнера например, дополнительная изоляция

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

          • Заивист от инфраструктуры. Нет никакого смысла разворачивать заббикс как стендалон сервис, если инфра изначально основана на оркестрации контейнеров

            • Что он будет мониторить в таком случае? Для мониторинга кластера с контейнерами он не подходит. Зачем его в нем разворачивать?

  163. Ростислав

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

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

  164. Ростислав

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

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

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

    • Алексей

      Решили проблему с затраиванием? Если да - отпишитесь плиз...

      • Михаил

        Возникла та же ошибка. В моём случае это было вызвано тем, что при отправке уведомления скрипт ловил ошибку (так не был создан график) и отправлял три сообщения. После того, как убрал триггеры на те элементы, где графики не созданы, всё стало нормально.

  166. Здравствуйте автор!
    Спасибо большее за Ваши статьи, очень помогают как начинающему сис админу.
    Вынужден заметить, что натолкнулся на проблему:
    "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.

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

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

      • Шамиль

        Что значить писать название группы)), не как не могу победить ошибку needs to send some text bot in private

  168. Николай

    Попробовал прикрутить скрипт к 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.
      т.е форматирование не применяется

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

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

  170. Андрей

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

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

  171. Дмитрий

    Как всегда хорошая статья, только вчера настроил по другому способу через 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"

  172. спасибо!

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

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar