Потоковая передача во внешние системы

Обзор

Возможна потоковая передача значений элементов данных и событий из Zabbix во внешние системы по HTTP (смотрите подробности протокола).

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

За потоковую передачу данных отвечают два типа процессов сервера Zabbix: менеджер коннекторов (connector manager) и рабочий процесс коннектора (connector worker). Внутренний элемент данных Zabbix zabbix[connector_queue] позволяет отслеживать количество значений, поставленных в очередь коннектора.

Настройка

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

1. Настройте удаленную систему для получения данных от Zabbix. Для этого доступны следующие инструменты:

  • Пример простого получателя, который записывает полученную информацию в файлы events.ndjson и history.ndjson.
  • Kafka connector for Zabbix server - легковесный сервер, написанный на Go и предназначенный для передачи значений элементов данных и событий с сервера Zabbix брокеру Kafka.

2. Укажите необходимое количество рабочих процессов коннектора в Zabbix, изменив параметр StartConnectors в zabbix_server.conf. Количество рабочих процессов коннектора должно соответствовать количеству настроенных коннекторов в веб-интерфейсе Zabbix (или превышать его, если количество параллельных сеансов больше 1). Затем перезапустите сервер Zabbix.

3. Настройте новый коннектор в веб-интерфейсе Zabbix (Администрирование > Общие > Коннекторы) и перезагрузите кэш сервера с помощью команды zabbix_server -R config_cache_reload.

Обязательные поля отмечены звездочкой.

Параметр Описание
Имя Введите имя коннектора.
Тип данных Выберите тип данных для потоковой передачи:
Значения элементов данных - передавать значения элементов данных из Zabbix во внешние системы;
События - передавать события из Zabbix во внешние системы.
URL Введите URL получателя. Поддерживаются пользовательские макросы.
Фильтр тегов Экспортировать только значения элементов данных или события, соответствующие фильтру тегов. Если фильтр не задан, экспортируются все данные.
Можно включать или исключать определенные теги и значения тегов. Можно задать несколько условий. Сопоставление имен тегов всегда чувствительно к регистру.

Для каждого условия доступны следующие операторы:
Существует - включить указанные имена тегов;
Равно - включить указанные имена тегов и значения (с учетом регистра);
Содержит - включить указанные имена тегов, значения которых содержат введенную строку (поиск подстроки без учета регистра);
Не существует - исключить указанные имена тегов;
Не равно - исключить указанные имена тегов и значения (с учетом регистра);
Не содержит - исключить указанные имена тегов, значения которых содержат введенную строку (поиск подстроки без учета регистра).

Для условий доступны два типа вычисления:
И/ИЛИ - должны выполняться все условия; условия с одинаковым именем тега будут объединены оператором ИЛИ;
ИЛИ - достаточно выполнения одного условия.
Тип информации Выберите тип информации (числовой (без знака), числовой (с плавающей запятой), символьный и т. д.), по которому следует фильтровать значения элементов данных, передаваемые коннектором.
Это поле доступно, если для параметра Тип данных установлено значение «Значения элементов данных».
HTTP-аутентификация Выберите вариант аутентификации:
Нет - аутентификация не используется;
Basic - используется базовая аутентификация;
NTLM - используется аутентификация NTLM (Windows NT LAN Manager);
Kerberos - используется аутентификация Kerberos (см. также: Настройка Kerberos с Zabbix);
Digest - используется дайджест-аутентификация;
Bearer - используется аутентификация Bearer.
Имя пользователя Введите имя пользователя (до 255 символов). Поддерживаются пользовательские макросы.
Это поле доступно, если для параметра HTTP-аутентификация установлено значение «Basic», «NTLM», «Kerberos» или «Digest».
Пароль Введите пароль пользователя (до 255 символов). Поддерживаются пользовательские макросы.
Это поле доступно, если для параметра HTTP-аутентификация установлено значение «Basic», «NTLM», «Kerberos» или «Digest».
Токен Bearer Введите токен Bearer. Поддерживаются пользовательские макросы.
Это поле доступно и обязательно, если для параметра HTTP-аутентификация установлено значение «Bearer».
Расширенная настройка Нажмите заголовок Расширенная настройка, чтобы отобразить параметры расширенной настройки (см. ниже).
Максимальное количество записей в сообщении Укажите максимальное количество значений или событий, которые можно передать в одном сообщении.
Параллельные сеансы Выберите количество процессов отправки для этого коннектора. Можно указать до 100 сеансов; значение по умолчанию - «1».
Попытки Количество попыток потоковой передачи данных. Можно указать до 5 попыток; значение по умолчанию - «1».
Интервал между попытками Укажите, как долго коннектор должен ожидать после неудачной попытки передачи данных. Можно указать до 10 с; значение по умолчанию - «5 с».
Это поле доступно, если для параметра Попытки установлено значение «2» или больше.
Неудачными считаются попытки, при которых не удалось установить соединение или код ответа HTTP не равен 200, 201, 202, 203, 204. Повторные попытки запускаются в случае ошибок связи или если код ответа HTTP не равен 200, 201, 202, 203, 204, 400, 401, 403, 404, 405, 415, 422. Перенаправления обрабатываются, поэтому 302 -> 200 является положительным ответом, а 302 -> 503 вызовет повторную попытку.
Тайм-аут Укажите тайм-аут сообщения (1-60 секунд, значение по умолчанию - 5 секунд).
Поддерживаются суффиксы времени (например, 30s, 1m). Поддерживаются пользовательские макросы.
HTTP-прокси Можно указать HTTP-прокси в следующем формате:
[protocol://][username[:password]@]proxy.example.com[:port]
Поддерживаются пользовательские макросы.

Необязательный префикс protocol:// можно использовать для указания альтернативных протоколов прокси (поддержка префикса протокола добавлена в cURL 7.21.7). Если протокол не указан, прокси будет считаться HTTP-прокси. По умолчанию используется порт 1080.

Если указан параметр HTTP-прокси, прокси переопределит переменные окружения, связанные с прокси, например http_proxy, HTTPS_PROXY. Если параметр не указан, прокси не будет переопределять переменные окружения, связанные с прокси. Введенное значение передается без изменений, проверка корректности не выполняется.
Также можно ввести адрес SOCKS-прокси. Если указать неправильный протокол, коннектор не сможет передавать значения элементов данных или события из Zabbix.

Обратите внимание, что при использовании HTTP-прокси поддерживается только простая аутентификация.
Проверять SSL-сертификат узла сети Установите флажок, чтобы проверять SSL-сертификат веб-сервера.
Сертификат сервера автоматически берется из общесистемного расположения центров сертификации (CA). Расположение файлов CA можно переопределить с помощью параметра конфигурации сервера Zabbix или прокси SSLCALocation.
Проверять SSL-сертификат узла сети Установите флажок, чтобы проверять соответствие поля Common Name или Subject Alternate Name сертификата веб-сервера.
Это устанавливает параметр cURL CURLOPT_SSL_VERIFYHOST.
Файл SSL-сертификата Имя файла SSL-сертификата, используемого для аутентификации клиента. Файл сертификата должен быть в формате PEM1. Поддерживаются пользовательские макросы.
Если файл сертификата также содержит закрытый ключ, оставьте поле Файл SSL-ключа пустым. Если ключ зашифрован, укажите пароль в поле Пароль SSL-ключа. Каталог, содержащий этот файл, задается параметром конфигурации сервера Zabbix или прокси SSLCertLocation.
Файл SSL-ключа Имя файла закрытого SSL-ключа, используемого для аутентификации клиента. Файл закрытого ключа должен быть в формате PEM1. Поддерживаются пользовательские макросы.
Каталог, содержащий этот файл, задается параметром конфигурации сервера Zabbix или прокси SSLKeyLocation.
Пароль SSL-ключа Пароль файла закрытого SSL-ключа. Поддерживаются пользовательские макросы.
Описание Введите описание коннектора.
Включен Установите флажок, чтобы включить коннектор.

Если коннектор Kafka настроен с разделенным запятыми списком адресов начальных брокеров (например, Kafka.URL=kafka1.example.com:9093,kafka2.example.com:9093), клиент Kafka подключается к брокеру или брокерам, которые ответили первыми, и использует метаданные их кластера. Если список содержит адреса из разных кластеров Kafka, будет использоваться только кластер, ответивший быстрее всего, а остальные адреса будут записаны в журнал как недоступные; в результате могут появиться предупреждения при запуске, подобные следующему, даже если коннектор подключен:

kafka cluster connected, but broker(s) "kafka1.example.com:9093, kafka2.example.com:9093" unavailable; will retry on message send if active brokers fail 

В некоторых средах (частных сетях, сетях контейнеров или нестандартных конфигурациях DNS/hosts) имена узлов сети или IP-адреса могут разрешаться в loopback-адреса (например, 127.0.0.1/localhost) или нормализоваться клиентом, из-за чего такие предупреждения могут вводить в заблуждение. Чтобы уменьшить вероятность путаницы, убедитесь, что все адреса Kafka.URL принадлежат одному кластеру Kafka, проверьте разрешение DNS с узла сети коннектора и параметры advertised.listeners брокеров, а также отдавайте предпочтение адресам, которые разрешаются в рекламируемый адрес брокера.

Протокол

Обмен между сервером и приемником осуществляется по HTTP с использованием REST API, NDJSON, "Content-Type: application/x-ndjson".

Подробнее см. Протокол экспорта JSON, разделенного переводами строк.

Запрос сервера

Пример потоковой передачи значений элементов данных:

POST /v1/history HTTP/1.1
Host: localhost:8080
Accept: */*
Accept-Encoding: deflate, gzip, br, zstd
Content-Length: 628
Content-Type: application/x-ndjson

{"host":{"host":"Zabbix server","name":"Zabbix server"},"groups":["Zabbix servers"],"item_tags":[{"tag":"foo","value":"test"}],"itemid":44457,"name":"foo","clock":1673454303,"ns":800155804,"value":0,"type":3}
{"host":{"host":"Zabbix server","name":"Zabbix server"},"groups":["Zabbix servers"],"item_tags":[{"tag":"foo","value":"test"}],"itemid":44457,"name":"foo","clock":1673454303,"ns":832290669,"value":1,"type":3}
{"host":{"host":"Zabbix server","name":"Zabbix server"},"groups":["Zabbix servers"],"item_tags":[{"tag":"bar","value":"test"}],"itemid":44458,"name":"bar","clock":1673454303,"ns":867770366,"value":123,"type":3}

Пример потоковой передачи событий:

POST /v1/events HTTP/1.1
Host: localhost:8080
Accept: */*
Accept-Encoding: deflate, gzip, br, zstd
Content-Length: 333
Content-Type: application/x-ndjson

{"clock":1673454303,"ns":800155804,"value":1,"eventid":5,"name":"trigger for foo being 0","severity":0,"hosts":[{"host":"Zabbix server","name":"Zabbix server"}],"groups":["Zabbix servers"],"tags":[{"tag":"foo_trig","value":"test"},{"tag":"foo","value":"test"}]}
{"clock":1673454303,"ns":832290669,"value":0,"eventid":6,"p_eventid":5}
Ответ получателя

Ответ состоит из кода состояния ответа HTTP и полезной нагрузки JSON. Код состояния ответа HTTP должен быть «200», «201», «202», «203» или «204» для запросов, которые были обработаны успешно, и другим для невыполненных запросов.

Пример успешного приёма:

HTTP/1.1 200 OK
Content-Type: application/json
X-Content-Type-Options: nosniff
Date: Tue, 21 Apr 2026 10:13:04 GMT
Content-Length: 23

{"response":"success"}

Пример с ошибками:

HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json
X-Content-Type-Options: nosniff
Date: Tue, 21 Apr 2026 12:15:01 GMT
Content-Length: 55

{"error":"invalid character '{' after top-level value"}