Я чаще всего использую стандартные уведомления от Zabbix на почтовый ящик, так как это позволяет управлять временем для их просмотра. Тем не менее, решил пойти в ногу со временем и попробовать настроить отправку оповещений из Zabbix в популярный мессенджер Telegram. К тому же я активно пользуюсь этим мессенджером и считаю его очень удобным.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Введение
Способов настройки уведомлений из заббикса в телеграм существует несколько. Их можно разделить по информативности:
- Отправка только текстовых оповещений.
- Отправка графиков.
Так же можно разделить по типу реализации:
- Использовать встроенный webhook в zabbix.
- Написать свой простой скрипт для уведомлений.
- Взять готовую реализацию уведомлений в telegram на github.
Я постараюсь разобрать все возможные варианты. Идти будем от простого к сложному. Сначала настроим текстовые оповещения, потом добавим графики. Отправлять будем как в личку, так и в группу.
Я буду настраивать все в zabbix 6.0, установленный на Oracle Linux 8. Принципиального значения это не имеет, решение будет одинаково работать практически на всех дистрибутивах Linux.
Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:
То же самое на Debian 10, если предпочитаете его:
Создание бота в Telegram
Первым делом создадим бота, через которого будем слать оповещения из заббикса. Для этого добавляем себе в контакты @BotFather и пишем ему сначала /start, потом /newbot.
Мы создали бота для оповещений и получили для него 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.
Если у вас нет этого шаблона оповещения, то вы можете скачать его самостоятельно из официального репозитория Zabbix в разделе /templates/media/telegram/. Шаблон будет отсутствовать, если вы обновляли сервер с более ранних версий. При обновлениях новые шаблоны автоматически не добавляются. Вам нужно вручную скачать исходный код шаблона в текстовом формате yaml и импортировать его на свой сервер. Выбрать версию шаблона нужно такую же, как ваш сервер. По умолчанию в репозитории скачивается шаблон последней версии из ветки master. Вам нужно выбрать свою через выбор ветки репозитория, например, release/6.0.
Внутри шаблона увидите некоторые параметры. Можно так же посмотреть текст скрипта, который используется для отправки оповещений. В целом, тут сейчас не обязательно что-то менять. Дефолтные настройки полностью рабочие. Надо только указать токен бота.
Тут же можете шаблоны поправить так, как вам нравится. Это нововведение 5-й версии Zabbix - правка шаблонов оповещений в настройках самих оповещений. Это позволяет создавать для каждого типа свои шаблоны. Очень удобно. Я люблю добавлять в заголовки emoji, что-то переводить или добавлять новые макросы. Как минимум, всегда добавляю в заголовок имя хоста через макрос {HOST.NAME}. Получается примерно так:
Давайте теперь проверим отправку уведомлений через этот способ. Нажимайте Тест.
Я указал текст сообщения, заголовок, свой id и token бота. В итоге мне в личку пришло сообщение от бота.
Если хотите отправить оповещение в группу, то сначала создайте ее, а потом добавьте туда бота. Не потеряйте минус в id группы. Его тоже нужно указывать. Я сначала не понял этого и копировал id группы без минуса. В итоге, оповещения в группу не отправлялись.
Итак, убедились, что сообщения в telegram нормально отправляются. С технической стороны проблем нет. Теперь настроим отправку уведомлений по событиям. Я обычно для этого использую тестовый триггер. В стандартном шаблоне Linux by Zabbix agent есть элемент данных Number of logged in users, который считает количество залогиненных пользователей. Я для него делаю триггер, чтобы он срабатывал, когда пользователей 2 и более. И с его помощью тестирую уведомления, просто подключаясь на сервер по ssh двумя подключениями одновременно.
Выражение триггера:
last(/Zabbix server/system.users.num)>1
Теперь идем в настройки пользователя и добавляем ему способ оповещений через 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
Копируем в директорию /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, все остальное идентичное.
Так же нам нужно настроить шаблоны оповещений. Я предлагаю следующий вариант. Тип сообщений Проблема.
Тема по умолчанию | {{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 servers, так как будем слать уведомления только по триггерам этого хоста.
Теперь добавляем пользователя и помещаем его в эту группу.
Добавляем ему Telegram группу в способы оповещения. Добавлять можно не по id, а по имени группы, так удобнее.
Так же добавим персональные уведомления Telegram пользователю admin. Здесь уже указываем id учетной записи .
Настраиваем действия. В данном примере я делаю отправку всех уведомлений пользователю Admin, у которого в способах оповещений указана личка telegram. А сообщения по конкретному триггеру Zabbix server: Zabbix agent is not available (for 3m) пользователю tg-group, у которого указана группа telegram.
Думаю, идею вы поняли. Можно очень гибко настроить уведомления в Zabbix и это очень круто и удобно. И работает из коробки. Проверим теперь, как будут выглядеть оповещения в telegram. Останавливаем на сервере zabbix-agent и ждем работы триггера с оповещениями.
Проверяем Телеграм и видим там одинаковые уведомления и в группе, и в личке.
После обновления проблемы или закрытия, придут свои оповещения.
При этом, если сработает любой другой триггер, уведомление придет только в личку. В группу ничего не будет отправлено.
Шаблоны и графики в уведомлениях можете настраивать по своему вкусу. Обращаю внимание на графики. Они приходят в отдельных сообщениях. Далее я покажу еще один скрипт для уведомлений в Telegram. Он немного по-другому работает - прикрепляет сразу ссылки на историю и триггер, а так же вкладывает графики в то же сообщение, что и текст.
Если у вас возникают ошибки с отправкой графиков, то проверить их работу можно в консоли. Вот пример запроса.
# sudo -u zabbix ./zbxtg.py zeroxzed test "$(echo -e 'zbxtg;graphs: \nzbxtg;graphs_period=3600\nzbxtg;itemid:23301\nzbxtg;title:ololo')" zbxtg.py: Bad Request: PHOTO_INVALID_DIMENSIONS zbxtg.py: Zabbix user couldn't get graph (probably has no rights to get data from host), check script manually, see https://github.com/ableev/Zabbix-in-Telegram/wiki/Graphs
Это нормальный вывод ошибки, которая указывает на то, что выбран itemid 23301, которого либо не существует, либо к нему нет доступа, либо для него нет графика. Если выбрать правильный itemid, то после выполнения скрипта никакого вывода не будет, а в телеграм будет отправлен выбранный график.
Оповещения в telegram со ссылками на график и триггер
Расскажу про еще один интересный скрипт для отправки красивых и функциональных оповещений в 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.
Шаблоны тем сообщений можете настроить как вам больше нравится. Автор предлагает такие:
{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 менять нельзя. Именно они инициируют отправку тестового сообщения. Вот как оно выглядит.
То же самое можно сделать через web интерфейс.
Если всё в порядке, подключайте данный тип уведомлений к пользователю, указывайте его в действиях и проверяйте. Уже не буду это подробно описывать, так как устал. Материал и так очень объемный получился. В итоге уведомления в Телеграме от этого скрипта будут выглядеть вот так:
Текст более информативен по дефолту и выглядит приятнее, графики в одном сообщении с текстом. В последней строке есть готовые ссылки на триггер, историю по айтему. Только имейте ввиду, что url для ссылок берется из конфига и если у вас там указан localhost, то только с него и можно будет их посмотреть. Так что указывайте внешний, а не локальный url. Из минусов отмечу тоненькие графики без заливки. В скрипте от ableev они более наглядные.
Заключение
Теперь у нас Zabbix работает современно, модно, молодежно. Использует Telegram для отправки оповещений с графиками, ссылками и т.д. Функционал удобный и настраивается достаточно просто. У меня практически не было затруднений, когда разбирал тему. Беру себе на вооружение и использую по необходимости. Хотя сам не люблю оповещения в Телеграме, и чаще всего их отключаю, как и от остальных программ. Не нравится, когда меня в каждую минуту могут отвлечь какие-то события. Проверка почты раз в 30 минут самая подходящая интенсивность для меня.
Тем не менее, при работе коллектива, оповещения в общую группу могут быть очень удобны. Особенно, если только на мониторинге сидят отдельные люди, в чью задачу входит оперативная реакция на события.
Себе я шлю оповещения в Telegram только для тех событий, на которые нужна немедленная реакция. Их на самом деле не так много. Если у вас их много, я вам искренне сочувствую. Лучше сделать так, чтобы их было как можно меньше, а в идеале не было совсем. Жизнь будет комфортнее.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Добрый день, спасибо за статью. Может кто сталкивался с такой проблемой:
уволился сисадмин, который создал бота и группу в телеге, сейчас достаточно что бы он поменял администратора группы в телеге или все таки нужно заново создавать бота на новом телефонном номере и менять токен в настройках заббикса?
Спасибо.
Сам и отвечу)))) Нужно просто передать права на бота заббикса, инструкция есть в инете, ну и админа группы
Добрый день! я настраивал Заббикс по инструкции но выдаёт ошибки:
[2024-11-14 10:14:28,944] - PID:3725939 - main() - zbxTelegram.py:498 - INFO: Send to -4562985729 action: {Problem} Warning {Warning}: Interface Gi2/0/18(-=Harmonic-II-OUT=-): High bandwidth usage (>90%)
[2024-11-14 10:14:29,267] - PID:3725939 - get_chart_png() - zbxTelegram.py:194 - ERROR: Exception occurred: cannot identify image file
Кто еще сталкивался с таким? можете помочь?
Тестовые сообщения проходят без каких-то проблем.
А в latest data для этой метрики график есть? Может он не генерируется по какой-то причине. Текст ошибки намекает на то, что графика нет.
График есть. В этом и вся загвостка.
Использовал я второй способ нотификаций с графиком который вы тут продемонстрировали.
https://github.com/xxsokolov/Zabbix-Notification-Telegram
Добрый день, подскажите пожалуйста в какую сторону копать, настроено что при высокой важности триггера происходит отправка сообщения в телеграмм, пример при отключении клиентского порта коммутатора приходит сообщение link down, и график что порт в down(имеется в виду логически 1 или 2), а как добавить чтобы при срабатывании триггера что порт упал, отправлять график загрузки это порта, а не график статуса
Это нетривиальная задача. Нужно будет писать свой скрипт конкретно для этой отправки и разбираться, в каких айтемах хранится нужная информация, чтобы её прикреплять к оповещениям. Готовых инструментов для этого скорее всего не найти. Надо изучать, как работают существующие скрипты с отправкой графиков и писать на их основе то, что нужно Вам.
sudo -u zabbix ./zbxtg.py «@Neilxgod» «test» «test»
zbxtg.py: Conflict: can't use getUpdates method while webhook is active; use deleteWebhook to delete the webhook first
Traceback (most recent call last):
File "./zbxtg.py", line 940, in
main()
File "./zbxtg.py", line 809, in main
uid = tg.get_uid(zbx_to)
File "./zbxtg.py", line 180, in get_uid
for m in updates["result"]:
KeyError: 'result'
Добрый день. Не проходит тетст:
/usr/lib/zabbix/alertscripts/zbxtg.py:458: SyntaxWarning: invalid escape sequence '\s'
age_regex = "r'(([0-9]+d)?\s?([0-9]+h)?\s?([0-9]+m)?)"
/usr/lib/zabbix/alertscripts/zbxtg.py:659: SyntaxWarning: invalid escape sequence '\s
Всем привет. Не могу установить графики на 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.
а можно как-то вместо отправки текстового сообщения _инициировать с консольки звонок в телеграм ?
Я не знаю такой возможности в telegram.
Добрый день! Неделю назад перестал отправлять сообщения. Хотя 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.
Может кто подсказать ?
В ошибке чётко указано: Couldn't connect to server. То есть это сетевая ошибка с доступностью сервера api telegram.
Да , но сервера я пингую https://api.telegram.org/.
Пинг это протокол icmp, а вебхуки работают по http. Проверяйте проходимость запросов к api из консоли zabbix сервера.
Подскажите, как настроить отправку уведомлений в одну из тем группы?
Я не делала такое ни разу, поэтому не подскажу. Надо смотреть API запрос для отправки в тему, и использовать его в скриптах.
Тоже такой вопрос, хотелось бы чтобы бот отправлял в определенную тему в группе, а не в главную тему. Я так понял за это отвечает параметр message_thread_id, это id темы, но вот теперь вопрос куда его надо прописать?
может кто знает как в скрипте xxsokolov/Zabbix-Notification-Telegram в сообщениях делать текст выделенным шрифтом?
в стандартном скрипте раньше делал так:
💔 {HOST.NAME}
{EVENT.NAME}
детали: {EVENT.OPDATA}
время аварии:
{EVENT.TIME} on {EVENT.DATE}
очень эффектно и читаемо выглядело.
сейчас попробовал вставить это все в XML формат в шаблона, и оно конечно же не заработало.
полез в скрипт, там стоит метод HTML.
Чую что дело все в разметке XML. и еще этот тег который экранирует спецсимволы .
а без него не работает.
кто знает как сделать разметку?
блин HTML теги схавал браузер)))
в общем теги которые начинаются с < или > ))
Тот же вопрос, как делать выделение текста?
Владимир, а вы не в курсе, как сделать, чтобы в телегу отправлялись оповещения только от настроенных нами в Action -> Trigger actions ? Только и ИСКЛЮЧИТЕЛЬНО от них.
Если настроить пользователя на получение оповещений, то он сразу их начинает получать... Вообще по всем триггерам, совпадающим по уровню важности (если галочки в профиле пользователя стоят) Еще до настройки Action -> Trigger actions.
В итоге мне приходит сразу 2 уведомления: от настроенного там триггера и второе от настроенной в параметрах пользователя в Media столбец Use if severity. Не знаю как это все по русски сформулировать.
Я не понял вопроса. В Action -> Trigger actions как раз и настраивается то, что будет отправляться. И там это гибко реализовано. Можно отдельно пользователей, триггеры выбирать, по которым будут оповещения.
Получается 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
}
наверное умелые ребята сделают красивее, но у меня получилось так, и это работает
это попроще чем инсталлировать целиком скрипты с графикой
Traceback (most recent call last):
File "/usr/lib/zabbix/alertscripts/zbxtg.py", line 17, in
import zbxtg_settings
ModuleNotFoundError: No module named 'zbxtg_settings'
Ошибка после теста
Доброго вечера! создал несколько групп в telegram, добавил бота во все группы. Подскажите пожалуйста, как теперь настроить, чтобы для каждой группы хостов уведомления отправлялись соответствующим группам в telegram. есть группа хостов в Zabbix: cisco и hp, соответственно есть группы в telegram, в одной группе оповещения по cisco и hp, а другая группа только должна видеть уведомления по hp
В статье есть пример, где создаётся учетная запись, у неё указывается конкретная группа tg, куда будут отправляться уведомления. Можно насоздавать разных пользователей с разными группами в адресе назначения. И дальше действиями распределить уведомления по разным пользователям, и соответственно по разным группам.
При попытке отправить график из консоли
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
Разобрался. Не тот адрес.
Теперь как и многие
zbxtg.py: Bad Request: IMAGE_PROCESS_FAILED
Добрый день! Подскажите как настроить определённую группу компьютеров для оповещения. Например: у меня есть сервера 1с , создал группу телеге, добавил людей, но мне нужно добавить определенные сервера или группу серверов. Где их добавлять? Спасибо
Добавить необходимые сервера в отдельную группу в Zabbix.
Создать отдельного пользователя, для него прописать ид группы в телеге.
В "действиях триггеров" создать оповещение этому пользователю указав группу узлов как условие.
Как-то так.
Добрый день.
Centos 8 , zabbix 6.4
Настраиваю отправку оповещений (email, telegram)
При отправки тестового сообщения выходит ошибка: "Подтвердите действия на странице, SyntaxError: Unexpected end of JSON input"
"Теперь проверим, как работает отправка уведомлений через нашего бота. Для этого в консоли сервера набираем примерно такую команду:"
Проверяю через консоль, сообщение в телегу приходит
Если у кого-то, после обновления возникают ошибки:
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
Всем привет!
Скажите, на Zabbix 6.4 кто то добился отправки графиков? Текст норм летает, а вот картинки не могу добиться пересылать.
Добавьте доступ к веб-интерфейсу для аккаунта, от которого отправляется. Без этого не робит
при проверке отправки графика выдает ошибку
# 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 создается
Все уведомления по триггерам приходят.
Но.. если шаблон содержит кириллицу, то приходят "?????"
Таблицы БД с кодировкой utf8.
Это лечится?
По идее, да, потому что у меня нет проблем с кириллицей в шаблонах. И ни разу не было. То есть у Вас явно какая-то проблема с кодировками, но где именно, не знаю. Заочно трудно сказать. Либо в базе, либо в шаблонах.
при тесте выдает ошибку:
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'
Привет я настроил оповещения в Телеграм согласно ваши статия, у меня через user не работает
1) python скрипт через user проверяю не работает тестовые сообшения не получаю
zbxtg.py: User 'ZabbixGetMonBot' needs to send some text bot in private
2) python скрипт через группа проверил работает
*Сохраняем конфиг и проверяем работу скрипта. Если вы только создали бота, то не забудьте ему написать личное сообщение, для настройки персональных сообщений, либо из группы, чтобы он мог слать оповещения в группу. Если этого не сделать, получите ошибку.*Настроил оповещения в Телеграм согласно этой статьи
Настроил оповещения в Телеграм согласно этой статьи, автору спасибо всё работает, но моя радость была не долгой, рассказываю почему.
У нас есть очень критичное оборудование на проблемы с которым нужно реагировать как можно быстрее и вот, я настраиваю телеграм оповещение и начинаю тесты. Что я ждал от телеграм оповещения, допустим я гуляю с детьми и мне нужно, чтобы в случае аварии телефон разрывался, играла громкая музыка или сирена и играла долго, пока я не услышу. Но то, что я увидел в телеграм на практике меня шокировало, Телеграм, весь такой покрытый аурой всемогущественности, миллионов ботов и т.д. как оказалось не может проигрывать на пришедшее сообщение мелодию длиннее 5 секунд, не больше 300 кбайт. На практике это выглядит как пару пиков и всё гудбай. Пока я гулял с детьми я пропустил все важные аварии которые только возникали. Вот знаете даже и не верится, что они создали кучу супер ботов и споткнулись на такой фигне. Удалил этот Телеграм из zabbix, теперь пробую Discort. Нужна софтина которая сможет играть длинную музыку на входящее сообщение, телеграму это оказалось не по зубам.
Можно звонок через Asterisk сделать, если последний есть под рукой. Настраивается не сильно сложно, зато звонок точно не пропустишь. Можно повторяющиеся оповещения делать хоть каждую минуту, пока ты не отреагируешь на инцидент. Вариантов решения задачи с оповещением через Zabbix множество.
Не совсем по теме, но все-же : есть около 200 камер dahua и десяток регистраторов, некоторые из них не поддерживают snmp , этот зоопарк можно мониторить в zabbix как-то кроме icmp ping?
Если у камер есть веб интерфейс, можно и его проверять. А у каких-то камер через веб интерфейс можно и картинку с камеры взять. Можно мониторить её размер. Если близок к нулю, значит картинки с камеры нет. Так что варианты разные могут быть.
Спасибо , очень помогли. Если я правильно понял, если у меня 200 камер мне надо завести в шаблоне 200 веб сценариев с отличием только в ip адресе камер ? Или можно поумнее сделать ?
Да, либо вручную, либо писать какую-то автоматику через Zabbix API. Механизмы авторегистрации или автообнаружения недоступны для web сценариев.
Можно создать шаблоны с веб-сценариями и применять их к группам хостов
Добрый день!
Требуется направлять уведомления о состоянии только конкретных устройств (не всех) и только конкретным пользователям (не всем) Заббикс.
Подскажите пожалуйста, каким образом это можно реализовать?
И можно ли направлять уведомления только по конкретным триггерам?
Спасибо!
Это всё без проблем настраивается через штатный функционал Actions (Действия). Там можно выбрать конкретные триггеры по разным признакам, например тэгам или группам, и выбрать группы пользователей, которым будут отправляться уведомления.
Нашел. Спасибо большое!
подскажите, куда копать
(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
У вас явно какие-то специфичные проблемы с правами доступа. Ни разу таких не видел, да и тут в комментариях никогда такие ошибки не показывали. Так что вам тут самим надо разбираться в своей специфике.
При выполнении скрипта ./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.
Кривые руки!)) Спасибо за статью!
Я поэтому не отвечал ничего. Знал, что где-то ошибка. Не так давно проверял всю статью. Всё, что описано, работает корректно, если правильно повторить.
Прочитав статью и большинство комментариев я не понял почему ни у кого не возникает вопрос о том, как ограничить для сервера где установлен zabbix выход в интернет только в сторону серверов Telegram и не более, неужели все дают полный доступ в интернет для сервера Zabbix ?
В основном zabbix это софт который у всех опрашивает технологическое оборудование, выходит что с одной стороны к примеру серверу Ubuntu + Zabbix дали полный выход в Интернет а с другой стороны доступ ко всему технологическому оборудованию компании. Да это самый страшный сон безопасника. Кто может быть уверен куда ломится ubuntu, куда ломится zabbix, что они скачают и не будет ли это зловред или anydesk внутрь корпоративной сети для чужаков. Я у себя для эксперимента сначала запустил уведомление в телеграм от zabbix но так как не знаю как ограничить доступ только для телеграм, пришлось это отключить и перейти на почтовые уведомления, с почтой хотя бы понятно, что можно зарезать выход только на один почтовый TCP порт.
А какие могут быть глобальные проблемы с безопасностью, если доступ к серверу имеете только вы и софт ставите только вы? Zabbix сервер не обязательно должен быть виден из интернета. И если уж у вас такие повышенные требования к безопасности, то вообще странно, что вы смотрите в сторону Telegram.
Добрый день!
Делаю оповещение по кол-ву авторизованных пользователей 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, там все подставится как надо.
Добрый день!
Спасибо за статью, помогла)
Вопрос по дополнительной настройки сообщения.
Как-то можно передать в Event Name значение данных, которое получаем с мониторинга?
Т.е. допустим мониторим свободное место на диске, срабатывает тригер, что места стало меньше. Как можно отправить текущее свободное место?
Для этого можно использовать макрос {EVENT.OPDATA}. Если не ошибаюсь, именно в нём хранится информация о метрике айтема, на который сработал триггер.
Добрый день! Есть задача по ограничению доступа к определенной группе оборудования для конкретной группы пользователей, тут вроде бы все понятно. Но можно ли сделать ограничение отправки уведомлений в Телеграм по этой группе оборудования для этих пользователей?
Я прям так сходу не отвечу, но по-моему, это реально. Настройки оповещений в Zabbix гибкие. Можно исключить эту группу из общих оповещений и сделать для них отдельное правило с и исключениями.
Здравствуйте, интересует следующий вопрос. На Zabbix настроено оповещение в телеграмм-боту. Оповещения работают, все ок, но так как сотрудники работают в разных часовых поясах, и у серверов так же могут быть разные часовые пояса, то оповещения приходят не совсем вовремя.
Если часовой пояс совпадает, то все ок, если нет то приходят только когда наступает нужное время для отправки. Уточните пожалуйста, можно ли это где то настроить что бы все оповещения шли без разницы какое время на сервере где мониторинг ведется?
При настройке действий триггеров ведь можно указать "отправлять незамедлительно". Или вам это не подходит?
Если честно, я не совсем понял детали проблемы. Что и кому приходит не вовремя? По идее все рассылки сервер мониторинга делает в соответствии со своими настройками времени.
А вообще задача нетривиальная. У Zabbix есть встроенный триггер на соответствие времени серверов и самой системы мониторинга. Важно, чтобы время было одинаковое. А если оборудование в разных часовых поясах, то мне кажется, тут удобнее поднять под каждый часовой пояс свой сервер мониторинга. А потом их свести в какую-то единую систему, например Grafana или Monq.
Полезный материал, для начала настроил через WebHook, чтобы хоть какая нибудь информация поступала, как нибудь сяду остальное почитаю, автору спасибо
вопрос снимается, гугл в помощь:
Для получения идентификатора группы можно воспользоваться ботами, например Get My ID
Добрый день, прошу прощения за совсем простой вопрос, застопорился на этапе инструкции где описывается скрипт " id моего аккаунта. Чтобы его узнать, добавьте бота @my_id_bot и напишите ему /start"
я контакт добавил, пишу ему /start, но не пойму где брать "id моего аккаунта" ?
Отличнейшая статья!
Были вопросы (в Linux я совсем новичок), но самое главное прочитать до конца и делать все внимательно.
Автору огромное спасибо!
А можно ли исключить оповещения по определенному признаку?
Например, есть точки доступа 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 пришли на следующий день проблема закрылась.
Здравсвтуйте!
Спасибо за статью! Все настроил практически без изменений))
Несколько моментов, может кому поможет т.к. статья в топе:
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
Спасибо за подсказку!
выдает такую ошибку
Sending failed: Error: cannot get URL: Couldn't resolve host name..
когда отправлял из терминала при помощи curl, все сообщения отправляются и доходят без каких либо ошибок
всем привет, может кто сталкивался с такой проблемой
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
причем сообщения приходят а вот график нет
Добрый день, столкнулся точно с такой же проблемой, если у вас есть решение может поделитесь?)
У меня такая же ошибка ,потратил пол дня но так и не нашел ответа ,как вы исправили её ?
Добрый день, как отправить приватное сообщение боту?
После обновления 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'
# dnf install python3-pip
# pip3 install -r requirements.txt
помогли решить проблему
Уважаемые, кто сталкивался с
[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.
Нет сетевого доступа к урлу телеграма.
Добрый день. Статья отличная, спасибо!
Такой вопрос. При отправке в Телеграм сообщения о проблеме с хостом, имеющем в Visible name кириллицу, в Телеграм приходит сообщение с ??? вместо русских букв. Кодировка базы zabbix - UTF8. В чём может быть проблема?
Такая же проблема. Обновлялся с 4.0.14 до 6.0 Бьюсь второй день, пока ничего не помогло.
День добрый. Настроил отправку уведомлений с графиками в личку, Все отлично работает. Создал группу в телеграмм, включил туда 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
Удалить
Добавить
что я делаю не так? Как устранить проблему?
у меня так же
Надо писать название группы, а не ИД
и имя группы писал, результат тот же....
Здравствуйте, возможно не совсем понимаю, но ведь этот бот легко ищется в поиске, и потом кто угодно может добавить его себе в контакты\группу и тоже будет получать уведомления о всех проблемах в нашей системе ? Например я добавлю себе вашего бота, и буду знать когда у вас какая-нибудь система имеет проблему. Или это не совсем так работает ?
Нет, это не так работает. Чтобы бот что-то вам отправлял, надо его настроить. А чтобы его настроить, нужно знать его token. Так что пока ваш токен никто не знает, вашего бота невозможно никак использовать.
Добрый день, подскажите пожалуйста, может кто-то сталкивался и делал такую вещь. У меня настроено Обнаружение устройств и действие на это правило обнаружение - все находиться в определенной подети и добавляет узел как надо, вешаются шаблоны и т.д. , но появилась необходимость в этом действии добавить сообщение в jira или telegram, о том что узел новый найден - но не работает, хотя сообщения по авариям (тригерам) в jira и telegram стабильно отправляются.
У меня тоже самое
You need start a conversation with your bot first ...
token есть! id группы есть! сообщение /start@имя_бота в группу отправлял.
НЕ РАБОТАЕТ!
Нам нужно будет установить несколько модулей 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 не найден.
Спасибо! Уже исправил. С этим теперь норм
Добрый день, подскажите пожалуйста, как решить проблему
По 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
и после этого как раз выдает ошибку
Подскажите, можно ли в отдельную группу телеграм получать сообщение только от одного сервера или нескольких, но не всех серверов прописанных в Заббиксе?
Да, можно. В действиях можно ограничивать зону действия уведомлений. Можно добавлять различные условия на основе хостов, триггеров, пользователей и т.д.
Доброго дня!
все настроил и все работает. Немного раздражает что прихожят по 2 одинаковых сообщения)
не понял почему и где надо "крутить"?
Zabbix 5.4.2
Добрый день!
Можно ли настроить оповещения следующим образом?
Если есть интернет, то все оповещения уходят через Telegram,
иначе все оповещения уходят через SMS.
Как только появляется интернет, все оповещения опять уходят через Telegram.
По-моему, можно. Но я на 100% не уверен. Надо уточнять, есть ли возможность в действиях делать условие на доставку уведомления по одному из способов.
Вот именно, что нет, по-крайней мере в версии Zabbix 5.0.12.
Я решил спросить у вас, надеясь на то, что возможно вы сталкивались с этим вопросом и решили его по своему.
Я настривал по статье 2 года назад, сейчас необходимо внести изменения, но статья уже не бьётся. Тут уже 5ый заббикс и т.д. Толку от неё 0.
Вообще-то от статьи с 4-й версией сейчас будет толку 0, так как 5-я вышла уже давно. Скоро 6-я выходит. Поддерживать статьи под все старые версии у меня нет ни времени, ни желания.
Нашел решение проблемы с графиками, которые перестали отправляться в Zabbix 5.2 (скриптом от ableev).
В zbxtg_settings.py в переменной zbx_server убрать в конце слэш.
Было:
zbx_server = "https://example.com/"
Стало:
zbx_server = "https://example.com"
Спасибо!!!
Добрый день, подскажите где ошибка.
Настроил по этому шаблону 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
И естественно ничего не приходит, подскажите куда копать?
Добрый день!
Прошу помочь.
Все настроил по вашей инструкции. Спасибо что все доступно объяснили.
Сообщения о возникших проблемах приходят на telegram.
Возникла проблема с отправкой графиков. Версия Zabbix 5.2.6
Вместо графика пишет следующее:
Zabbix получил некорректный запрос. Поле "from" не корректно: ожидался период времени.
Решил. Моя ошибка в оформлении шаблона.
Еще раз спасибо Владимир, за отличную статью!
все работает просто огонь, спасибо!
Здравствуйте!
По какой-то причине, не отправляются не только графики но и обычные сообщения в телеграм. Тест из консоли - работает. Тест из настройки Media Telegram в Zabbix - работает. Добавил пользователю Media Telegram. Добавил Action Send message to user через Telegram. Возникает Problem - через веб интерфейс всплывает сообщение, а в телеграм не приходит. Подскажите, пожалуйста, куда копать.
Спасибо!
В веб интерфейсе можно посмотреть статус отправки всех оповещений по триггеру. У вас там что на тему уведомлений в телеграм?
кто то может поделиться скриптом который начинается 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 + '.';
}
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". М
не помогло.
Добрый день."
Zabbix 5.0.8.
В настройках "администрирование/способы оповещений" нет шаблона "Telegram" (как и многих других, показанных в данной статье). С чем это может быть связано?
Прочтя комментарии понял, что придется вручную добавлять этот способ. Скачал шаблон отсюда "https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/media/telegram". При попытке его импорта Zabbix пишет: "Ошибка при импортировании. Неподдерживаемое расширение файла импорта "yaml".
Помогите, пжлста, советом как добавить способ оповещения через Telegram
При обновлении Zabbix с более старых версий автоматически не обновляются шаблоны и способы оповещений. Их надо импортировать отдельно, взяв, например, с github - https://github.com/zabbix/zabbix/tree/master/templates/media
Скачал файл media_telegram.yaml по вашей ссылке https://github.com/zabbix/zabbix/tree/master/templates/media
Zabbix выдает ту же ошибку при импортировании шаблона: Неподдерживаемое расширение файла импорта "yaml".
На сайте https://www.zabbix.com/documentation/5.0/ru/manual/xml_export_import указано, что версии 5.0 поддерживают только формат XML. Отсюда https://github.com/zabbix/zabbix/tree/release/5.0/templates/media/telegram скачал XML версию шаблона и все удачно экспортировалось.
Если у вас версия 5.0, то надо выбрать ветку 5, тогда шаблон будет в xml формате. Yaml появился только в 5.2 и вам не подходит.
Вроде все настройки сделал правильно, я все это делал не на локальном компе , а на сервере, и меня при тестовой отправке уже в самом заббиксе выходит ошибка, 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
Либо в пути или названии ошибка, либо у заббикса нет прав на этот файл. Тут четко указана проблема доступа.
Добрый день.
Не отправляются графики в телеграмм.
Если выполнить команду
./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 (способы оповещений). Подписывайтесь на мой телеграм канал, я рассказывал об этом :)
не совсем понял что нужно делать при такой ошибке, можете объяснить
Нужно перестать писать мне в личку (zeroxzed), а использовать свою учетную запись для тестов.
zbxtg.py: User 'zeroxzed' needs to send some text bot in private
Доброго дня.
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"
Если вдруг кому-то пригодиться.
Спасибо!
Добрый день. Спасибо за статью. Столкнулся с проблемой, через консоль проверку проходит, в чат отправляет, через веб меню , не проходит тест (Ошибка при тестировании способа оповещения.
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) нет.
А есть статья как отправлять sms не через gsm, а через оператора который есть?
Статьи нет. Настройка зависит от оператора. Кому-то можно просто email отправить и он перешлет по sms. У кого-то api, у кого-то вебхуки. В общем, тут от сервиса надо отталкиваться.
Кто смог настроить это дело на Zabbix 5.2? До этого всё работало, после обновление отвалилось(
Пока не видел информации, что это починили.
У меня на zabbix 5.2.6 не работали графики
Включил в Администрирование-Аутентификация-Настройки HTTP:
Поставить галку в чекбоксе- Активация HTTP аутентификации
Диалог входа в систему по умолчанию - Диалог входа в систему Zabbix
На последней версии скрипта выдает ошибку:
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
Сильное ощущение, что где-то просто свернул не туда. Есть предположение из-за чего такое может быть?
Надо разбираться в изменениях, и в скрипте. Думаю, кроме автора скрипта, никто это делать не будет. Я просто жду и не обновляюсь на 5.2 пока.
А скрипт-то официальный. И заббикс тоже ;)
Я погуглил и увидел, что я не одинок: https://www.zabbix.com/forum/zabbix-troubleshooting-and-problems/413170-slack-webhook-in-zabbix#post413170
правда, там про слак. Что более интересно - одинаковые ошибки у разных скриптов
Это так. Я тоже видел упоминания подобных ошибок, в том числе и тут на сайте в комментариях к другим статьям про Zabbix.
Используйте предыдущую версию скрипта. Столкнулся с аналогичной проблемой на 5.2.5
https://git.zabbix.com/projects/ZBX/repos/zabbix/raw/templates/media/telegram/media_telegram.yaml?at=8a8126f3f39f8b8a3ff059985aa32d236a37710f
Здравствуйте! 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
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, подумал, что уже исследовали этот вопрос.
Добрый день.
Подскажите, почему может вместо графика приходить картинка:
no permissions to referred object or it does not exist
И админа и специально созданного пользователя пробовал в скрипте прописывать, результат одинаковый.
itemid неверный. верный id можно посмотреть в адресной строке, выбрав нужный item-values в latest data
Проблема при тестировании ..
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'
Права на папку не настроили.
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
Не хочет отправлять кириллицу...
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, не отправляет кириллицу, на английском отправляется без проблем, вы решили это проблему? если да можете подсказать решение. Спасибо
Добрый день, решил. Отказался от кириллицы)
Добрый день. Можно ли формат даты оповещения изменить на 'ДД.ММ.ГГГГ' ?
Где именно формат даты изменить? Не совсем понял.
При отправке в телеграм алерт.
В стандартных шаблонах передается как {DATE}
Я, кстати, не знаю, как это изменить. В какой-то из версий они перешли на ISO формат даты - гггг-мм-дд чч:мм:сс Я не видел, чтобы формат можно было где-то настраивать. Если найдете решение вопроса, прошу поделиться в комментарии.
"ЕДИНЫЙ ФОРМАТ ДАТЫ И ВРЕМЕНИ начиная с версии 2.4.0
Форматы даты и времени в веб-интерфейсе Zabbix приведен к единому виду ГГГГ-ММ-ДД чч:мм:сс согласно стандарту ISO 8601. Новый формат применяется во всех местах за исключением графиков."
Макросы {DATE} {TIME} - наверняка берутся как системные ...А в линуксе по умолчанию ГГГГ-ММ-ДД. Можно только командой перевернуть...
К сожалению вопрос остается открытым
https://support.zabbix.com/browse/ZBXNEXT-5050?jql=text%20~%20%22date%20format%22
А у меня почему-то в способах оповещения только Email, Jabber и SMS, хотя заббикс обновлен до 5 версии
Шаблоны и способы оповещений не обновляются автоматически при переходе на следующую версию. Их надо отдельно импортировать. Взять можно в официальной репе на гитхабе - https://github.com/zabbix/zabbix/tree/master/templates/media
Да добавил, все работает спасибо!!!
Добрый день. Тестовое сообщение отправляется успешно как из консоли, так со страницы "Способы оповещений". Но сам Заббикс сервер не отправляет в Телегу. В логах также пусто. В каком направлении копать?
Может просто не настроили в действиях отправку уведомлений через telegram или пользователю не добавили этот способ оповещения? То есть просто не настроили все условия, чтобы оповещение ушло именно на телегу. Способ в статье рабочий, я недавно сам настраивал.
Нисколько не сомневаюсь в неработоспособности вашего способа.
Методом затыка "куда попало", нашел такое сообщение "No message defined for media type."
Все, получилось! В "способе оповещения" добавил "шаблоны сообщений".
Спасибо!!!
Самая шикарная нотификация которую я видел, все легко настраивается, у него даже чат с поддержкой есть. Постоянные обновления.
https://github.com/xxsokolov/Zabbix-Notification-Telegram
Спасибо за информацию. Выглядит интересно. Надо попробовать.
А что щас использовать для телеграма чтобы обходить зхапрет РКН? Текущим методом запросы не отправляются...
Прокси. Других вариантов нет. У некоторых хостеров телеграм не заблокирован. Я с них отправляю сообщения.
а у вас поддерживается markdown в новом zabbix ?
Я через скрипт, описанный в этой статье, отправляю. Специально markdown не проверял. У меня без него оповещения.
Подскажите, пожалуйста, каким образом можно в телеграм выводить теги события, записанные в триггере, чтобы потом по ним сортировать сообщения!
Здравствуйте. У меня вопрос. А этот скрипт, который пушит графики в телегу, только обычные классические линейные графики шлет? К примеру, в системе, у меня на события по месту на HDD круговой график, а присылается все равно стандартный линейный, который, конечно, показывает ерунду. И еще один вопрос по событиям у которых графика вообще нет, он все равно шлет его, но пустой, без данных (ошибок нет при этом, как писалось в статье). Можно сделать так, чтобы он не генерил графики там где их нет? Может кто-то задавался этими вопросами? Спасибо
вместо https://api.telegram.org
используйте
https://api.tlgr.org/
и будет счастье
https://core.tlgr.org/bots/api вот подробней
При тестировании способа оповещений выдает сообщение:
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
Добрый день. при выполнении: 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
Проблема в блокировке провайдера или в сертификате?
Точно не в блокировке, так как соединение произошло:
Connected to api.telegram.org
Отличная статья!
Всё замечательно и доступно разложено - рекоммендую к настройке!
Так же хочу поделиться, что на версии 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
Возможно, кому-то поможет :)
Всем удачи!
Да, статься рабочая. Вчера по ней в очередной раз все настроил.
В 4.4.8 штатный webhook telegram
Для тех, у кого не получается настроить уведомления в телеграм по данному способу. Хочу с вами поделиться одной находкой - бот в telegram @gmailbot. С его помощью можно получать уведомления в телеграм о новой почте в ящиках gmail. Тут же можно прочитать, переслать, пометить письмо прочитанным и т.д. Сама идея дублировать свою почту куда-то на сторону не кажется мне хорошей, но я увидел другое применение для этого бота.
Так вот. Сделайте отдельный ящик для Zabbix и настройте для него @gmailbot. Либо просто организуйте пересылку нужных писем в этот ящик. Будете получать уведомления сразу в телегу без настройки скриптов отправки, борьбы с блокировкой и т.д. Нужно будет только настроить штатную отправку уведомлений на почту, с чем в zabbix особых проблем нет.
Найти применение этому боту можно не только в zabbix. Можно организовать любые оповещения в телеграм на основе писем, которые достаточно просто переслать на почтовый ящик, привязанный к боту.
Если провайдер совсем совсем плохой, и даже через 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"
Добрый день.
Подскажите пожалуйста, каким правильным образом вы добавили зелёный смайлик в тему сообщения в телеграме как на вашей картинке в статье:
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}
Здравствуйте, столкнулся с проблемой. Прописываю тестовое сообщение:
/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
Добрый день! Удалось вам решить данную проблему?
День добрый
дошел до след шага
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
подскажите - что делать ?
Попробую уточнить еще раз. Выход в Интернет осуществляется через 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.
Проблему удалось решить только дав прямой доступ к api.telegram.org вне прокси.
Здравствуйте. Есть проблема. Есть 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?
Доброго времени.
Столкнулся с проблемой на 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=)
Здравствуйте, подскажите пожалуйста, как можно убрать отображение элементов данных с кавычками, если кавычки находятся в самом элементе? С помощью предобработки или фильтрации?
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')
message=$(echo ${message} | sed ‘s/"/\\\"/g’)
выдает ошибку
unexpected EOF while looking for matching `"'
syntax error: unexpected end of file
https://drive.google.com/file/d/1Hk7vY1QPeo9wlaD87CaAPe3si0-L-RDk/view?usp=sharing
Всем привет. Решил настроить отправку графиков и столкнулся с проблемой.
Оповещение в телегу приходит но без 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')"
Народ. Помогите пожалуйста кто сталкивался. 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
Какой там отступ, где там отступ я не понимаю
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
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)
Статья как всегда отличная! Давно уже копии статей находятся в WIKI как инструкции к работам.
По сабжу, также столкнулся с проблемой отсутствия информации о службе, при оповещении.
Приходят сообщения "PROBLEM: Service" и все. Подскажите как исправить?
Дело в том, что у вас есть кавычки в сообщении, их надо за экранировать
Допустим текст сообщения у вас в переменной TEXT, тогда
TEXT=$(echo ${TEXT} | sed 's/"/\\\"/g')
Скрипт отрабатывает из консоли, а с заббикса не отправляет сообщения.
Детали Media type test failed.
Process exited with code: 7.
Подозреваю что не хватает каких то прав...
Стоит убунту сервер, развернул из готового образа...
Такс, проблему частично решил дописав прокси в скрипт. НО! Теперь тест проходит, на проксе вижу обращение но мне в группу ничего не прилетает. Хотя тест с консоли прилетает.
Мне очень понравился скрипт который отправляет все в одном сообщение, куча настроек!
https://github.com/xxsokolov/Zabbix-Notification-Telegram
Выглядит симпатично. Надо будет попробовать, при случае.
Что то я не понял от слова совсем настройки.
zbx_tg_daemon_wl_ids = [-XXXXXXXXX ] - вот у меня не группа а чат. ChatID -XXXXXXX не работает когда я подставляю сюда его. Ставлю ID бота и боту все приходит.
zbx_tg_daemon_wl_u = ["ООО "Тра ля ля"", ] - вот тоже у меня имя чата на русском с пробелами и ковычками. В общем ребята, кто и как отправляет в чат сообщения?
Я так и отправляю, как в статье написано. Все работает. На прошлой неделе настраивал последний раз.
Добрый день, коллеги. Есть ли у кого ни то желание (у кого в наличии есть Zabbix под рукой для экспериментов) соорудить универсальный модуль для отправки уведомлений в Telegram, Viber, Skype, Sms и др.?
День добрый.
1000 раз уже все проверил, но сам заббикс не отправляет в телегу сообщения. Из консоли сервера все прекрасно уходит. CentOs 7 zabbix3.4, куда копать?
ошибка в журнале заббикса следующая выходит "Process exited with code: 35"
Разобрался со всем. Теперь хочу навести красоту. Когда сам заббикс отправляет уведомления по аллерту, то текст уведомления прилетает в телегу без разделения на абзацы. Почему?
Подскажите как решили ? Аналогичная проблема, с консоли приходит с заббикса нет.
Напиши на почту мне myweb.85@yandex.ru там удобнее будет, потом в телеге пообщаемся
Добрый день. Подскажите из за чего возникает ошибка {"ok":false,"error_code":404,"description":"Not Found"}
Спасибо.
Добрый день!
Помогите, пожалуйста, разобраться.
В телеграм отлично приходят события с linux-серверов, а вот с Win-машин все оповещения о сервисах только в таком виде:
Kakannivi ( terminal server 10.1.10.2) - PROBLEM: Service
На почту и в самом заббиксе всё содержательно. Запускаю сервис руками и в чат прилетает:
Resolved: Service
В комментах поднимался этот вопрос два раза и советовали поменять кавычки.
Игрался в разных вариациях, но всёравно не приходит полное содержание проблемы в телеграм (((
Можете ткнуть носом куда смотреть, а то нигде найти не могу эту проблему
Здравствуйте, проблема следующего характера:
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, что-то блокирует?
Добрый день. Подскажите пожалуйста, может кто сталкивался. Настроил проксирование через Tor, при проверки когда отправляешь запрос
/usr/lib/zabbix/alertscripts/telegram.sh botНомер Тест 'Проверяю отправку оповещений ботом', возврат с таким сообщением: {"ok":false,"error_code":404,"description":"Not Found"}
Как исправить?
Если на установленном telegram на ПК прописать ip машины где стоит tor то сообщения ходят нормально.
скрипт на шеле необходимо доработать, т.к. если в теме или тексте уведомления будет символ кавычек, остальной текст обрежется при отправке
экранирование можно сделать прямо в баше. символ экранирования обратный слэш '\'
чтобы вывести в текст обратный слэш его тоже надо экранировать обратным слэшем :)
правило такое
${mystring//pattern/replacement}
начало скрипта менять так
chat="$1"
subj="${2//\"/\\\"}"
message="${3//\"/\\\"}"
Спасибо за статью!
Настроил по методу с графиками, все работает!
Спасибо за статью!
I catched you!
Подскажите что делать ? у кого нибудь была такая проблема?
[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 на проверку бота у вас не заполнен.
Доброго вечера, создал бота, 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
работает норм + бесплатный
А как сделать отправку графика по заданному интервалу времени из забкса в телеграм?
Сам задал вопрос, сам и ответил https://linux96.ru/index.php/27-poluchenie-grafikov-zabbix-v-telegram
Будет ли статья про оповещения в телеграм, с новым API Zabbix 4.0, насколько мне известно через прокси данная статья не работает.
Есть у нас реализации на питоне, которые это обрабатывают корректно. Но хотелось бы увидеть данную статью на вашем сайте с вашей точки зрения.
Оповещения по этой инструкции для версии Zabbix 4.0 работают. Это я точно знаю, сам настраивал. Но не через прокси, а напрямую. Судя по отзывам тут в комментариях, через прокси она тоже работает. Да я и не вижу причин, почему не будет работать. Прокси на работу с Zabbix никак не влияет, а используется только для отправки данных в Телеграм.
Здравствуйте, а как настроить для 4.0
Точно так же, как в статье. Ничего не изменилось.
напрямую не хочет, хотя пингуется telegramm, ssl_error_syscall in connection to api.telegram.org 443
Добрый день!
при отправке с сервера все отлично, сообщения приходят, а при срабатывании триггера состояние отправки "неудачно", инфо:
% 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
кому и какие разрешения нужно дать?
заранее благодарен.
setsebool zabbix_can_network -P 1
помог
Добрый день, классная и полезная статья. Возникла небольшая проблема, настраиваю оповещение для доступности сайта, но когда сайт не доступен уведомление приходит но когда сайт становиться доступным уведомление приходит без измененный, такое же как и при недоступности сайта. Подскажите пожалуйста что нужно поправить?
А что вы хотите получать при доступности сайта? Все шаблоны уведомлений хранятся в разделе Настройка -> Действия. Там можно задать шаблон письма о проблеме и о восстановлении.
День добрый!
У меня ошибка после выполнения # 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. Настройки в конфигурационном файле. У меня как-то так всегда получается, что все сервера, что используют уведомления в телеграм, хостятся в европе. Ни разу не пришлось использовать прокси.
Подскажите как вручную узнать itemid у графика zabbix 4.0
Насколько я понимаю, он аналогичен graphid, который можно в адресной строке при ручном выборе графика посмотреть.
В том то и дело, у меня не подошло
Никак не могу понять, каким образом можно выделять текст оповещения жирным или курсивом.
В 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"
Измененный скрипт для прокси, если кому нужно.
#!/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
ps
Не забудьте поправить ковычки (=
Из-за ковычек, например в ошибке Problem name: Service "STacSV" (Audio Service) is not running
режется сообщение и приходит Problem name: Service
Подскажите, пожалуйста, как решить
Никак не могу победить отправку графики, ошибка: zbxtg.py: Bad Request: IMAGE_PROCESS_FAILED
да, кстати zabbix 4.0
Прочтение конфигурационного файла еще раз, очень внимательно - решило проблему. ))
а в чем была проблема?
некропостинг, конечно, но вдруг кому пригодится - там надо указать логин и пароль к апи
Попробуйте удалить слеш в конце URL в настройках
Всем привет, вопрос на засыпку. Забикс отправляет график на основе тригера (срабатывание загрузка порта). В телегу приходит только график Bits recived, но проблема наблюдается на bits sent.
Я так понимаю график выжимает отсюда zbxtg;itemid:{ITEM.ID1}. То может нужно в место 1 ставить переменную? подскажите какую?
Открываешь в Заббиксе "Настройки" -> "Узлы сети" -> и в нужном узле переходишь в "Элементы данных".
Наводишь курсор на нужный элемент, внизу смотри ссылку и находишь свой itemid.
Здравствуй, 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"
---
остальное четко по манулу и все будет работать. Обращаю внимание, что при копипасте может "съехать" синтаксис команд, там, где двойное тире может вставиться одно длинное, также и кавычки съезжают. Короче, в терминале в редакторе стирайте копипастные спецсимволы и вбивайте заново, ну в общем не мне вас учить ;)
Для работы через 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»:………
Чтобы получить идентификатор группового чата, сделайте следующее:
Добавьте в группу 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"}}}
Подскажите, что за ошибка?
* 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 обновлен.
Добрый день!
Сделал все по мануалу. С консоли отлично работает.
/usr/lib/zabbix/alertscripts/telegram.sh xxxxxxxxxxx Проверка 'Тестовое сообщение'.
При срабатывании тригера в zabbix, пишет: Неудачно "Process exited with code: 35"
Отправка на почту работает отлично.
Подскажите, пожалуйста, куда копать?
Здравствуйте.
Иногда приходит уведомление.
Escalation cancelled: trigger
Как понять что это за триггер?
Мне тоже статья очень помогла полтора года назад, но в июле в Телеграм перестали падать оповещения... В zabbix показывает, что оповещения успешно отправлены, а на деле - нет. У меня одной такое и стоит разбираться самой или это у многих сейчас так из-за того, что Телеграм сейчас пытаются блокировать?
Омг, что-то я почему-то искала новые комментарии наверху, а не внизу. Вопрос снимаю, вижу, что уже были обсуждения данного вопроса...
Разобрался- В меню Действия нужно включить было опцию отправки сообщений администраторам и выбрать отправить через Telegram.Автору большое спасибо
HELP все уже перепроверил.скрипт сделал исполняемым,из консоли отправляет.Когда настроил zabbix то пропадес созданоое оповещение в настроках пользователя само по себе то вообще отключиться оповещение.У меня zabbix 3.4 Помогите знатоки
Собрался редактировать статью, чтобы актуализировать информацию. Оказалось, что ничего изменять не надо. Она полностью актуальна. Только что проверил все способы, описанные в статье. Работают все.
Самое любопытное, что в качестве тестового сервера была виртуалка в России. Все заработало без прокси. Но завелось не сразу, так как сам пропускал некоторые моменты. То токен бота забыл указать, то имя группы неправильно писал. В общем, надо быть внимательным при настройке и все получится.
тогда сам добавлю. для тех у кого сокс5 по паролю, чтобы заработал запрос curl, то перед --header надо вставить --socks5-basic Enable --proxy 'socks5://:' --proxy-user ':'
у самого на centos7 работает
При отправке тестового сообщения
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.
Добрый день!
У вас сейчас работает отправка сообщений из скрипта в телеграм?
После подключения прокси перестал отправлять
Не знаю, надо будет найти время и проверить. Я сам не пользуюсь этой отправкой и после включения блокировок не проверял работу.
Пока ещё не забыл всё. Напишу как я решил проблему со своего прошлого коммента.
Заббикс пришл