DOC / 1446 SysAdminHub.ru

Как настроить оповещения Zabbix в MAX

Как настроить оповещения Zabbix в MAX

Что понадобится для интеграции Zabbix с MAX

Схема работы достаточно простая:

Zabbix
   │
   │ Webhook / HTTPS
   ▼
MAX API
   │
   ▼
Бот MAX
   │
   ▼
Чат с администраторами

Когда в Zabbix возникает проблема, Action формирует уведомление и передаёт его созданному Media type. Webhook обращается к API MAX, а бот публикует сообщение в нужном чате.

Для настройки нам понадобятся:

  • работающий сервер Zabbix;
  • бот MAX;
  • токен бота;
  • чат, в который добавлен бот;
  • chat_id этого чата;
  • сетевой доступ от Zabbix Server к API MAX.

Создаём бота в MAX и получаем токен

Для отправки уведомлений из Zabbix понадобится чат-бот MAX. Именно от его имени будут приходить сообщения о проблемах и восстановлении сервисов.

Перейдите на платформу разработчиков MAX и создайте нового чат-бота.

При создании укажите:

  • название бота;
  • описание;
  • аватар — при необходимости.

Например, для системы мониторинга можно назвать бота:

Zabbix

После создания откройте настройки бота и перейдите во вкладку Интеграция.

Нажмите Получить токен и скопируйте полученное значение.

Токен выглядит примерно так:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ExampleToken...

Он понадобится при настройке Webhook в Zabbix.

Создаём чат MAX и добавляем бота

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

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

Создаём группу

Откройте MAX и создайте новую группу:

  • нажмите +;
  • выберите Создать группу;
  • добавьте необходимых участников;
  • задайте название группы.

Например:

Zabbix Monitoring

или:

Zabbix Alerts
Создание группы MAX для уведомлений Zabbix

Добавляем бота

Откройте созданную группу и перейдите к списку участников.

Далее:

  1. нажмите Добавить участника;
  2. найдите созданного ранее бота;
  3. добавьте его в группу.
Добавление бота MAX в чат Zabbix Monitoring

После добавления бота отправьте в группу обычное сообщение, например:

test
Тестовое сообщение в чате MAX с ботом Zabbix

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

Получаем chat_id в MAX

Для отправки сообщения через API необходимо знать chat_id — уникальный идентификатор чата.

Получить список доступных боту чатов можно через API MAX.

Получаем chat_id через PowerShell

В Windows откройте PowerShell и выполните:

Invoke-WebRequest -Uri "https://platform-api.max.ru/chats" `
  -Headers @{Authorization="ВАШ_ТОКЕН"}

Если необходимо вывести непосредственно содержимое ответа:

(Invoke-WebRequest -Uri "https://platform-api.max.ru/chats" `
  -Headers @{Authorization="ВАШ_ТОКЕН"}).Content

Получаем chat_id через curl

В Linux или macOS можно выполнить:

curl -X GET "https://platform-api.max.ru/chats" \
  -H "Authorization: ВАШ_ТОКЕН"

API вернёт список доступных боту чатов. Нас интересует параметр:

chat_id

Например:

-73905479971513

Если нужный чат не отображается

Проверьте:

  • добавлен ли бот в нужную группу;
  • отправлялось ли сообщение после добавления бота;
  • правильно ли указан токен;
  • возвращает ли запрос к API успешный ответ.

После этого повторите запрос.

Создаём Webhook MAX в Zabbix

Теперь у нас есть две основные вещи:

  • Token — токен бота;
  • ChatId — идентификатор чата.

Можно переходить к настройке Zabbix.

Откройте:

Alerts → Media types

Нажмите Create media type.

Укажите:

  • Name: MAX;
  • Type: Webhook.

Добавляем параметры Webhook

В блоке Parameters создайте следующие параметры:

Параметр Значение
Token ВАШ_ТОКЕН
ChatId ВАШ_CHAT_ID
Subject {ALERT.SUBJECT}
Message {ALERT.MESSAGE}
Severity {EVENT.SEVERITY}

Параметр Severity понадобится для преобразования стандартных уровней важности Zabbix в более читаемый вид.

Добавляем JavaScript Webhook

В поле Script вставьте следующий код:

try {
    var params = JSON.parse(value);

    if (!params.Token) {
        throw 'MAX webhook error: Token is empty.';
    }

    if (!params.ChatId) {
        throw 'MAX webhook error: ChatId is empty.';
    }

    // Перевод уровня важности
    var severityMap = {
        "Not classified": "⚪ Не классифицировано",
        "Information": "🔵 Информация",
        "Warning": "🟡 Предупреждение",
        "Average": "🟠 Средняя",
        "High": "🔴 Высокая",
        "Disaster": "💥 Авария",

        "Не классифицировано": "⚪ Не классифицировано",
        "Информация": "🔵 Информация",
        "Предупреждение": "🟡 Предупреждение",
        "Средняя": "🟠 Средняя",
        "Высокая": "🔴 Высокая",
        "Авария": "💥 Авария"
    };

    var severity = params.Severity || '';
    var severityText = severityMap[severity] || severity;

    var subject = params.Subject || '';
    var message = params.Message || '';

    if (severity) {
        subject = subject.replace(severity, severityText);
        message = message.replace(severity, severityText);
    }

    var text = '';

    if (subject) {
        text += subject + '\n';
    }

    if (message) {
        text += message;
    }

    var url = 'https://platform-api.max.ru/messages?chat_id=' +
        encodeURIComponent(params.ChatId);

    var payload = JSON.stringify({
        text: text,
        format: "html"
    });

    var req = new HttpRequest();

    req.addHeader('Content-Type: application/json');
    req.addHeader('Accept: application/json');
    req.addHeader('Authorization: ' + params.Token);

    var response = req.post(url, payload);
    var status = req.getStatus();

    Zabbix.log(4, '[MAX webhook] HTTP status: ' + status);
    Zabbix.log(4, '[MAX webhook] Response: ' + response);

    if (status < 200 || status >= 300) {
        throw 'MAX webhook error: HTTP ' + status +
            '. Response: ' + response;
    }

    return 'OK';
}
catch (error) {
    Zabbix.log(3, '[MAX webhook] Failed: ' + error);
    throw 'Sending failed: ' + error;
}

После добавления скрипта нажмите Add.

Настройка Webhook MAX в Zabbix

Проверяем Webhook

После сохранения Media type найдите созданный MAX и нажмите Test.

Проверьте значения параметров и запустите тестовую отправку.

Тестирование Webhook MAX в Zabbix

Если параметры указаны правильно и API доступен, тестовое сообщение появится в MAX.

Тестовое уведомление Zabbix в MAX

Настраиваем шаблоны Problem и Recovery

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

Откройте:

Alerts → Media types → MAX

Перейдите в раздел Message templates.

Нам понадобятся два шаблона:

  • Problem — возникновение проблемы;
  • Problem recovery — восстановление.

Шаблон Problem

Создайте шаблон с типом:

Problem

Subject:

🚨 <b>ПРОБЛЕМА</b>: {EVENT.NAME}

Message:

<br />
<b>Событие:</b> {EVENT.NAME}
<b>Хост:</b> {HOST.NAME}
<b>Уровень:</b> {EVENT.SEVERITY}

<b>Время:</b> {EVENT.DATE} {EVENT.TIME}

{TRIGGER.URL}
Шаблон Problem для уведомлений Zabbix в MAX

Шаблон Recovery

Создайте второй шаблон для восстановления.

Message type:

Recovery

Subject:

✅ <b>РЕШЕНО</b>: {EVENT.NAME}

Message:

<br />
<b>Событие:</b> {EVENT.NAME}
<b>Хост:</b> {HOST.NAME}
<b>Уровень:</b> {EVENT.SEVERITY}

<b>Восстановлено:</b> {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
<b>Длительность:</b> {EVENT.DURATION}

{TRIGGER.URL}
Шаблон Recovery для уведомлений Zabbix в MAX

Теперь сообщения о проблемах и восстановлении будут иметь единый читаемый формат.

Добавляем MAX пользователю Zabbix

Создания Media type недостаточно. Zabbix должен знать, какому пользователю отправлять уведомления.

Откройте раздел управления пользователями и выберите пользователя, которому необходимо добавить новый способ оповещения.

Можно использовать существующего администратора или отдельного пользователя, созданного специально для уведомлений.

Перейдите во вкладку Media и нажмите Add.

Укажите:

  • Type: MAX;
  • Send to: например, max;
  • When active: 1-7,00:00-24:00;
  • Use if severity: необходимые уровни важности;
  • Enabled: включено.

В моём случае в рабочей инфраструктуре имеет смысл отправлять в этот канал прежде всего события высокой важности, например High и Disaster.

Добавление Media MAX пользователю Zabbix

При необходимости одному пользователю можно оставить несколько каналов уведомлений. Например, MAX может работать параллельно с электронной почтой или другим уже используемым каналом.

Создаём Action для отправки уведомлений

Теперь необходимо определить, при каких событиях Zabbix должен отправлять сообщение.

За это отвечает механизм Actions.

Перейдите:

Alerts → Actions → Trigger actions

Нажмите Create action.

Основные параметры Action

Например:

Name: Send to MAX

В Conditions задайте условия, при которых должно выполняться действие.

Здесь можно ограничить уведомления:

  • по уровню важности;
  • по группе хостов;
  • по конкретным хостам;
  • по тегам событий;
  • по другим доступным условиям.
Создание Action для отправки уведомлений Zabbix в MAX

Отправка сообщения при возникновении проблемы

Перейдите во вкладку Operations и добавьте операцию отправки сообщения.

Укажите:

  • Operation type: Send message;
  • пользователя или группу пользователей;
  • Send only to: MAX.

Отправка сообщения после восстановления

Теперь перейдите во вкладку Recovery operations.

Добавьте операцию отправки сообщения тому же пользователю или группе и укажите:

Send only to: MAX
Настройка Recovery operations для MAX в Zabbix

Сохраните Action.

Проверяем реальные уведомления Zabbix в MAX

Тест Media type подтверждает работу Webhook, но финальную проверку лучше провести через настоящее событие Zabbix.

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

Например, если для остановки Zabbix Agent уже существует триггер, можно остановить агент на тестовой системе.

Windows

net stop "Zabbix Agent"

Linux

systemctl stop zabbix-agent

После срабатывания соответствующего триггера в MAX должно появиться сообщение о проблеме.

Уведомление о проблеме Zabbix в MAX

Проверяем Recovery

После проверки возвращаем агент в рабочее состояние.

Windows:

net start "Zabbix Agent"

Linux:

systemctl start zabbix-agent

Когда триггер перейдёт в состояние восстановления, должно прийти второе сообщение.

Уведомление Zabbix о восстановлении проблемы в MAX

Таким образом мы проверили всю цепочку:

Trigger
   ↓
Action
   ↓
User
   ↓
Media MAX
   ↓
Webhook
   ↓
MAX API
   ↓
Чат

Что проверить, если уведомления в MAX не приходят

Если тестирование не прошло, проверяйте цепочку последовательно.

Есть ли проблема в Zabbix

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

Сработал ли Action

Проверьте условия созданного Action. Событие должно соответствовать заданным фильтрам.

Назначен ли пользователю MAX

У пользователя должен быть включён созданный Media type, а уровень важности события должен соответствовать параметру Use if severity.

Проверяем журнал уведомлений

Проверьте историю отправки уведомлений в Zabbix. В зависимости от используемой версии интерфейса расположение соответствующего отчёта может отличаться.

Проверяем журнал Zabbix Server

На Linux можно посмотреть журнал сервера:

tail -f /var/log/zabbix/zabbix_server.log

Для нашего Webhook также полезно искать сообщения:

[MAX webhook]

Мы специально добавили их в JavaScript через Zabbix.log().

Проверяем доступ к API MAX

Сервер Zabbix должен иметь возможность установить HTTPS-соединение с:

platform-api.max.ru

Проверьте DNS, маршрутизацию, межсетевой экран, прокси-сервер и доступ по TCP 443.

В итоге наиболее частые причины проблемы:

  • неверный Token;
  • неверный ChatId;
  • бот не добавлен в нужный чат;
  • сервер Zabbix не имеет доступа к API MAX;
  • Media не назначен пользователю;
  • уровень важности события запрещён настройками Media;
  • условия Action не выполняются;
  • не настроена Recovery operation.

FAQ

Можно ли отправлять уведомления Zabbix в MAX без внешнего скрипта?

Да. В этой конфигурации используется встроенный Media type Webhook. JavaScript выполняется средствами Zabbix и отправляет HTTP-запрос непосредственно к API MAX.

Где взять chat_id для MAX?

После добавления бота в чат запросите доступные боту чаты через API MAX. В полученном ответе найдите параметр chat_id нужного чата.

Почему тест Webhook работает, а реальные уведомления не приходят?

Проверьте назначение Media пользователю, разрешённые уровни важности, условия Action и Operations/Recovery operations. Тест Media type проверяет сам Webhook, но не всю цепочку обработки события Zabbix.

Можно ли отправлять Problem и Recovery разными сообщениями?

Да. Для Media type создаются отдельные шаблоны Problem и Recovery, а в Action настраиваются обычные Operations и Recovery operations.

Можно ли отправлять в MAX только критические события?

Да. Ограничение можно задать через Use if severity у Media пользователя и/или через Conditions соответствующего Action.

Какой сетевой доступ нужен серверу Zabbix?

Для рассмотренной интеграции Zabbix Server должен иметь возможность обращаться по HTTPS к platform-api.max.ru, то есть должен быть разрешён исходящий TCP 443 и корректно работать DNS-разрешение имени.

Где искать ошибку Webhook MAX?

Проверьте результат тестирования Media type и журнал Zabbix Server. В приведённом скрипте предусмотрены записи [MAX webhook], содержащие HTTP-статус, ответ API и информацию об ошибке отправки.

Заключение

Мы полностью настроили отправку уведомлений Zabbix в MAX через Webhook: создали бота и групповой чат, получили Token и ChatId, настроили Media type, добавили JavaScript для обращения к API MAX, создали шаблоны Problem и Recovery и привязали новый способ оповещений к пользователю.

После этого настроили Action и проверили не только тестовую отправку Webhook, но и полный рабочий сценарий: возникновение проблемы → уведомление в MAX → восстановление → сообщение Recovery.

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

Например, дальше можно разделить уведомления по нескольким чатам, добавить разные правила для High и Disaster, изменить оформление сообщений или маршрутизировать события в зависимости от тегов и групп хостов.

Если вы активно автоматизируете работу с Zabbix, смотрите также статью Как массово добавить хосты в Zabbix из Excel через API.

ORIGINAL / ATTRIBUTION

Источник материала

Материал взят с https://sysadminhub.ru/. Оригинальная статья и авторство указаны по ссылке ниже.

Оригинал статьи на SysAdminHub.ru ↗

https://sysadminhub.ru/other/zabbix/how-to-set-up-zabbix-alerts-in-max

Материал проверен 10.10.2026. При изменении программного обеспечения сверяйтесь с актуальной документацией.
← Вернуться в базу знаний