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

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

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

  • Устройство мониторинга микроклимата серверной комнаты UniPing server solution v3 или UniPing server solution v3/SMS – 1 шт.;
  • Датчик температуры 1-Wire – 1 шт.;
  • Датчик влажности 1-Wire, (HS) – 1 шт.;
  • ПК или сервер с предустановленной операционной системой CentOS Linux release 7.4.1708 (Core) и развёрнутой системой мониторинга Zabbix версии 3.4.8 – 1 шт.;
  • Локальная сеть для связи между устройством UniPing server solution v3/SMS и ПК, на котором выполняется скрипт бота – 1 шт.;
  • Мессенджер «Telegram» на ПК или смартфоне с доступом к Интернет – 1 шт.;
  • Python 2.7.5 и менеджер пакетов pip – 1 шт.

В этой статье используется устройство мониторинга микроклимата серверной комнаты 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»:

CentOS загрузка Pip

CentOS установка Pip

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

CentOS установка 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» примерно к такому виду:

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

tg_key = "624993224:AAE74nYdfK3aDgej_AowQ0Gc0rXDFCSvZQk" # 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://192.168.1.211/zbx/" # zabbix server full url
zbx_api_user = "Admin"
zbx_api_pass = "12345"
zbx_api_verify = False # True - do not ignore self signed certificates, False - ignore

zbx_basic_auth = False
zbx_basic_auth_user = ""
zbx_basic_auth_pass = ""

proxy_to_zbx = None
proxy_to_tg = None

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

google_maps_api_key = None # get your key, see https://developers.google.com/maps/documentation/geocoding/intro

#zbx_tg_daemon_enabled = False
#zbx_tg_daemon_wl_ids = [509559395, ]
#zbx_tg_daemon_wl_u = ["zeroxzed", ]

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

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

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

tg_key – токен, который выдал бот @BotFather при регистрации нового бота;
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»

CentOS изменение прав на запуск скрипта

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

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

Zabbix добавление нового типа оповещения

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

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

где:
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» прописываем параметры как в нашем примере:

Zabbix добавление нового опевещения пользователю

Zabbix добавление нового оповещения пользователю. Заполнение параметров

где:
Type – параметр для выбора способов оповещений, созданных ранее в системе мониторинга Zabbix (Administration → Media Types). В нашем случае выбираем из списка тип оповещения «Telegram»;
Send to – указываем учётную запись «Telegram» получателя уведомлений. Можно указать текстовый логин или числовой ID. В нашем примере был указан текстовый логин;
When active – время срабатывания данного оповещения. Настройку можно оставить по умолчанию;
Use if severity – важность триггера, чек-боксы определяют, при какой важности триггера будет срабатывать данное оповещение. В примере установлены все чек-боксы для лучшей наглядности данного параметра;
Enabled – параметр для включения и отключения данного оповещения.

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

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

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

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

Zabbix подбор триггеров для действия

где:
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»:

Zabbix настройка сообщения

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

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

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

Чтобы определить требуемый вам itemid, перейдите на страницу «Configuration → Hosts →Items»:

Zabbix Configuration - Hosts - Items

И найдите интересующий вас параметр. Например, значение температуры на первом термодатчике устройства мониторинга микроклимата серверной комнаты UniPing server solution v3/SMS:

Zabbix выбор параметра

Откройте свойства нужного вам параметра. Значение itemid будет в адресной строке браузера:

Zabbix свойства параметра

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

Zabbix форма описания действия

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

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

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

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

Zabbix подбор триггеров для действия

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

Zabbix форма описания действия

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

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

Telegram Общий вид сообщений с графиками

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

Telegram увеличенное сообщение

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

?
×

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

    Наши операторы свяжутся с вами при первой возможности

    ×

      Обращение в техническую поддержку

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

      ×
      Ваша заявка отправлена. Мы свяжемся с вами при первой возможности.