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

Еще не бот, но уже что-то ― получаем уведомления от Zabbix в мессенджеры

Кажется, что в последнее время электронная почта больше подходит для спама, чем для оперативных оповещений системы мониторинга. В этой статье я соберу методы получения уведомлений на мобильные устройства ― как через мессенджеры, так и через традиционные каналы связи.

Рассматривать решения я буду на примере Zabbix, но их можно адаптировать и под вашу любимую систему, лишь бы она умела запускать скрипты по триггеру.

Slack

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

Самым простым решением станет интеграция с мессенджером через механизм Webhook. Для начала нужно получить на сайте сервиса в разделе Incoming WebHooks специальный адрес, на который можно отправлять запросы хоть обычным curl. Также там можно будет выбрать иконку и канал для отображения сообщений по умолчанию.

Получаем URL для отправки запросов.

Теперь нужно добавить в Zabbix скрипт ― по умолчанию это папка /usr/local/share/zabbix/alertscripts, ― разрешить его выполнение и настроить в нем необходимые параметры. Со скриптом и подробными инструкциями по настройке можно ознакомиться на GitHub в репозитории zabbix-slack-alertscript.

Уведомления в Slack.

Более интересным и сложным способом решения задачи будет создание полноценного бота. В отличие от простого варианта с curl, бот может не только кидать уведомления, но и удалять их при решении проблемы.

Ознакомиться с исходным кодом бота и подробной инструкцией по настройке можно в репозитории zabbix-notify на GitHub. Помимо Slack, этот бот поддерживает уведомления в HipChat, создание новых инцидентов и разрешение старых в системе управления инцидентами PagerDuty.

Telegram

Получать уведомления в этот популярный, но заблокированный на территории РФ, мессенджер тоже удобно, благо открытый API это позволяет. Ознакомиться с возможностями автоматизации можно в документации на официальном сайте.

Для самого простого решения нужно получить свой токен для запросов при помощи «Отца Ботов» ― @BotFather. При помощи команд /start и /newbot главный бот выдаст заветный токен.

Получаем токен для нашего бота-уведомлятора.

Теперь можно отправлять сообщения запросами через curl. В качестве усложненной реализации можно привести в пример бота, отправляющего не только уведомления, но и графики. Завести себе бота поможет GitHub-репозиторий Zabbix-in-Telegram.

С подробной инструкцией к простому и чуть более сложному скрипту можно ознакомиться в материале «Отправка уведомлений и графиков из Zabbix в Telegram».

WhatsApp

Этот мессенджер, к сожалению, не имеет документированного публичного API и борется со скриптами на GitHub в рамках «борьбы со спамом». Но выход есть. Можно использовать штатное решение «прямая связь», описанное в официальном FAQ. Но тогда понадобится держать инстанс WhatsApp Web. Аналогично сработает обвязка автокликером веб-версии или десктопного приложения.

Чуть более интересным вариантом будет использование консольного «мессенджера» yowsup. Сам мессенджер доступен в одноименном репозитории GitHub. Пока решение работает. Но если WhatsApp вдруг решит поменять свой API, то для адаптации понадобится время.

Отправка сообщений через консоль.

Подробнее с настройкой консольного скрипта и Zabbix можно ознакомиться в статье «Получаем уведомления от Zabbix в WhatsApp».

ВКонтакте

Если ваш дежурный инженер проводит в соцсетях немало времени, то можно отправлять уведомления ему прямо в сообщения (или на стену) ВКонтакте.

Сначала нам понадобится создать свое приложение в соцсети ― для получения токена. Сделать это можно в разделе «Мои приложения». После создания нового приложения нам нужно скопировать его ID в разделе «Настройки» и перейти по ссылке:

https://oauth.vk.com/authorize?client_id=appid&scope=notify,photos,friends,audio,video,notes,pages,docs,status,questions,offers,wall,groups,**messages**,notifications,stats,ads,offline&redirect_uri=http://api.vk.com/blank.html&display=page&response_type=token

Разумеется, вместо appid нужно подставить свой ID. А если нужно просто отправлять сообщения ― без оповещения друзей инженера, если он сам не отвечает, ― то в параметрах достаточно задать messages.

После подтверждения доступа в адресной строке появится подобный адрес:

https://api.vk.com/blank.html#access_token=81eff38378a3bbbcb5c7043a152a69fd04dca057ac821dd7afd7c2d8e35b60172d45a26599c08034cc40a&expires_in=0&user_id=123456

Где в значении параметра access_token будет необходимый нам токен.

Теперь при помощи обычного curl можно слать сообщения, а с оберткой из простого скрипта это сможет делать и Zabbix.

С пошаговой настройкой уведомлений и вариантом реализации скрипта можно ознакомиться в статье «Прикручиваем к Zabbix оповещения в VKontakte».

Jabber

Если некоторое ретроградство вам не чуждо, то еще остался Jabber. Получать уведомления в старый любимый мессенджер Zabbix позволяет «из коробки». Для этого достаточно настроить аккаунт в свойствах оповещений:

Настройка аккаунта Jabber.

И указать нужные JID в свойствах пользователей. Подробнее можно ознакомиться в официальной документации Zabbix в разделе Jabber. Я же добавлю, что если предварительно аккаунт Jabber зарегистрировать в нужных транспортах, то можно отправлять сообщения в ICQ, IRC и прочий агент Mail.ru.

Push

Если не зацикливаться на модных и не очень мессенджерах, то можно получать уведомления и просто через технологию push. Она поддерживается не только в мобильных устройствах, но и в любой Windows 10, а также в браузерах Chrome и Firefox.

Тут нам придется или развертывать свой сервер и приложения для отправки сообщений, или воспользоваться платными сервисами вроде Pushbullet, Pushsafer или Pushover. Методика схожа с остальными: регистрируемся, получаем токен, ставим приложения или расширения браузера и шлем сообщения хоть многострадальным curl.

Выбор конкретного сервиса зависит от ценника. В общем и целом все они работают примерно одинаково. Некоторые сервисы предоставляют ограниченное количество бесплатных сообщений ― например, у Pushbullet это будет 100 сообщений в месяц.

Push уведомления на Android.

С примером конкретных реализаций можно ознакомиться:

Уведомления в мессенджеры на телефоны ― это, конечно, хорошо. Но только до тех пор пока у сервера Zabbix есть выход в интернет. Для гарантированного получения уведомлений при сбоях в сети лучше использовать традиционные каналы связи.

SMS

Zabbix «из коробки» поддерживает возможность отправлять SMS. К сожалению, он умеет это делать только через последовательный интерфейс. Если у вас завалялся Siemens MC35 или что-то подобное, то с настройками отправки СМС можно ознакомиться в документации Zabbix в разделе SMS.

Помимо такого архаичного варианта, можно воспользоваться сервисом для отправки СМС вроде sms.ru. Благо они все поддерживают разного рода API. Некоторые предоставляют и e-mail шлюз, и для настройки уведомлений не понадобится писать скрипты. Самое главное при выборе шлюза ― проверить его на предмет задержек доставки СМС.

Настройка скрипта для уведомлений по СМС.

С примером настройки Zabbix можно ознакомиться в статье «Бесплатная отправка SMS-уведомлений в Zabbix».

Отправка СМС через внешний шлюз не решит проблему отсутствия интернета на сервере в отличие от отправки через аппаратные устройства с симкой. В качестве бюджетного варианта можно использовать USB-модем ― например, Huawei e1550.

Пошаговую инструкцию можно посмотреть в материале «Оповещения Zabbix через sms, используя GSM модем. Простая настройка».

Голос

СМС можно пропустить запросто, а вот телефонный звонок ― уже сложнее. Поэтому для особо срочных уведомлений можно настроить Zabbix на телефонные звонки. Выходов, как обычно, несколько.

Источник: https://habr.com/company/pc-administrator/blog/353652/

Мониторинг микроклимата серверной комнаты при помощи графиков, отправляемых в Telegram

Мы продолжаем публикацию цикла статей по реализации интеграции устройств мониторинга микроклимата серверных комнат и устройств удалённого распределения питания NetPing с мессенджером «Telegram».

Ранее в нашем блоге мы достаточно подробно рассматривали процесс создания ботов для «Telegram», управление розетками IP PDU NetPing, управление кондиционером в серверной комнате и управление IO линиями устройства NetPing с помощью мессенджера «Telegram».

В этой статье мы рассмотрим процесс создания средства удалённого мониторинга микроклимата серверной комнаты при помощи графиков, отправляемых в «Telegram».

Требуемое оборудование и подготовка к разработке решения:

В этой статье используется устройство мониторинга UniPing server solution v3/SMS, настроенное на работу с датчиками температуры и влажности. Подробнее с настройками устройства можно ознакомиться здесь.

Устройство UniPing server solution v3/SMS должно быть подключено к системе мониторинга Zabbix 3.4.8. Подробнее о подключении можно прочитать здесь. Предполагается, что у вас созданы боты в соответствии с рекомендациями этой статьи.

В данном примере мы создали бот с именем @NetPing_Graph_bot.

Интерпретатор языка программирования Python 2.7.5 установлен в системе CentOS Linux release 7.4.1708 (Core) по умолчанию. Установим менеджер пакетов pip при помощи следующих команд: «# cd /usr/src && wget https://bootstrap.pypa.io/get-pip.py» и «# python get-pip.py»:

Так же для работы необходим pip модуль «requests». Установим его командой «# pip install requests»:

На сайте github.com в свободном доступе есть скрипт, который умеет отправлять в «Telegram» графики из системы мониторинга Zabbix.

исходники скрипта и копируем в директорию «/usr/lib/zabbix/alertscripts» нашего сервера Zabbix файлы «zbxtg.py» и «zbxtg_settings.example.py» из скачанного с . Файл переименовываем «zbxtg_settings.example.

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

Для успешной работы скрипта нам необходимо заполнить корректными значениями следующие переменные:

tg_key – токен, который выдал бот при регистрации нового бота;
zbx_server – полный адрес сервера Zabbix;
zbx_api_user – логин учётной записи Zabbix;
zbx_api_pass – пароль учётной записи Zabbix;
zbx_db_database –  имя базы данных Zabbix;
zbx_db_user – пользователь для доступа к базе данных Zabbix;
zbx_db_password – пароль для доступа к базе данных Zabbix.

Делаем основной файл скрипта «zbxtg.py» исполняемым при помощи команды «# chmod +x /usr/lib/zabbix/alertscripts/zbxtg.py»

Читайте также:  Быстрая и простая настройка samba

Настройка Zabbix на отправку уведомлений в «Telegram»

Переходим в web-интерфейс системы мониторинга Zabbix и добавляем новый способ оповещений. Для этого переходим в раздел «Administration → Media types» и нажимаем кнопку «Create media type»:

Заполняем поля:

где:
Name – имя способа оповещения. В нашем примере «Telegram»;
Type – тип способа оповещения. Доступны типы: «Email», «Script», «SMS», «Jabber», «Ez Texting».

Необходимо выбрать тип «Script»;
Script name – название файла скрипта для отправки SMS-уведомлений, расположенного по пути: «/usr/lib/zabbix/alertscripts». В нашем примере «zbxtg.py»;
Script parameters – Параметры скрипта. Прописываем параметры, как в нашем примере. В данном случае {ALERT.SENDTO}, {ALERT.

SUBJECT} и {ALERT.MESSAGE} — это параметры, которые мы будем передавать скрипту.;
Enabled – чек-бокс для активации данного способа оповещения.

После заполнения всех настроек оповещения нажимаем кнопку «Add».

Затем переходим к настройкам пользователя Admin (Administration → Users) и добавляем новый способ оповещения на вкладке «Media». Нажимаем ссылку «Add» и в появившемся pop-up окне «Media» прописываем параметры как в нашем примере:

где:
Type – параметр для выбора способов оповещений, созданных ранее в системе мониторинга Zabbix (Administration → Media Types).

В нашем случае выбираем из списка тип оповещения «Telegram»;
Send to – указываем учётную запись «Telegram» получателя уведомлений. Можно указать текстовый логин или числовой ID.

В нашем примере был указан текстовый логин;
When active – время срабатывания данного оповещения.

Настройку можно оставить по умолчанию;
Use if severity – важность триггера, чек-боксы определяют, при какой важности триггера будет срабатывать данное оповещение. В примере установлены все чек-боксы для лучшей наглядности данного параметра;
Enabled – параметр для включения и отключения данного оповещения.

Сохраняем изменения нажатием кнопок «Add» и «Update».

Далее переходим к созданию действия, при выполнении которого будут отправляться сообщения в «Telegram». Переходим в раздел «Configuration → Action» и нажимаем кнопку «Create Action»:

В открывшемся окне на вкладке «Action» заполняем поля как в нашем примере. Здесь нам необходимо отсортировать триггеры, при срабатывании которых будут отправляться сообщения в «Telegram». Это действие будет выполняться при отклонении температуры от нормального диапазона.

где:
Name – уникальное имя действия. В нашем примере «temp_error»;
Type of calculation – тип логического правила для триггеров. В нашем примере «Custom expression»;
Conditions – условия, при которых будет срабатывать действие.

Имена триггеров, при срабатывании которых будет отправляться графическое сообщение в «Telegram», должны содержать фразы «Temperature Sensor» и одно из условий «Above Safe Range» или «Below Safe Range»;
New condition – поле для создания нового условия.

Добавление правил подтверждается нажатием на ссылку «Add» в поле «New condition»;
Enabled – параметр для включения и отключения данного действия.

Затем переходим на вкладку «Operations» и прописываем текст сообщения, которое будет отправлено в «Telegram» при срабатывании триггера, описанного на вкладке «Action»:

где:
Default operation step duration – длительность одного шага операции. Например, длительность шага в один час означает, что, если первая операция в данном действии выполняется, то следующая операция начнётся спустя один час.

В нашем примере операция отправки сообщения только одна, поэтому можно оставить значение по умолчанию;
Default subject – тема сообщения по умолчанию. В нашем примере «{{WARNING}} Problem: {TRIGGER.NAME}»;
Default message – сообщение по умолчанию. Сообщение может содержать макросы.

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

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

zbxtg;graphs — указывает, что будем отправлять график;
zbxtg;graphs_period – период времени, который будет отображён на графике. Время указывается в секундах;
zbxtg;itemid – параметр который определяет itemid для графика. Мы указали нужный itemid вручную;
zbxtg;title — задаёт имя для заголовка графика.

В поле «Operations» нажимаем ссылку «New» и заполняем развернувшуюся форму описания действия как в нашем примере. Добавляем пользователя «Admin» в поле «Sent to Users». В поле «Send only to» выбираем из списка тип уведомления «Telegram». Подтверждаем изменения нажатием ссылки «Add» (1):

Подтверждаем создание нового действия нажатием кнопки «Add» (2).

Теперь повторяем создание действия для событий датчика влажности. Переходим в раздел «Configuration → Action» и нажимаем кнопку «Create Action»:

В открывшемся окне на вкладке «Action» заполняем поля как в нашем примере:

Затем переходим на вкладку «Operations» и прописываем текст сообщения, которое будет отправлено в «Telegram» при срабатывании триггера, описанного на вкладке «Action»:

Подтверждаем создание нового действия нажатием кнопки «Add».

В результате этих настроек администратор системы будет получать такие сообщения в «Telegram»:

Если кликнуть по картинке с графиком мышкой, то она откроется в большем размере:

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

Источник: http://www.Netping.ru/Blog/monitoring-servernoy-pri-pomoschi-grafikov-otpravlyaemyh-v-telegram

Оповещения Zabbix через Telegram с помощью Telegram BotAPI

Хотите получать оповещение триггеров Zabbix в Telegram? Нет проблем, далее приведен очень простой способ подружить Zabbix и Telegram, используя Telegram Bot API, а если быть точнее…используя уже готового бота.

Мой хороший друг написал Telegram-бота, который умеет отправлять адресату то, что приходит в правильно-сформированном HTTP GET запросе. Он очень удачно подходит для различных «оповещалок».

Так вот, знакомьтесь: Глашатый, он же CrierBot.

Бот присылает все, что было в специальном HTTP GET запросе вида: http://crierbot.appspot.com//send?message=

Где TOKEN — токен выданный ботом при его добавлении в список контактов Telegram, а MESSAGE — собственно сообщение, которые хотите передать.

Давайте начнем по порядку. Сначала добавим бота к себе в Telegram:

Добавляем @crierbot к себе в список контактов и нажимаем START

Добавляем @crierbot

После этого бот пришлет нам наш уникальный Token

Присланный Token

Все, бот готов к работе. Теперь займемся Zabbix’ом

Zabbix умеет отправлять оповещения, используя скрипт. Согласно официальной документации, Zabbix отправляет 3 параметра: получатель, тема сообщения, текст сообщения.

Давайте напишем скрипт, который будет отправлять переданное Zabbix’ом боту.

#!/bin/bash PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin wget -O /dev/null «http://crierbot.appspot.com/$1/send?message=Subj: $2 || Message:$3»

Где $1, $2, $3 переданные Zabbix’ом параметры: получатель, тема сообщения, сообщение.

Данный скрипт сохраняем с произвольным именем, н.р. telegram.sh в директорию Zabbix’а, где хранятся скрипты уведомлений (в Debian по умолчанию это директория: /usr/lib/zabbix/alertscripts/ )

Делаем наш скрипт исполняемым:

chmod +x /usr/lib/zabbix/alertscripts/telegram.sh

Теперь переходим в веб-интерфейс Zabbix’а и переходим по Меню: «Администрирование» -> «Способы оповещения» и нажимаем «Создать способ оповещения»

Способы оповещения в Zabbix

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

Имя: произвольное, н.р. Telegram
Тип: Скрипт
Имя скрипта: то имя, которое было присвоено нашему скрипту, у меня это telegram.sh (ВНИМАНИЕ: не надо писать полный путь к скрипту!!!)
Активировано: [V]

Нажимаем «Добавить»

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

Чтобы добавить пользователю данный вид оповещения нужно:

  • Перейти: «Администрирование»->»Пользователи»
  • Выбрать нужного пользователя
  • Перейти на вкладку «Оповещения»
  • Нажать «Добавить»
  • В появившемся окне выбрать способ оповещения «Telegram» (тот что создали ранее) и ввести токен в поле «Отправлять на»

Все, теперь осталось добавить данный способ оповещения в «Действия» («Настройки»->»Действия») и вы будите получать вот такие сообщения:

Оповещение от Zabbix

P.S.: Если вы не хотите получать полный текст сообщений Zabbix’а и вам достаточно лишь темы сообщения, то уберите параметр $3 из скрипта, н.р. так:

#/bin/bash PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin wget -O /dev/null «http://crierbot.appspot.com/$1/send?message=$2»

UPDATE [03.02.2016]: 

Исходный код доступен на GitHub: https://github.com/hellsman/crierbot

Группа в Telegram для приема и обсуждения предложений по улучшению бота: https://telegram.me/joinchat/Ay5NVgZjJ_YiDeEpE8b3Og

UPDATE [31.03.2016]:

Обновил скрипты, бывают проблемы что wget не находится и поэтому сделано обновление переменно PATH, также добавлен вывод ответа wget в /dev/null, чтобы не создавались файлы на диске. (Спасибо за дополнение Dmitry Burtsev, Дмитрий Андреев)

Источник: https://hellsman.ru/admin/linux/opoveshheniya-zabbix-cherez-telegram-s-pomoshhyu-telegram-botapi

Заметки линукс-администратора

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

Схема пусть будет следующая:

Распишем, что у нас уже изначально есть и настроено:

  • настроенный zabbix сервер, бд находится на этом же сервере
  • настроенный пользователь веб-интерфейса zabbix сервера, которому хватает прав на чтение
  • созданный пользователь БД, который имеет права только на чтение из mysql
  • созданный бот

Схема работы скрипта следующая:

    Мы добавили созданного бота к себе в телеграм. Отправляем ему управляющие команды  с целью найти нужный график,  делаем по полученным данным запросы в БД zabbix для получения graphid. Формируем url графика на основе graphid. Далее авторизуемся в веб-интерфейсе zabbix и «забираем» нужный график, потом его отправляем пользователю телеграма.

 Сам скрипт:

#!/usr/bin/env python # coding: utf-8 import sys import os import time import random import requests import json import re import stat import MySQLdb import telebot bot = telebot.TeleBot(«API_KEY_of_theBOT») zbx_server = «https://zabbix.test.ru» zbx_api_user = «zabbix_read» zbx_api_pass = «1234» available_commands = { '/z ARG1 ARG2: ': » отправить команду заббиксу»} available_arguments = { 'ARG1: ': «Имя сервера телефонии, которое указано в Zabbix)», 'ARG2: ': «Какую информацию получить с хоста»} avalaible_data = ['calls', 'cpu', 'memory'] allowed_uid = ['12345678', '23541335', '987654321'] #Функция для получения url нужного графика def get_zabbix_url(host,needed_data): global zbx_img_url db = MySQLdb.connect(host=»localhost», user=»read», passwd=»read», db=»zabbix», charset='utf8') cursor = db.cursor() # формируем курсор, с помощью которого можно исполнять SQL-запросыa sql = «select hostid,host from hosts where host = '» + str(host) + «'»; cursor.execute(sql) data = cursor.fetchall() if len(data) == 0: print «Host » + str(host) + » not found in Zabbix database, exit…» zbx_img_url = «» return zbx_img_url hostid= data[0][0] if needed_data == «calls»: sql=»select itemid,hostid,name from items where hostid=» + str(hostid) + » and name ='Calls count'»; cursor.execute(sql) data = cursor.fetchall() elif needed_data == «cpu»: sql=»select itemid,hostid,name from items where hostid=» + str(hostid) + » and name ='Processor load (15 min average per core)'»; cursor.execute(sql) data = cursor.fetchall() elif needed_data == «memory»: sql=»select itemid,hostid,name from items where hostid=» + str(hostid) + » and name ='Available memory'»; cursor.execute(sql) data = cursor.fetchall() else: print «Host » + str(host) + » found in Zabbix database, but itemid not found, may be ARG2 is wrong? » zbx_img_url = «» return zbx_img_url itemid=data[0][0] sql=»select * from graphs_items where itemid=» + str(itemid); cursor.execute(sql) data = cursor.fetchall() graphid = data[0][1] zbx_img_url = «https://zabbix.test.ru/chart2.php?fullscreen=0&graphid=» + str(graphid) + «&width=1138&period=43300» return zbx_img_url @bot.message_handler(commands=['help', 'start']) def send_welcome(message): message_zabbix = «» msg = bot.send_message(message.chat.id, 'Привет! Я бот telephone company! Список доступных команд: ') for i in available_commands: message_zabbix = message_zabbix + i + » » + available_commands[i] + »

Читайте также:  Ошибка в работе samba в домене ad - id: username: no such user

» for i in available_arguments: message_zabbix = message_zabbix + i + » » + available_arguments[i] + »

» message_zabbix = message_zabbix + «Список возможных значений аргумента ARG2: » + str(avalaible_data) + »

» bot.send_message(message.chat.id, message_zabbix ) #message.from_user.id — user id #Получаем какой-то текст от пользователя @bot.message_handler(content_types=[«text»]) def get_info(message): uid = message.from_user.id if str(uid) in allowed_uid: text = message.text l = message.text.split() if len(l) != 3: bot.send_message(message.chat.id, «Wrong length of arguments» ) exit(1) host = l[1] needed_data = l[2] data_api = {«name»: zbx_api_user, «password»: zbx_api_pass, «enter»: «Sign in»} req_cookie = requests.post(zbx_server + «/», data=data_api) cookie = req_cookie.cookies #делаем запрос для получения графика file_img = «asterisk.png» get_zabbix_url(host,needed_data) if len(zbx_img_url) != 0: #если хост найден в БД заббикса res = requests.get(zbx_img_url,cookies=cookie) res_code = res.status_code else: # в бд не нашли, шлем сообщение bot.send_message(message.chat.id, «Host » + host + » not found in Zabbix database or maybe ARG2 is wrong?» ) exit(1) res_img = res.content with open(file_img, 'wb') as fp: fp.write(res_img) photo = open('asterisk.png', 'rb') #for sending photo to telegram msg = bot.send_photo(message.chat.id, photo, reply_to_message_id=message.message_id) else: bot.send_message(message.chat.id, «You don't allow access to this chat») bot.polling()

    Скрипт «наколеночный». В даннном варианте он принимает при отправке команд боту имя хоста и параметры calls, memory, cpu.

Имя хоста — это то, как хост называется в базе заббикса (select hostid,host from hosts),  параметр calls — соответствует элементу данных заббикса «Calls count» (select itemid,hostid,name from items where hostid=» + str(hostid) + » and name ='Calls count'»). Приведу несколько картинок, чтобы было немного яснее:

 Это элемент данных, на основе которого мы будем запрашивать графики.

 Приветственное сообщение.

Запросили данные, но нет прав (не прописан uid пользователя телеграма в списке allowed_uid скрипта). Свой uid можно узнать, отправив сообщение боту @MyTelegramID_bot.

 Прописали uid в список, перезапустили скрипт, получили в телеграм график.

 Для скрипта можно написать systemd service:

cat /etc/systemd/system/telegram_telebot.service [Unit] Description=Run script for receiving and sending messages from/to telegram from zabbix Requires=network.target After=network.target [Service] #Type=oneshot #RemainAfterExit=True ExecStart=/root/scripts/telegram/telegram_telebot.py Restart=always RestartSec=10m [Install] WantedBy=multi-user.targe

    Сервера nginx телеграма иногда выдают 500-е ошибки и чтобы наш скрипт не падал из-за них, указываем параметры Restart и RestartSec (назначил интервал 10 мин в виду того, что когда отдаются 500 ошибки, скрипт падает -> systemd сразу его пытается перезапускать, снова падает и т.д, в нашем варианте достаточно не сразу перезапускать, а выждав некоторое время, пока с бОльшей вероятностью все не починится)

systemctl enable telegram_telebot.service systemctl start telegram_telebot.service

Источник: https://linux96.ru/index.php/27-poluchenie-grafikov-zabbix-v-telegram

Zabbix и Telegram

Регистрируем своего бота, для этого пишем в Telegram боту @BotFather

/newbot BotFather
Alright, a new bot. How are we going to call it? Please choose a name for your bot. Zabbix BotFather
Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot. имя_вашего_бота BotFather
Done! Congratulations on your new bot. You will find it at telegram.me/zbxmtbot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. Use this token to access the HTTP API:
токен:бота For a description of the Bot API, see this page: https://core.telegram.org/bots/api /setuserpic BotFather
Choose a bot to change profile photo. @имя_вашего_бота BotFather
OK. Send me the new profile photo for the bot.

Скрипт

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

nano /usr/lib/zabbix/alertscripts/zbxtg.sh

#!/bin/bash USERID=$1
THEME=$2
BODY=$3 KEY=»токен:бота»
TIMEOUT=»10″
URL=»https://api.telegram.org/bot$KEY/sendMessage» TEXT=»$THEME
$BODY» PARSEMODE=»markdown» curl -s —max-time $TIMEOUT -d «chat_id=$USERID&disable_web_page_preview=1&parse_mode=$PARSEMODE&text=$TEXT» $URL > /dev/null

Кстати, обратите внимание на вот этот кусочек кода:

TEXT=»$THEME
$BODY»

Таким образом обеспечивается перенос строки, я пробовал всякие там
,
, /n, /r — ничего не работало, а вот такой перенос — работает ;-). И ещё хозяйке на заметку (хотя я это и не использую): All and & symbols that are not a part of a tag or an HTML entity must be replaced with the corresponding HTML entities (< with <, > with > and & with &).

Меняем владельца и делаем скрипт исполняемым.

chown zabbix:root /usr/lib/zabbix/alertscripts/zbxtg.sh
chmod +x /usr/lib/zabbix/alertscripts/zbxtg.sh

Параметрами $1, $2, $3 для скрипта являются получатель, тема и тело сообщения. Вы можете сами проверить как Zabbix будет дёргать скрипт, выполнив команду /usr/lib/zabbix/alertscripts/zbxtg.sh user_idmessage_theme message_body

Чтобы узнать свой user id, нужно найти бота в поиске в приложении Telegram или перейти по ссылке http://telegram.me/имя_бота и нажать на /start и что-нибудь ему написать, после чего зайти на https://api.telegram.org/botтокен:бота/getUpdates и увидеть факт отправки сообщения от вас боту. Сообщения будут иметь вид:

«message»:{«message_id»:14681,»from»:{…},»chat»:{«id»:123456789,»first_name»:»REALNAME»,»username»:»NICKNAME»,»type»:»private»},»date»:…

Где «chat»:{«id»:123456789 и будет user id. Для группы:

«message»:{«message_id»:14686,»from»:{…},»chat»:{«id»:-12345678,»title»:»GROUPNAME»,»type»:»group»},»date»:…

Где user id будет: «chat»:{«id»:-12345678

Заметка: чтобы добавить бота в группу, нужно нажать на название группы в Telegram, выбрать Добавить участников и в поиске набрать имя_бота.

Оповещение

Добавляем способ оповещения, для этого идём в Администрирование — Способы оповещений, добавляем новый. Указываем Имя оповещения, Тип: Скрипт, Имя скрипта: zbxtg.sh (подразумевается, что скрипт лежит в определённой директории, которая указывается в конфиге сервера, т.е. в /etc/zabbix/zabbix_server.conf).

Дополнение для Zabbix 3.0

Действие

Добавляем действие, для этого идём в Настройка — Действия, выбираем Источник событий — Триггеры и добавляем новое (обычно в этом разделе уже есть какое-нибудь оповещение через email или т.п.).

Далее идёт самый изюм, из-за которого стоит просмотреть этот пост :-). Если событий сыпется много, то их дико неудобно воспринимать, а в телеге можно кое-как отформатировать текст, чем и воспользуемся.

Итак, Имя — названия действия
Тема по умолчанию *{HOST.NAME1} — *`{TRIGGER.STATUS}`* — {EVENT.DATE} — {EVENT.TIME}*
Сообщение по умолчанию {TRIGGER.NAME}

Если Вам нужно сообщение о восстановлении, то ставим галочку и заполняем поля аналогично. На вкладке Условия добавляем какие душе угодно зависимости: узлы/группы/шаблоны, важность триггеров, время и прочее.

На вкладке Операции добавляем операцию с шагом от 1 к 1, добавляем группы пользователей или пользователей, которым нужно отправлять сообщение (ну и вообще для которых это действие будет работать), выбираем способ оповещения в Отправлять только через. Обновляем, добавляем, сохраняем.

Длительность шага работает так: срабатывает триггер, с этого момента начинается отсчёт времени и это промежуток времени считается шагом 1.

 Когда отсчитывается N секунд, соответствующее длительности (по умолчанию 60 сек), наступает шаг 2 и т.д.

Таким образом можно например отправлять сообщения разными способами (sms, email, etc) или определённым пользователям/группам если событие (триггер) не подтверждено в течение какого-либо времени.

Пользователь

Добавляем способ оповещения для пользователя. Для отправки сообщения в телеграмовскую группу я создал фиктивного пользователя в Zabbix и добавил ему оповещение с id группы (для групп всегда со знаком минус).

В результате получаем сообщения такого вида:

Напоследок

 

Источник: https://yvision.kz/post/761627

Zabbix telegram оповещение — Мой мессенджер

18.07.2018

В предыдущих темах мы установили систему мониторинга Zabbix и показали на примерах как добавить на мониторинг устройства Dlink и Mikrotik. Для удобства оповещений о неполадках устройств мы настроим отправку оповещений из Zabbix в Telegram на наш аккаунт или общий чат, в случае если надо оповестить всех участников чата.

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

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

1. Над списком контактов в поле Search находим бота @BotFather и жмем на панель c названием /start или вводим команду /start в поле для сообщений. 2.

Следующей командой /newbot мы получаем сообщение: «Alright, a new bot. How are we going to call it? Please choose a name for your bot.

», исходя из которого нам нужно задать имя, в конце которого обязательно должно присутствовать слово bot. Например, ithelp21_zabbixbot.

3. В ответ на наше сообщение с именем бота мы получаем Token бота, который выглядит в виде «Use this token to access the HTTP API: 423393656:AAE1hJ5EE_o8KIDWrWW9A8-hZnpAL9-htGI»

Настройка аккаунта Telegram, получение ID

Нам нужно определить идентификационный номер своего контакта, на который мы будем получать уведомления от ithelp21_zabbixbot. Для этого снова находим в поиске @MyTelegramID_bot и жмем кнопку /start или вводим команду, после которой мы получим ID «This BOT simply telling you your current Telegram ID. You Telegram ID: 194533722».

Теперь проверим отправку сообщений с нашего бота на на аккаунт в Telegram. В CentOS, где установлен zabbix-server запускаем команду, со своими данными. В моем случае команда будет выглядеть так:

Читайте также:  Мое мнение по криптовалютам - не взлетит

Шаблон для ввода своих данных:

Обратите внимание что Token нужно вводить сразу же api.telegram.org/bot»Token» без пробела после «bot»!

Если все данные ввели верно, мы получим в чате сообщение «Привет, я Telegram-bot для Zabbix!» от нашего бота.

Добавим Telegram — уведомление в Zabbix

1. Проверяем, где у нас в Zabbix находится папка для скриптов, который мы далее создавать, вводим команду и получаем результат.

Создаем в выше указанной папке script с именем zabbix-to-telegram-bot.sh:

и заполняем его следующим кодом:

Даем права скрипт-файлу:

Настройка оповещений в Zabbix через Telegram

1. Заходим в Администрирование — Способы оповещений — Создать способ оповещения.

Имя: Telegram Bot; Тип: Скрипт; Имя скрипта: zabbix-to-telegram-bot.sh; Параметры скрипта: {ALERT.SENDTO} — адрес отправителя; {ALERT.SUBJECT} — тема сообщения; {ALERT.MESSAGE} — текст сообщения; Активировано: ставим галочку; Жмем Добавить.

2. Идем в Администрирование — Пользователи — Выбираем нашего пользователя «Admin». В открывшемся окне пользователя переходим на вкладку «Оповещения» — Добавить.

Тип: Telegram Bot; Отправлять на: 194533722 (ID нашего telegram аккаунта); Остальные параметры оставляем по-умолчанию или на ваше усмотрение. Активировано: ставим галочку; Добавить.

3. Переходим Настойка — Действие — Источник событий «Триггеры» — Создать действие.

Вкладка Действие: Имя: Уведомление Telegram c Zabbix; Активировано: ставим галочку;

Вкладка «Операции»: Длительность шага операции по умолчанию: 60 — (через 60 секунд после срабатывание триггера приходит уведомление) Нажимаем в этой же вкладке Операции — Новое. Меняем только: Тип операции: Отправить сообщение; Отправлять пользователям: Admin; Отправлять только через: Telegram Bot; Добавить.

Во вкладке «Операции восстановления» повторяем тоже самое, что и во вкладке «Операции».

На этом настройка оповещений Zabbix от Telegram завершена. Остается положить какой-нибудь порт с мониторинга, и дождаться уведомление о триггере.

Сегодня я расскажу, как сделать небольшой комплекс по приему и отправки сообщений от различных сервисов (nagios, zabbix и пр.) в группу Телеграма.

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

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

Изначально планировалось писать полнофункционального бота, но нам нужен лишь метод SendMessage, поэтому решено было обойтись одной строкой которая делает POST, и шлет наше сообщение в JSON, все согласно API .

Бот добавлен в нашу группу, как администратор. И радует нас своими сообщениями.

Как создать бота, я не буду рассказывать, это я уже говорил пару статей назад. Могу лишь сказать, что сам бот, это в итоге, простейший постинг данных. Где в $token{‘bot’} лежит токен бота, в $groupid — номер группы где бот живет.

Теперь расскажу, о каждом из способом чуть более подробно.

Чтение данных из входящего письма

  • делаем почтовый алиас на скрипт
  • в скрипте читаем stdin
  • берем что надо, отправляем в телеграмм.

&nbsp

Чтение данных из командной строки

Тут можно ничего не писать, читаете @ARGV массив и дальше по накатанной.

Чтение данных из сети

Вот тут, я думал сделать простенький сервер, который будет слушать какойто порт, принимать данные и скармливать скрипту. Но лень не дала это сделать. Отдельный демон, отдельная реализация, опять же автозапуск городить, дружить с systemd/initd. Решил подрядить на это старый, и забытый всеми xinetd.

Ставим

Придумаваем порт и записываем его в /etc/services

Разрешаем этот порт в фаерволе, если он у вас есть.

Пишем модуль для xinetd — /etc/xinetd.d/tlgrmBotSocket

Синтаксис простой, server_args вам даже не надо будет, у меня скрипт по этому аргументу понимает, что дальше идет поток из сети. В самом скрипте бота

вуаля.. теперь с любого удаленного хоста можно подключившись на порт 11234 (обычным телнетом к примеру) отправить сообщение, которое придет в группу телерамма. Конечно, тут можно сделать авторизацию, накрутить. Это уже дело личное и каждый усложняет сам.

Как использовать. К примеру для nagios — уведомления отправляются вот таким образом

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

Из перловых сриптов шлю вот так

Очень просто. Выглядит как-то так

Источники

Источник: http://mymess.ru/telegram/nastroyka-opovescheniy-zabbix-v-telegram.html

Еще не бот, но уже что-то ― получаем уведомления от Zabbix в мессенджеры17.04.2018 19:18

Кажется, что в последнее время электронная почта больше подходит для спама, чем для оперативных оповещений системы мониторинга. В этой статье я соберу методы получения уведомлений на мобильные устройства ― как через мессенджеры, так и через традиционные каналы связи.

Рассматривать решения я буду на примере Zabbix, но их можно адаптировать и под вашу любимую систему, лишь бы она умела запускать скрипты по триггеру.

Slack

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

Самым простым решением станет интеграция с мессенджером через механизм Webhook. Для начала нужно получить на сайте сервиса в разделе Incoming WebHooks специальный адрес, на который можно отправлять запросы хоть обычным curl. Также там можно будет выбрать иконку и канал для отображения сообщений по умолчанию.

Получаем URL для отправки запросов.

Теперь нужно добавить в Zabbix скрипт ― по умолчанию это папка /usr/local/share/zabbix/alertscripts, ― разрешить его выполнение и настроить в нем необходимые параметры. Со скриптом и подробными инструкциями по настройке можно ознакомиться на GitHub в репозитории zabbix-slack-alertscript.

Уведомления в Slack.

Более интересным и сложным способом решения задачи будет создание полноценного бота. В отличие от простого варианта с curl, бот может не только кидать уведомления, но и удалять их при решении проблемы.

Ознакомиться с исходным кодом бота и подробной инструкцией по настройке можно в репозитории zabbix-notify на GitHub. Помимо Slack, этот бот поддерживает уведомления в HipChat, создание новых инцидентов и разрешение старых в системе управления инцидентами PagerDuty.

Telegram

Получать уведомления в этот популярный, но заблокированный на территории РФ, мессенджер тоже удобно, благо открытый API это позволяет. Ознакомиться с возможностями автоматизации можно в документации на официальном сайте.

Для самого простого решения нужно получить свой токен для запросов при помощи «Отца Ботов» ― @BotFather. При помощи команд /start и /newbot главный бот выдаст заветный токен.

Получаем токен для нашего бота-уведомлятора.

Теперь можно отправлять сообщения запросами через curl. В качестве усложненной реализации можно привести в пример бота, отправляющего не только уведомления, но и графики. Завести себе бота поможет GitHub-репозиторий Zabbix-in-Telegram.

С подробной инструкцией к простому и чуть более сложному скрипту можно ознакомиться в материале «Отправка уведомлений и графиков из Zabbix в Telegram».

WhatsApp

Этот мессенджер, к сожалению, не имеет документированного публичного API и борется со скриптами на GitHub в рамках «борьбы со спамом». Но выход есть. Можно использовать штатное решение «прямая связь», описанное в официальном FAQ. Но тогда понадобится держать инстанс WhatsApp Web. Аналогично сработает обвязка автокликером веб-версии или десктопного приложения.

Чуть более интересным вариантом будет использование консольного «мессенджера» yowsup. Сам мессенджер доступен в одноименном репозитории GitHub. Пока решение работает. Но если WhatsApp вдруг решит поменять свой API, то для адаптации понадобится время.

Отправка сообщений через консоль.

Подробнее с настройкой консольного скрипта и Zabbix можно ознакомиться в статье «Получаем уведомления от Zabbix в WhatsApp».

ВКонтакте

Если ваш дежурный инженер проводит в соцсетях немало времени, то можно отправлять уведомления ему прямо в сообщения (или на стену) ВКонтакте.

Сначала нам понадобится создать свое приложение в соцсети ― для получения токена. Сделать это можно в разделе «Мои приложения». После создания нового приложения нам нужно скопировать его ID в разделе «Настройки» и перейти по ссылке:

https://oauth.vk.com/authorize?client_id=appid&scope=notify,photos,friends,audio,video,notes,pages,docs,status,questions,offers,wall,groups,**messages**,notifications,stats,ads,offline&redirect_uri=http://api.vk.com/blank.html&display=page&response_type=token

Разумеется, вместо appid нужно подставить свой ID. А если нужно просто отправлять сообщения ― без оповещения друзей инженера, если он сам не отвечает, ― то в параметрах достаточно задать messages.

После подтверждения доступа в адресной строке появится подобный адрес:

https://api.vk.com/blank.html#access_token=81eff38378a3bbbcb5c7043a152a69fd04dca057ac821dd7afd7c2d8e35b60172d45a26599c08034cc40a&expires_in=0&user_id=123456

Где в значении параметра access_token будет необходимый нам токен.

Теперь при помощи обычного curl можно слать сообщения, а с оберткой из простого скрипта это сможет делать и Zabbix.

С пошаговой настройкой уведомлений и вариантом реализации скрипта можно ознакомиться в статье «Прикручиваем к Zabbix оповещения в VKontakte».

Jabber

Если некоторое ретроградство вам не чуждо, то еще остался Jabber. Получать уведомления в старый любимый мессенджер Zabbix позволяет «из коробки». Для этого достаточно настроить аккаунт в свойствах оповещений:

Настройка аккаунта Jabber.

И указать нужные JID в свойствах пользователей. Подробнее можно ознакомиться в официальной документации Zabbix в разделе Jabber. Я же добавлю, что если предварительно аккаунт Jabber зарегистрировать в нужных транспортах, то можно отправлять сообщения в ICQ, IRC и прочий агент Mail.ru.

Push

Если не зацикливаться на модных и не очень мессенджерах, то можно получать уведомления и просто через технологию push. Она поддерживается не только в мобильных устройствах, но и в любой Windows 10, а также в браузерах Chrome и Firefox.

Тут нам придется или развертывать свой сервер и приложения для отправки сообщений, или воспользоваться платными сервисами вроде Pushbullet, Pushsafer или Pushover. Методика схожа с остальными: регистрируемся, получаем токен, ставим приложения или расширения браузера и шлем сообщения хоть многострадальным curl.

Выбор конкретного сервиса зависит от ценника. В общем и целом все они работают примерно одинаково. Некоторые сервисы предоставляют ограниченное количество бесплатных сообщений ― например, у Pushbullet это будет 100 сообщений в месяц.

Push уведомления на Android.

С примером конкретных реализаций можно ознакомиться:

  • в материале «Zabbix + Pushbullet: простой способ push-оповещения»;
  • в разделе Zabbix документации Pushsafer;
  • в репозитории zabbix-alertscripts на GitHub.

Уведомления в мессенджеры на телефоны ― это, конечно, хорошо. Но только до тех пор пока у сервера Zabbix есть выход в интернет. Для гарантированного получения уведомлений при сбоях в сети лучше использовать традиционные каналы связи.

SMS

Zabbix «из коробки» поддерживает возможность отправлять SMS. К сожалению, он умеет это делать только через последовательный интерфейс. Если у вас завалялся Siemens MC35 или что-то подобное, то с настройками отправки СМС можно ознакомиться в документации Zabbix в разделе SMS.

Помимо такого архаичного варианта, можно воспользоваться сервисом для отправки СМС вроде sms.ru. Благо они все поддерживают разного рода API. Некоторые предоставляют и e-mail шлюз, и для настройки уведомлений не понадобится писать скрипты. Самое главное при выборе шлюза ― проверить его на предмет задержек доставки СМС.

Настройка скрипта для уведомлений по СМС.

С примером настройки Zabbix можно ознакомиться в статье «Бесплатная отправка SMS-уведомлений в Zabbix».

Отправка СМС через внешний шлюз не решит проблему отсутствия интернета на сервере в отличие от отправки через аппаратные устройства с симкой. В качестве бюджетного варианта можно использовать USB-модем ― например, Huawei e1550.

Пошаговую инструкцию можно посмотреть в материале «Оповещения Zabbix через sms, используя GSM модем. Простая настройка».

Голос

СМС можно пропустить запросто, а вот телефонный звонок ― уже сложнее. Поэтому для особо срочных уведомлений можно настроить Zabbix на телефонные звонки. Выходов, как обычно, несколько.

Источник: http://pcnews.ru/blogs/ese_ne_bot_no_uze_cto_to__polucaem_uvedomlenia_ot_zabbix_v_messendzery-825044.html

Ссылка на основную публикацию