Перейти к содержанию

Как настроить уведомления Zabbix в WhatsApp бесплатно

11 октября 2024 г.

Zabbix Notifications in WhatsApp for Free

В данной статье рассмотрим интеграцию системы мониторинга Zabbix с мессенджером WhatsApp с помощью шлюза GREEN-API.

Для тех, кто уже использует Zabbix и GREEN-API, основная информация предоставлена ​​в шестом пункте.

  1. Общая информация
  2. Настройка GREEN-API
  3. Создание группы в WhatsApp
  4. Технология Webhook Endpoint
  5. Установка и настройка Zabbix
  6. Интеграция Zabbix и WhatsApp
  7. Заключение

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), а также включим переключатели по видам уведомлений как показано ниже.

Create a group in WhatsApp

Подробная инструкция по работе с вебхуками доступна в документации.

Для получения сообщений в группу 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. На следующей вкладке все оставим без изменений.

Installing a Oracle VM VirtualBox 1

После этого появится предупреждение - Warning: Network Interfaces, которое уведомит о том, что в процессе установки интернет-соединение будет перезапущено. Согласимся, нажав Yes.

Если на следующем шаге отображается показанная Ошибка об отсутствии зависимостей Python Core / win32api, то сначала прервем установку и исправим ошибку.

Installing a Oracle VM VirtualBox 3

Исправление ошибки об отсутствии зависимостей Python Core / win32api
  1. Загрузите Python c официального сайта
  2. Откройте PowerShell и выполните команду python -m pip install pywin32
  3. При необходимости обновите менеджер pip с помощью команды python -m pip install --upgrade pip
  4. Начните установку VirtualBox снова, ошибка с Python устранена.

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

На следующем этапе либо оставим все настройки без изменений, либо выберем их в соответствии с предъявляемыми требованиями, после чего нажмем Next и далее Install.

Installing a Oracle VM VirtualBox 4

По окончании установки можно нажать Finish с отмеченной галочкой Start Oracle VirtualBox after installation и сразу попасть в программу, однако рекомендуется сначала перезагрузить компьютер.

Теперь, когда установлен VirtualBox, загрузим настроенный разработчиками образ Zabbix. Перейдем на страницу загрузки готового решения на официальном сайте

Для установки в VirtualBox нужен образ, имеющий расширение .ovf.

Installing a Zabbix 1

Скачаем архив с образом и распакуем его в удобное место.

В данном примере показываем установку Zabbix версии Zabbix 5.0 LTS, поскольку на сегодняшний день она является наиболее стабильной и распространенной. Процесс установки и настройки других версий может значительно отличаться.
После чего запустим VirtualBox, если этого не было сделано ранее, и в интерфейсе нажмем кнопку Импорт.

Installing a Zabbix 1

В открывшемся окне Импорт конфигураций рядом с полем Файл нажмем кнопку выбора расположения.

Installing a Zabbix 1

Теперь найдем в распакованной папке с образом файл Zabbix в формате .ovf. Также убедимся, чтобы в той же папке находится файл Zabbix в формате .vmdk.

На следующем экране выбираем параметры импорта. Здесь изменим значение в Политика MAC-адреса на Включать MAC-адреса всех сетевых адаптеров. После этого нажмем Готово.

Теперь в VirtualBox появилась виртуальная машина с Zabbix 5.0. Перед ее запуском изменим некоторые настройки. Для этого сначала выберем Zabbix 5.0, после чего нажмем на кнопку Настроить.

При открытии окна конфигурации появилось сообщение о том, что Обнаружены неправильные настройки. Чтобы исправить эту ошибку зайдем во вкладку Экран и, как написано в информационном сообщении об ошибке, увеличим видеопамять виртуальной машины, а также поменяем тип графического контроллера на рекомендуемый VMSVGA. Однако данная ошибка никак не скажется на работе Zabbix, поэтому может быть проигнорирована. Также в последних версиях VirtualBox предварительно нужно переключить настройки на Расширенные.

Необходимой в данном случае является настройка параметров сети. Перейдем во вкладку Сеть, где изменим значение в Тип подключения на Сетевой мост. Здесь следует оставить небольшое примечание: в случае, если дальше при попытке получить доступ к веб-интерфейсу Zabbix возникнет ошибка, связанная с IPv4, то для ее решения следует исправить значение в Тип подключения на Виртуальный адаптер хоста.

Installing a Zabbix 1

Теперь применим внесенные настройки, нажав на Ок. После чего приступим к запуску Zabbix. Для этого на странице с машиной нажмем на кнопку Запустить.

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

appliance login:

Здесь, в соответствии с официальной документацией, вводим значение root и нажимаем enter.

Далее в появившейся строке:

Password:

Вводим значение zabbix и вновь нажимаем enter.

После этого в терминале отобразятся данные для доступа в веб-интерфейс Zabbix:

Username: Admin

Password: zabbix

Теперь получим адрес для работы с веб-интерфейсом. Для этого в командной строке пишем команду ip a и нажимаем enter. Расположение в ответе нужного адреса показано на скриншоте.

Installing a Zabbix 1

Для дальнейшей работы с веб-интерфейсом перейдем в браузер и в адресной строке укажем полученный адрес (в примере это 192.168.31.194) и нажмем enter.

На открывшейся странице авторизации введем полученные ранее Имя пользователяAdmin и Парольzabbix.

Таким образом, получим доступ к веб-интерфейсу Zabbix. Дальнейшую настройку интеграции выполним внутри него.

6. Интеграция Zabbix и WhatsApp

Теперь, когда произведены все подготовительные действия и есть доступ к веб-интерфейсу, настроим интеграцию уведомлений из Zabbix в WhatsApp при срабатывании триггеров.

В веб-интерфейсе Zabbix перейдем во вкладку AdministrationMedia types.

В правом верхнем углу нажмем на Create media type и создадим способ оповещения, который назовем WhatsApp. Добавим в него следующие параметры, как показано на скриншоте.

Media type WhatsApp in Zabbix UI

Значения для Ссылка на хост APIApiURL, Ключ доступа инстанса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, '&lt;$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 и добавим следующие стандартные шаблоны сообщений, которые при желании можно изменить на свой вкус.

Message templates in Zabbix UI

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

Вкладку Options оставим без изменений. Она содержит настройки обработки оповещений. Приведенные в ней параметры будут идентичными для всех типов сообщений. Подробнее об этом в документации к Zabbix.

Теперь протестуем созданный способ оповещения. При возвращении в Media types увидим добавленный нами ранее способ WhatsApp. Для его тестирования в правой части экрана на строке с выбранным способом нажмем на Test.

Test WA media type in Zabbix UI

В качестве примера в значение Message поместим Сообщение о триггере, а в SubjectСработал триггер.

Message from Zabbix to WhatsApp

Если все было сделано правильно, то после нажатия на Test, в Response отображается значение ОК.

И последним шагом проверим – доставлено ли уведомление в чат WhatsApp.

Message from Zabbix in WhatsApp

Как видно, сообщение о срабатывании триггера успешно доставлено.

Благодаря данному способу можно бесплатно настроить любые уведомления из Zabbix в WhatsApp с помощью GREEN-API, укладываясь в рамки тарифа «Разработчик».

7. Заключение

Итак, в данной статье описано как с помощью сервиса GREEN-API произвести интеграцию Zabbix с WhatsApp. Данный способ получается бесплатным и, при наличии этой инструкций, простым. Надеемся, что это сделает его доступным для широкого круга пользователей.

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