- Автор: daniil
- Распечатать
Оцените статью: Поделитесь с друзьями!
- 5
- 4
- 3
- 2
- 1
(1 голос, среднее: 5 из 5)
Кажется, что в последнее время электронная почта больше подходит для спама, чем для оперативных оповещений системы мониторинга. В этой статье я соберу методы получения уведомлений на мобильные устройства ― как через мессенджеры, так и через традиционные каналы связи.
Рассматривать решения я буду на примере Zabbix, но их можно адаптировать и под вашу любимую систему, лишь бы она умела запускать скрипты по триггеру.
Получать уведомления в такой корпоративный мессенджер как 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.
Получать уведомления в этот популярный, но заблокированный на территории РФ, мессенджер тоже удобно, благо открытый API это позволяет. Ознакомиться с возможностями автоматизации можно в документации на официальном сайте.
Для самого простого решения нужно получить свой токен для запросов при помощи «Отца Ботов» ― @BotFather. При помощи команд /start и /newbot главный бот выдаст заветный токен.
Получаем токен для нашего бота-уведомлятора.
Теперь можно отправлять сообщения запросами через curl. В качестве усложненной реализации можно привести в пример бота, отправляющего не только уведомления, но и графики. Завести себе бота поможет GitHub-репозиторий Zabbix-in-Telegram.
С подробной инструкцией к простому и чуть более сложному скрипту можно ознакомиться в материале «Отправка уведомлений и графиков из Zabbix в Telegram».
Этот мессенджер, к сожалению, не имеет документированного публичного 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. Получать уведомления в старый любимый мессенджер Zabbix позволяет «из коробки». Для этого достаточно настроить аккаунт в свойствах оповещений:
Настройка аккаунта Jabber.
И указать нужные JID в свойствах пользователей. Подробнее можно ознакомиться в официальной документации Zabbix в разделе Jabber. Я же добавлю, что если предварительно аккаунт Jabber зарегистрировать в нужных транспортах, то можно отправлять сообщения в ICQ, IRC и прочий агент Mail.ru.
Если не зацикливаться на модных и не очень мессенджерах, то можно получать уведомления и просто через технологию push. Она поддерживается не только в мобильных устройствах, но и в любой Windows 10, а также в браузерах Chrome и Firefox.
Тут нам придется или развертывать свой сервер и приложения для отправки сообщений, или воспользоваться платными сервисами вроде Pushbullet, Pushsafer или Pushover. Методика схожа с остальными: регистрируемся, получаем токен, ставим приложения или расширения браузера и шлем сообщения хоть многострадальным curl.
Выбор конкретного сервиса зависит от ценника. В общем и целом все они работают примерно одинаково. Некоторые сервисы предоставляют ограниченное количество бесплатных сообщений ― например, у Pushbullet это будет 100 сообщений в месяц.
Push уведомления на Android.
С примером конкретных реализаций можно ознакомиться:
Уведомления в мессенджеры на телефоны ― это, конечно, хорошо. Но только до тех пор пока у сервера Zabbix есть выход в интернет. Для гарантированного получения уведомлений при сбоях в сети лучше использовать традиционные каналы связи.
Zabbix «из коробки» поддерживает возможность отправлять SMS. К сожалению, он умеет это делать только через последовательный интерфейс. Если у вас завалялся Siemens MC35 или что-то подобное, то с настройками отправки СМС можно ознакомиться в документации Zabbix в разделе SMS.
Помимо такого архаичного варианта, можно воспользоваться сервисом для отправки СМС вроде sms.ru. Благо они все поддерживают разного рода API. Некоторые предоставляют и e-mail шлюз, и для настройки уведомлений не понадобится писать скрипты. Самое главное при выборе шлюза ― проверить его на предмет задержек доставки СМС.
Настройка скрипта для уведомлений по СМС.
С примером настройки Zabbix можно ознакомиться в статье «Бесплатная отправка SMS-уведомлений в Zabbix».
Отправка СМС через внешний шлюз не решит проблему отсутствия интернета на сервере в отличие от отправки через аппаратные устройства с симкой. В качестве бюджетного варианта можно использовать USB-модем ― например, Huawei e1550.
Пошаговую инструкцию можно посмотреть в материале «Оповещения Zabbix через sms, используя GSM модем. Простая настройка».
СМС можно пропустить запросто, а вот телефонный звонок ― уже сложнее. Поэтому для особо срочных уведомлений можно настроить Zabbix на телефонные звонки. Выходов, как обычно, несколько.
Мы продолжаем публикацию цикла статей по реализации интеграции устройств мониторинга микроклимата серверных комнат и устройств удалённого распределения питания 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»
Переходим в 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»:
Если кликнуть по картинке с графиком мышкой, то она откроется в большем размере:
Таким образом, мы получили ещё один инструмент, который может сделать работу системного администратора в части контроля микроклимата серверной комнаты немного проще.
Хотите получать оповещение триггеров 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]
Нажимаем «Добавить»
Настройка способа оповещения
Чтобы добавить пользователю данный вид оповещения нужно:
Все, теперь осталось добавить данный способ оповещения в «Действия» («Настройки»->»Действия») и вы будите получать вот такие сообщения:
Оповещение от 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://github.com/ableev/Zabbix-in-Telegram . Получаем в telegram события с графиками по событиям триггеров, классно. Можно чуть развить идею и самим заставить ботa telegram отправлять нам графики из заббикса.
Схема пусть будет следующая:
Распишем, что у нас уже изначально есть и настроено:
Схема работы скрипта следующая:
Мы добавили созданного бота к себе в телеграм. Отправляем ему управляющие команды с целью найти нужный график, делаем по полученным данным запросы в БД 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] + ”
” 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
Регистрируем своего бота, для этого пишем в 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 группы (для групп всегда со знаком минус).
В результате получаем сообщения такого вида:
18.07.2018
В предыдущих темах мы установили систему мониторинга Zabbix и показали на примерах как добавить на мониторинг устройства Dlink и Mikrotik. Для удобства оповещений о неполадках устройств мы настроим отправку оповещений из Zabbix в 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»
Нам нужно определить идентификационный номер своего контакта, на который мы будем получать уведомления от 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!» от нашего бота.
1. Проверяем, где у нас в Zabbix находится папка для скриптов, который мы далее создавать, вводим команду и получаем результат.
Создаем в выше указанной папке script с именем zabbix-to-telegram-bot.sh:
и заполняем его следующим кодом:
Даем права скрипт-файлу:
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 — номер группы где бот живет.
Теперь расскажу, о каждом из способом чуть более подробно.
 
Тут можно ничего не писать, читаете @ARGV массив и дальше по накатанной.
Вот тут, я думал сделать простенький сервер, который будет слушать какойто порт, принимать данные и скармливать скрипту. Но лень не дала это сделать. Отдельный демон, отдельная реализация, опять же автозапуск городить, дружить с systemd/initd. Решил подрядить на это старый, и забытый всеми xinetd.
Ставим
Придумаваем порт и записываем его в /etc/services
Разрешаем этот порт в фаерволе, если он у вас есть.
Пишем модуль для xinetd — /etc/xinetd.d/tlgrmBotSocket
Синтаксис простой, server_args вам даже не надо будет, у меня скрипт по этому аргументу понимает, что дальше идет поток из сети. В самом скрипте бота
вуаля.. теперь с любого удаленного хоста можно подключившись на порт 11234 (обычным телнетом к примеру) отправить сообщение, которое придет в группу телерамма. Конечно, тут можно сделать авторизацию, накрутить. Это уже дело личное и каждый усложняет сам.
Как использовать. К примеру для nagios — уведомления отправляются вот таким образом
В общем, любой stdout поток можно отправить туда. Стыкуется с любыми системами и скриптами.
Из перловых сриптов шлю вот так
Очень просто. Выглядит как-то так
Кажется, что в последнее время электронная почта больше подходит для спама, чем для оперативных оповещений системы мониторинга. В этой статье я соберу методы получения уведомлений на мобильные устройства ― как через мессенджеры, так и через традиционные каналы связи.
Рассматривать решения я буду на примере 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».
Этот мессенджер, к сожалению, не имеет документированного публичного 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 на телефонные звонки. Выходов, как обычно, несколько.
Что будет в моде и как Elghansa попадает в каждый тренд Ещё недавно сантехника считалась…
Для владельцев участок борьба с сорняками – это головная боль. Трава лезет просто из всех…
Современные инсталляции для унитазов становятся все более популярными благодаря эстетике, удобству и функциональности. С их…
Важный этап в процессе передачи владения недвижимостью – оформление соответствующих бумаг. От них зависит законность…
Значит, скважина на участке — штука реально нужная, без неё никуда. Вода, как-никак, вещь первой…
Подвесные светильники – осветительные приборы, которые правильно располагать на некотором расстоянии от потолка. В качестве…
This website uses cookies.