Как настроить уведомления Zabbix в WhatsApp бесплатно#
11 октября 2024 г.
В данной статье рассмотрим интеграцию системы мониторинга Zabbix с мессенджером WhatsApp с помощью шлюза GREEN-API.
Для тех, кто уже использует Zabbix и GREEN-API, основная информация предоставлена в шестом пункте.
- Общая информация
- Настройка GREEN-API
- Создание группы в WhatsApp
- Технология Webhook Endpoint
- Установка и настройка Zabbix
- Интеграция Zabbix и WhatsApp
- Заключение
1. Общая информация#
Для любой IT-инфраструктуры важно иметь возможность следить за состоянием и производительностью компьютеров, серверов, сетей, приложений и т.п. Постоянный мониторинг способен повысить надежность работающей системы, а правильно выбранные для отслеживания параметры помогут в прогнозировании проблем, которые могут привести к сбоям в инфраструктуре. Для таких случаев существуют специальные системы мониторинга – наборы инструментов и процессов, помогающие администраторам своевременно обнаруживать и исправлять возникающие в системе проблемы.
Например, Zabbix - одна из наиболее популярных систем мониторинга, которая умеет следить за состоянием сети, виртуальных машин, серверов, приложений и устройств, баз данных, получать данные о состоянии устройства: объёме памяти, скорости работы процессора, температуре машины, логах и т.п. Функционал Zabbix позволяет даже наблюдать за бизнес-метриками, такими как скорость продаж продукта.
Очевидно, что оперативное получение уведомлений о возникшем сбое из Zabbix – важно для быстрого реагирования на возникающие проблемы. В стандартном функционале системы реализованы различные варианты для отправки уведомлений: SMS, Email, Telegram, Jira и др. Однако, прямой интеграции сообщений в популярный мессенджер WhatsApp, который у многих пользователей всегда под рукой, в Zabbix не представлено.
Преставим простой и бесплатный способ настройки уведомлений Zabbix в WhatsApp с помощью нашего сервиса. Сервис GREEN-API предоставляет удобный инструмент для работы с WhatsApp и поддерживает большее количество сценариев, чем предусмотрено в официальном канале. Главным преимуществом работы с сервисом является полное снятие ограничений. Например, есть возможность написать любое сообщение первым без использования шаблонов.
Также у нас есть бесплатный тариф для разработчиков, который дает возможность использовать весь функционал сервиса. Ограничения по тарифу – только 3 чата и 100 проверок наличия WhatsApp в месяц.
2. Настройка GREEN-API#
С пошаговой инструкцией для регистрации можно ознакомиться здесь. Для бесплатного использования воспользуйтесь тарифом "Разработчик".
Под инстансом подразумевается уникальный номер шлюза, который необходим для отправки и получения сообщении через WhatsApp. Он создается в личном кабинете на сайте GREEN-API и позволяет отправлять и получать сообщения через API. Инстанс позволяет масштабировать связь с клиентами через WhatsApp и автоматизировать процессы.
3. Создание группы в WhatsApp#
Воспользуемся группой в WhatsApp для получения уведомлений всеми ответственными работниками.
Группу можно создать на вашем мобильном устройстве или помощью метода CreateGroup. Рекомендуем создавать группу именно через данный метод, поскольку в теле ответа сразу будет указан chatId
новой группы, который будет требоваться далее при создании интеграции.
4. Технология Webhook Endpoint#
Получение уведомлений будет происходить с использованием технологии Webhook Endpoint. Для отладки входящих уведомлений понадобится тестовый сайт для их получения. В качестве примера используем бесплатный сервис webhook.site.
Настройку получения входящих уведомлений выполним в Личном кабинете. Перейдя в него - выберем требуемый инстанс. В настройках инстанса укажем полученный адрес отправки уведомлений URL (webhookUrl), а также включим переключатели по видам уведомлений как показано ниже.
Подробная инструкция по работе с вебхуками доступна в документации.
Для получения сообщений в группу WhatsApp нужно знать идентификатор чата (ID этой группы). В случае, если группу создали методом CreateGroup
в личном кабинете, то в теле ответа получена строка с идентификатором чата вида "chatId": 11XXXXXXXXXX6561@g.us"
.
Если же группу создали вручную на прошлом этапе, либо для уведомлений нужно использовать одну из уже имеющихся групп, то можно узнать необходимый идентификатор чата вызвав метод GetContacts
, который предназначен для получения списка контактов текущего аккаунта. Подробнее о методе написано в нашей документации.
Кроме этого, можно узнать идентификатор чата с помощью того же webhook.site, написав сообщение в группу. Как это сделать рассказано в одном из видео на канале GREEN-API.
5. Установка и настройка Zabbix#
Обычно, Zabbix, установлен на Linux сервер. Для демонстрации работы нашего скрипта установим Zabbix на виртуальную машину VirtualBox, хотя вы спокойно можете запустить его на своём сервере или запустить Zabbix в docker контейнере. Образ системы мониторинга 5-ой версии установлен на AlmaLinux 8, содержит в себе полностью настроенный Zabbix.
Для установки образа на локальной машине сначала установим программу для виртуализации. В качестве примера, используем бесплатный Oracle VM VirtualBox.
Загрузим VirtualBox с официального сайта. Выберите подходящей для вашей ОС установщик, а после скачивания, запустите его от имени администратора.
На первом шаге нажать Next
. На следующей вкладке все оставим без изменений.
После этого появится предупреждение - Warning: Network Interfaces
, которое уведомит о том, что в процессе установки интернет-соединение будет перезапущено. Согласимся, нажав Yes
.
Если на следующем шаге отображается показанная Ошибка об отсутствии зависимостей Python Core / win32api
, то сначала прервем установку и исправим ошибку.
Исправление ошибки об отсутствии зависимостей Python Core / win32api
- Загрузите Python c официального сайта
- Откройте PowerShell и выполните команду
python -m pip install pywin32
- При необходимости обновите менеджер pip с помощью команды
python -m pip install --upgrade pip
- Начните установку VirtualBox снова, ошибка с Python устранена.
После исправления, заново запустим процесс установки и убедимся, что окно с ошибкой больше не возникает на соответствующем шаге.
На следующем этапе либо оставим все настройки без изменений, либо выберем их в соответствии с предъявляемыми требованиями, после чего нажмем Next
и далее Install
.
По окончании установки можно нажать Finish
с отмеченной галочкой Start Oracle VirtualBox after installation
и сразу попасть в программу, однако рекомендуется сначала перезагрузить компьютер.
Теперь, когда установлен VirtualBox, загрузим настроенный разработчиками образ Zabbix. Перейдем на страницу загрузки готового решения на официальном сайте
Для установки в VirtualBox нужен образ, имеющий расширение .ovf
.
Скачаем архив с образом и распакуем его в удобное место.
В данном примере показываем установку Zabbix версии Zabbix 5.0 LTS
, поскольку на сегодняшний день она является наиболее стабильной и распространенной. Процесс установки и настройки других версий может значительно отличаться.
После чего запустим VirtualBox, если этого не было сделано ранее, и в интерфейсе нажмем кнопку Импорт
.
В открывшемся окне Импорт конфигураций
рядом с полем Файл
нажмем кнопку выбора расположения.
Теперь найдем в распакованной папке с образом файл Zabbix в формате .ovf
. Также убедимся, чтобы в той же папке находится файл Zabbix в формате .vmdk
.
На следующем экране выбираем параметры импорта. Здесь изменим значение в Политика MAC-адреса
на Включать MAC-адреса всех сетевых адаптеров
. После этого нажмем Готово
.
Теперь в VirtualBox появилась виртуальная машина с Zabbix 5.0
. Перед ее запуском изменим некоторые настройки. Для этого сначала выберем Zabbix 5.0
, после чего нажмем на кнопку Настроить
.
При открытии окна конфигурации появилось сообщение о том, что Обнаружены неправильные настройки
. Чтобы исправить эту ошибку зайдем во вкладку Экран
и, как написано в информационном сообщении об ошибке, увеличим видеопамять виртуальной машины, а также поменяем тип графического контроллера на рекомендуемый VMSVGA
. Однако данная ошибка никак не скажется на работе Zabbix, поэтому может быть проигнорирована. Также в последних версиях VirtualBox предварительно нужно переключить настройки на Расширенные
.
Необходимой в данном случае является настройка параметров сети. Перейдем во вкладку Сеть
, где изменим значение в Тип подключения
на Сетевой мост
. Здесь следует оставить небольшое примечание: в случае, если дальше при попытке получить доступ к веб-интерфейсу Zabbix возникнет ошибка, связанная с IPv4, то для ее решения следует исправить значение в Тип подключения
на Виртуальный адаптер хоста
.
Теперь применим внесенные настройки, нажав на Ок
. После чего приступим к запуску Zabbix. Для этого на странице с машиной нажмем на кнопку Запустить
.
Во время всех загрузок не будем принимать никакого участия, пока в консоли не отобразится:
appliance login:
Здесь, в соответствии с официальной документацией, вводим значение root
и нажимаем enter
.
Далее в появившейся строке:
Password:
Вводим значение zabbix
и вновь нажимаем enter
.
После этого в терминале отобразятся данные для доступа в веб-интерфейс Zabbix:
Username: Admin
Password: zabbix
Теперь получим адрес для работы с веб-интерфейсом. Для этого в командной строке пишем команду ip a
и нажимаем enter
. Расположение в ответе нужного адреса показано на скриншоте.
Для дальнейшей работы с веб-интерфейсом перейдем в браузер и в адресной строке укажем полученный адрес (в примере это 192.168.31.194
) и нажмем enter
.
На открывшейся странице авторизации введем полученные ранее Имя пользователя
– Admin
и Пароль
– zabbix
.
Таким образом, получим доступ к веб-интерфейсу Zabbix. Дальнейшую настройку интеграции выполним внутри него.
6. Интеграция Zabbix и WhatsApp#
Теперь, когда произведены все подготовительные действия и есть доступ к веб-интерфейсу, настроим интеграцию уведомлений из Zabbix в WhatsApp при срабатывании триггеров.
В веб-интерфейсе Zabbix перейдем во вкладку Administration
– Media types
.
В правом верхнем углу нажмем на Create media type
и создадим способ оповещения, который назовем WhatsApp
. Добавим в него следующие параметры, как показано на скриншоте.
Значения для Ссылка на хост API
– ApiURL
, Ключ доступа инстанса
– apiTokenInstance
и Уникальный номер инстанса
– IdInstance
берем из личного кабинета GREEN-API. В chatId
вставим ID чата, в который направляем уведомления, либо идентификатор клиента WhatsApp.
Согласно системе идентификаторов WhatsApp, для личного чата идентификатор формируется по шаблону 00000000000@c.us
, где вместо нулей 00000000000
вставляется номер телефона получателя. Телефон указывают полностью, с кодом страны и без пробелов.
Идентификатор группового чата представляет собой строку вида XXXXXXXXXX-XXXXXXXXXX@g.us
или XXXXXXXXXXXXXXXXX@g.us
, где вместо символов XXXXXXXXXXXXXXXXX
вставляется полученный ID чата.
В поле Script
вставим следующий скрипт:
Развернуть скрипт
var WhatsApp= {
ApiURL: null,
IdInstance: null,
apiTokenInstance: null,
chatId: null,
message: null,
parse_mode: null,
// Функция для экранирования специальных символов в зависимости от выбранного формата разметки
escapeMarkup: function (str, mode) {
switch (mode) {
case 'markdown':
return str.replace(/([_*\[`])/g, '\\$&');
case 'markdownv2':
return str.replace(/([_*\[\]()~`>#+\-=|{}.!])/g, '\\$&');
case 'html':
return str.replace(/<(\s|[^a-z\/])/g, '<$1');
default:
return str;
}
},
// Функция для отправки сообщения в WhatsApp
sendMessage: function () {
var params = {
chatId: WhatsApp.chatId,
message: WhatsApp.message,
linkPreview: false
},
data,
response,
request = new CurlHttpRequest(),
url = WhatsApp.ApiURL + '/waInstance' + WhatsApp.IdInstance + '/sendMessage/' + WhatsApp.apiTokenInstance;
Zabbix.Log(4, url);
if (WhatsApp.parse_mode !== null) {
params['parse_mode'] = WhatsApp.parse_mode;
}
if (WhatsApp.proxy) {
request.SetProxy(WhatsApp.proxy);
}
request.AddHeader('Content-Type: application/json');
data = JSON.stringify(params);
Zabbix.Log(4, '[WhatsApp Webhook] params: ' + data);
response = request.Post(url, data);
Zabbix.Log(4, '[WhatsApp Webhook] HTTP code: ' + request.Status());
try {
response = JSON.parse(response);
}
catch (error) {
response = null;
}
// Проверяем, успешна ли отправка сообщения
if (request.Status() !== 200) {
if (typeof response.description === 'string') {
throw response.description;
}
else {
throw 'Unknown error. Check debug log for more information.';
}
}
}
};
try {
var params = JSON.parse(value);
// Проверка наличия обязательных параметров
if (typeof params.ApiURL === 'undefined') {
throw 'Incorrect value is given for parameter "ApiURL": parameter is missing';
}
WhatsApp.ApiURL = params.ApiURL;
if (typeof params.IdInstance === 'undefined') {
throw 'Incorrect value is given for parameter "IdInstance": parameter is missing';
}
WhatsApp.IdInstance = params.IdInstance;
if (typeof params.apiTokenInstance === 'undefined') {
throw 'Incorrect value is given for parameter "apiTokenInstance": parameter is missing';
}
WhatsApp.apiTokenInstance = params.apiTokenInstance;
if (params.HTTPProxy) {
WhatsApp.proxy = params.HTTPProxy;
}
params.ParseMode = params.ParseMode.toLowerCase();
if (['markdown', 'html', 'markdownv2'].indexOf(params.ParseMode) !== -1) {
WhatsApp.parse_mode = params.ParseMode;
}
// Проверка корректности ID чата
if (params.To.includes('@c.us') || params.chatId.includes('@g.us')) {
WhatsApp.chatId = params.chatId;
} else {
throw 'Incorrect value is given for parameter "chatId": parameter is not ended with "@c.us" or "@g.us"';
}
WhatsApp.message = '';
if (params.Subject.length > 0) {
WhatsApp.message += (params.Subject + '\n');
}
WhatsApp.message += params.Message;
if (['markdown', 'html', 'markdownv2'].indexOf(params.ParseMode) !== -1) {
WhatsApp.message = WhatsApp.escapeMarkup(WhatsApp.message, params.ParseMode);
}
WhatsApp.sendMessage();
return 'OK';
}
catch (error) {
Zabbix.Log(4, '[WhatsApp Webhook] notification failed: ' + error);
throw 'Sending failed: ' + error + '.';
}
Либо возьмем этот скрипт из репозитория GREEN-API на GitHub.
Далее перейдем во вкладку Message templates
и добавим следующие стандартные шаблоны сообщений, которые при желании можно изменить на свой вкус.
Шаблон сообщения – это некий заранее подготовленный текст сообщения, который будет использоваться при отправке. Выбранные в шаблонах динамические переменные в момент отправки меняются на актуальные.
Вкладку Options
оставим без изменений. Она содержит настройки обработки оповещений. Приведенные в ней параметры будут идентичными для всех типов сообщений. Подробнее об этом в документации к Zabbix.
Теперь протестуем созданный способ оповещения. При возвращении в Media types
увидим добавленный нами ранее способ WhatsApp
. Для его тестирования в правой части экрана на строке с выбранным способом нажмем на Test
.
В качестве примера в значение Message
поместим Сообщение о триггере
, а в Subject
– Сработал триггер
.
Если все было сделано правильно, то после нажатия на Test
, в Response
отображается значение ОК.
И последним шагом проверим – доставлено ли уведомление в чат WhatsApp.
Как видно, сообщение о срабатывании триггера успешно доставлено.
Благодаря данному способу можно бесплатно настроить любые уведомления из Zabbix в WhatsApp с помощью GREEN-API, укладываясь в рамки тарифа «Разработчик».
7. Заключение#
Итак, в данной статье описано как с помощью сервиса GREEN-API произвести интеграцию Zabbix с WhatsApp. Данный способ получается бесплатным и, при наличии этой инструкций, простым. Надеемся, что это сделает его доступным для широкого круга пользователей.
Теперь можно оперативно получать уведомления из Zabbix прямо в рабочий чат WhatsApp и своевременно реагировать на возникшие проблемы.