Что получится после настройки
Со стороны Zabbix интеграция называется Webhook, потому что Zabbix выполняет исходящий HTTP-запрос. В Ontik запрос принимает входной REST API POST /v1/events. Раздел исходящих Webhooks в кабинете Ontik для этой схемы не требуется.
- Zabbix обнаруживает проблему или восстановление.
- Action запускает способ оповещения Ontik.
- JavaScript формирует JSON и отправляет его по HTTPS.
- Ontik сохраняет событие вместе с узлом, важностью, статусом и ссылкой.
- Владелец и участники проекта получают Web Push на подключённых устройствах.
Что нужно подготовить
- доступ к настройкам способов оповещения и Actions в Zabbix;
- проект Ontik, в который должны приходить инциденты;
- ключ проекта из вкладки «API и интеграция»;
- внешний адрес интерфейса Zabbix, если из Ontik нужна кликабельная ссылка на инцидент;
- включённые уведомления Ontik хотя бы на одном устройстве.
Шаг 1. Создайте способ оповещения
В зависимости от версии Zabbix раздел называется «Оповещения → Способы оповещений» или «Администрирование → Способы оповещений». Нажмите «Создать способ оповещения».
| Поле | Значение |
|---|---|
| Имя | Ontik |
| Тип | Webhook |
| Время ожидания | 30s |
| Обработка тегов | Выключено |
| Добавить запись в меню события | Выключено |
| Описание | Передача событий Zabbix в проект Ontik |
| Активировано | Включено |
Шаг 2. Заполните параметры
Удалите стандартные строки, которые не нужны, и добавьте таблицу ниже. Названия параметров чувствительны к регистру.
| Имя | Значение | Назначение |
|---|---|---|
URL | https://app.ontik.ru/v1/events | Входной API Ontik |
APIKey | Ключ выбранного проекта | Авторизация источника |
HTTPProxy | Пусто | Заполните только при наличии proxy |
Source | Zabbix | Источник для фильтра в Ontik |
Subject | {ALERT.SUBJECT} | Заголовок события |
Message | {ALERT.MESSAGE} | Подробности |
Host | {HOST.NAME} | Узел Zabbix |
EventID | {EVENT.ID} | ID события источника |
EventStatus | {EVENT.STATUS} | PROBLEM или RESOLVED |
Severity | {EVENT.SEVERITY} | Важность |
Trigger | {TRIGGER.NAME} | Название триггера |
TriggerID | {TRIGGER.ID} | ID триггера |
EventTime | {EVENT.DATE} {EVENT.TIME} | Время Zabbix |
ZabbixURL | Например, https://zabbix.example.ru | Основа ссылки на инцидент |
Если интерфейс Zabbix недоступен пользователям Ontik по внешнему адресу, оставьте ZabbixURL пустым. Остальные данные продолжат передаваться.
Шаг 3. Вставьте готовый JavaScript
Нажмите значок редактирования возле поля «Скрипт» и вставьте код целиком.
var params = JSON.parse(value),
request = new HttpRequest(),
response,
status,
payload,
meta,
eventUrl;
function text(value, maxLength) {
var result;
if (value === null || typeof value === 'undefined') {
return '';
}
result = String(value);
return result.length > maxLength
? result.substring(0, maxLength)
: result;
}
if (!params.URL) {
throw 'Не указан параметр URL';
}
if (!params.APIKey) {
throw 'Не указан API-ключ проекта Ontik';
}
if (params.HTTPProxy) {
request.setProxy(params.HTTPProxy);
}
request.addHeader('Content-Type: application/json');
request.addHeader('X-Ontik-Key: ' + params.APIKey);
meta = {
host: text(params.Host, 500),
severity: text(params.Severity, 500),
status: text(params.EventStatus, 500),
trigger: text(params.Trigger, 500),
event_id: text(params.EventID, 500),
event_time: text(params.EventTime, 500),
message: text(params.Message, 500)
};
if (params.ZabbixURL && params.EventID && params.TriggerID) {
eventUrl = String(params.ZabbixURL).replace(/\/+$/, '')
+ '/tr_events.php?triggerid='
+ encodeURIComponent(params.TriggerID)
+ '&eventid='
+ encodeURIComponent(params.EventID);
meta.url = text(eventUrl, 500);
}
payload = {
event: text(params.Subject || params.Trigger || 'Событие Zabbix', 120),
source: text(params.Source || 'Zabbix', 100),
meta: meta
};
Zabbix.log(4, '[Ontik webhook] Отправка: ' + JSON.stringify(payload));
response = request.post(params.URL, JSON.stringify(payload));
status = request.getStatus();
Zabbix.log(4, '[Ontik webhook] HTTP ' + status + ': ' + response);
if (status < 200 || status >= 300) {
throw 'Ontik вернул HTTP ' + status + ': ' + response;
}
return 'OK';Код ограничивает длину полей под контракт API Ontik, формирует источник Zabbix и добавляет meta.url. Значение url в ленте Ontik отображается кликабельной ссылкой.
Шаг 4. Добавьте шаблоны сообщений
Откройте вкладку «Шаблоны сообщений». Они нужны даже при использовании собственного JavaScript: Zabbix подставляет их в {ALERT.SUBJECT} и {ALERT.MESSAGE}.
Проблема
Тема:
[PROBLEM] {TRIGGER.NAME}Сообщение:
Узел: {HOST.NAME}
Проблема: {TRIGGER.NAME}
Важность: {EVENT.SEVERITY}
Статус: {EVENT.STATUS}
Время: {EVENT.DATE} {EVENT.TIME}
Последнее значение: {ITEM.LASTVALUE}
ID события: {EVENT.ID}Восстановление проблемы
Тема:
[RESOLVED] {TRIGGER.NAME}Сообщение:
Узел: {HOST.NAME}
Проблема устранена: {TRIGGER.NAME}
Важность: {EVENT.SEVERITY}
Статус: {EVENT.STATUS}
Время восстановления: {EVENT.RECOVERY.DATE} {EVENT.RECOVERY.TIME}
ID события: {EVENT.ID}Сохраните способ оповещения.
Шаг 5. Свяжите интеграцию с пользователем и Action
Добавьте способ оповещения пользователю
- Откройте пользователя Zabbix, от имени которого выполняются оповещения.
- Перейдите на вкладку способов оповещения.
- Добавьте тип Ontik.
- В обязательном поле «Отправлять на» напишите
Ontik. Это технический заполнитель; ключ проекта сюда вводить не нужно. - Выберите периоды активности и уровни важности.
- Включите запись и сохраните пользователя.
Добавьте Ontik в действие
- Откройте «Действия» → «Действия триггеров».
- Создайте новое действие или откройте существующее.
- В операции проблемы выберите пользователя и способ оповещения Ontik.
- В операциях восстановления добавьте такую же отправку, если хотите получать
[RESOLVED]. - Проверьте условия действия, уровни важности и состояние «Включено».
Шаг 6. Проверьте доставку
- В списке способов оповещения нажмите «Тест» напротив Ontik.
- Для теста укажите короткие значения параметров макросов, если Zabbix попросит заполнить их вручную.
- Успешный скрипт вернёт
OK. - Откройте проект Ontik: в ленте должно появиться новое событие с источником Zabbix.
- Разверните карточку и проверьте
host,severity,status,event_idи ссылку. - Создайте безопасную тестовую проблему Zabbix и затем восстановите её, чтобы проверить реальный Action.
API Ontik отвечает кодом 202 Accepted. Это означает, что событие принято и фоновые доставки поставлены в очередь. Видимый Web Push дополнительно зависит от разрешений браузера и операционной системы.
Если тест не сработал
| Симптом | Что проверить |
|---|---|
Не указан параметр URL | Название параметра должно быть ровно URL, значение — https://app.ontik.ru/v1/events. |
Не указан API-ключ | Проверьте параметр APIKey и ключ выбранного проекта. |
| HTTP 401 или 422 | Ключ недействителен, отсутствует заголовок либо данные не соответствуют контракту API. |
| Timeout / connection error | Сервер Zabbix должен иметь исходящий HTTPS-доступ к app.ontik.ru:443. Проверьте DNS, firewall и proxy. |
| Тест успешен, события нет | Убедитесь, что проверяете проект, ключ которого указан в Media type. |
| Событие есть, Web Push нет | Проверьте уведомления для app.ontik.ru в браузере и в настройках операционной системы. |
| Тест работает, реальная проблема нет | Проверьте пользователя, его способы оповещения, условия Action, операции и шаблоны сообщений. |
HttpRequest is not defined | Вероятно старая версия Zabbix: для старой версии может потребоваться другой объект HTTP-запроса. |
Для подробной проверки откройте журнал действий Zabbix и лог zabbix_server.log. Скрипт пишет диагностические строки с префиксом [Ontik webhook], но не выводит API-ключ.
Особенности текущей интеграции
- PROBLEM и RESOLVED — отдельные события. Сейчас Ontik не объединяет их автоматически в одну карточку. Общий
event_idпомогает сопоставить записи. - Подавление повторов настраивается в Zabbix. Ontik сохраняет каждый принятый POST как событие.
- Большие графики и история остаются в Zabbix. В Ontik передаются краткий контекст и ссылка.
- Один ключ относится к одному проекту. Для разных проектов создайте отдельные способы оповещения или отдельные интеграции.
- Webhook Ontik не нужен для входящего события. Он понадобится только если принятое событие нужно дополнительно передать из Ontik в другую систему.
Описание создания пользовательского Webhook и тестирования Media type также есть в официальной документации Zabbix.
Получайте оповещения Zabbix там, где работает команда
После настройки инциденты сохраняются в проекте Ontik, доступны владельцу и участникам и приходят на подключённые браузеры.
Сценарий мониторинга →Контракт API →Читайте также
Не получилось подключить? Напишите на info@ontik.ru и укажите версию Zabbix и текст ошибки без API-ключа.
