[comment]: # translation:outdated

[comment]: # ({cdb0d4ea-b45624e8})
# 2. Потоковая передача во внешние системы

[comment]: # ({/cdb0d4ea-b45624e8})

[comment]: # ({fa81590c-c479d2fd})
#### Обзор

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

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

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

[comment]: # ({/fa81590c-c479d2fd})

[comment]: # ({695ba0a3-cfad3c2f})
#### Настройка

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

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

-   Пример простого [получателя \[en\]](https://git.zabbix.com/projects/ZT/repos/receiver/browse), который записывает принимаемую информацию в файлы `events.ndjson` и `history.ndjson`.
-   [Kafka connector for Zabbix server \[en\]](https://git.zabbix.com/projects/ZT/repos/kafka-connector/browse) — написанный на Go легковесный сервер, предназначенный для пересылки значений элементов данных и событий от сервера Zabbix брокеру Kafka.

2\. Настройте нужное количество рабочих процессов коннектора в Zabbix путём регулирования параметра [`StartConnectors`](/manual/appendix/config/zabbix_server#startconnectors) в `zabbix_server.conf`.
Количество рабочих процессов коннектора должно соответствовать (или превышать, если одновременных сессий больше одной) настроенному в веб-интерфейсе Zabbix числу сконфигурированных коннекторов.
После этого перезапустите Zabbix сервер.

3\. Сконфигурируйте новый коннектор в веб-интерфейсе Zabbix  (*Администрирование* → *Общие* → *Коннекторы* (*Administration* → *General* → *Connectors*)) и перезагрузите кэш сервера с помощью команды `zabbix_server -R config_cache_reload`.

![](../../../../assets/en/manual/config/connector.png){width="600"}

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

|Параметр|Описание|
|--|--------|
|*Имя (Name)*|Введите имя коннектора.|
|*Тип данных*<br>*(Data type)*|Выберите тип данных для потоковой передачи:<br>**Значения элемента данных (Item values)** — трансляция значений элементов данных из Zabbix во внешние системы;<br>**События (Events)** — трансляция событий из Zabbix во внешние системы.|
|*URL*|Введите URL получателя. Поддерживаются пользовательские макросы.|
|*Фильтр тегов*<br>*(Tag filter)*|Экспортировать только значения элементов данных или события, соответствующие фильтру тегов. Если не задано, то экспортировать всё.<br>Можно как включать, так и исключать определённые теги и значения тегов. Можно задать несколько условий. Имена тегов всегда сопоставляются с учётом регистра.<br><br>Для каждого условия доступно несколько операторов:<br>**Существует (Exists)** — включать указанные имена тегов;<br>**Равно (Equals)** — включать указанные имена тегов и значения (с учётом регистра);<br>**Содержит (Contains)** — включать указанные имена тегов, где значения тегов содержат введённую строку (сопоставление подстроки, без учёта регистра);<br>**Не существует (Does not exist)** — исключать указанные имена тегов;<br>**Не равно (Does not equal)** — исключать указанные имена тегов и значения (с учётом регистра);<br>**Не содержит (Does not contain)** — исключать указанные имена тегов, где значения тегов содержат введённую строку (сопоставление подстроки, без учёта регистра).<br><br>Для условий есть два типа вычислений:<br>**И/ИЛИ (And/Or)** — должны выполняться все условия, условия с тем же именем тега будут сгруппированы с условием ИЛИ;<br>**Или (Or)** — достаточно выполнения одного условия.|
|*Тип информации*<br>*(Type of information)*|Выберите тип информации (числовой (целое положительное), числовой (с плавающей точкой), символ и т.д.), по которому фильтровать значения элементов данных, транслируемых коннектором.<br>Это поле доступно, если в поле *Тип данных* выбрано «Значения элемента данных».|
|*HTTP аутентификация*<br>*(HTTP authentication)*|Выберите вариант аутентификации:<br>**Нет (None)** — аутентификация не используется;<br>**Простая (Basic)** — используется простая (basic) аутентификация;<br>**NTLM** — используется аутентификация NTLM ([Windows NT LAN Manager](http://ru.wikipedia.org/wiki/NTLM));<br>**Kerberos** — используется аутентификация Kerberos (смотрите также: [Настройка Kerberos с Zabbix](/manual/appendix/items/kerberos));<br>**Digest** — используется аутентификация Digest;<br>**Bearer** — используется аутентификация Bearer.|
|*Имя пользователя*<br>*(Username)*|Введите имя пользователя (до 255 символов). Поддерживаются пользовательские макросы.<br>Это поле доступно, если параметр *HTTP аутентификация* установлен в значение «Basic», «NTLM», «Kerberos» или «Digest».|
|*Пароль*<br>*(Password)*|Введите пароль пользователя (до 255 символов). Поддерживаются пользовательские макросы.<br>Это поле доступно, если параметр *HTTP аутентификация* установлен в значение «Basic», «NTLM», «Kerberos» или «Digest».|
|*Токен на предъявителя*<br>*(Bearer token)*|Введите Токен на предъявителя. Поддерживаются пользовательские макросы.<br>Это поле доступно, если параметр *HTTP аутентификация* установлен в значение «Bearer».|
|*Расширенная настройка*<br>*(Advanced configuration)*|Нажмите на заголовок *Расширенная настройка (Advanced configuration)* для показа дополнительных параметров конфигурации (смотрите ниже).|
|*Макс. записей на сообщение*<br>*(Max records per message)*|Укажите максимальное количество значений или событий, которые могут быть переданы в одном сообщении.|
|*Одновременные сессии*<br>*(Concurrent sessions)*|Выберите количество отсылающих процессов, которые будут запущены для этого коннектора. Можно указать до 100 сессий; значение по умолчанию — «1».|
|*Попыток*<br>*(Attempts)*|Число попыток для потоковой передачи данных. Можно указать до 5 попыток; значение по умолчанию — «1».|
|*Интервал между попытками*<br>*(Attempt interval)*|Укажите, как долго коннектор должен ждать после неудачной попытки потоковой передачи данных. Можно указать до 10s; значение по умолчанию — «5s».<br>Это поле доступно, если в поле *Попыток* указано «2» или больше.<br>Неудачными считаются попытки, при которых не удалось установить соединение или код ответа HTTP не равен 200, 201, 202, 203, 204. Повторные попытки **инициируются** в случае ошибок связи или когда код ответа HTTP не равен 200, 201, 202, 203, 204, 400, 401, 403, 404, 405, 415, 422. Перенаправления выполняются, поэтому 302 -> 200 является успешным ответом; в то время как 302 -> 503 будет инициировать повторную попытку.|
|*Время ожидания*<br>*(Timeout)*|Укажите время ожидания для сообщения (1-60 секунд, по умолчанию — 5 секунд).<br>Поддерживаются суффиксы времени, например: 30s, 1m. Поддерживаются пользовательские макросы.|
|*HTTP прокси*<br>*(HTTP proxy)*|Можно указать используемый HTTP прокси в следующем формате:<br>`[протокол://][имя_пользователя[:пароль]@]proxy.example.com[:порт]`<br>Поддерживаются пользовательские макросы.<br><br>Необязательный префикс `протокол://` можно использовать для указания альтернативных протоколов прокси (поддержка префикса протокола была добавлена в cURL 7.21.7). Без указания протокола прокси будет считаться как HTTP прокси. По умолчанию будет использоваться порт 1080.<br><br>Если параметр *HTTP прокси* задан, он перезапишет относящиеся к прокси переменные окружения — такие как `http_proxy` и `HTTPS_PROXY`. Если не указан, относящиеся к прокси переменные окружения не будут перезаписаны. Введённое значение передаётся как есть, проверка его на корректность не выполняется.<br>Также можно ввести адрес SOCKS прокси. Если вы укажете ошибочный протокол, коннектор не сможет успешно передать значения элементов данных или события из Zabbix.<br><br>Обратите внимание, что с HTTP прокси поддерживается только простая аутентификация.|
|*Проверка SSL узла*<br>*(SSL verify peer)*|Отметьте флажок для проверки SSL сертификата веб-сервера.<br>Сертификат сервера будет автоматически взят из местоположения общесистемного центра сертификации (certificate authority, CA). Вы можете переопределить местоположение файлов CA, используя параметр конфигурации Zabbix сервера или прокси [`SSLCALocation`](/manual/appendix/config/zabbix_server#sslcalocation).|
|*Проверка SSL хоста*<br>*(SSL verify host)*|Отметьте флажок для проверки того, что поле *Common Name* или *Subject Alternate Name* сертификата веб-сервера соответствует.<br>Это устанавливает опцию cURL [`CURLOPT_SSL_VERIFYHOST` \[en\]](http://curl.haxx.se/libcurl/c/CURLOPT_SSL_VERIFYHOST.html).|
|*Файл SSL сертификата*<br>*(SSL certificate file)*|Имя файла SSL сетрификата, используемого для аутентификации клиента. Файл сертификата должен быть в формате PEM^1^. Поддерживаются пользовательские макросы.<br>Если файл сертификата также содержит закрытый ключ, оставьте поле *Файл SSL ключа* пустым. Если ключ зашифрован, укажите пароль в поле *Пароль к SSL ключу*. Папка, содержащая этот файл, задаётся параметром конфигурации Zabbix сервера или прокси [`SSLCertLocation`](/manual/appendix/config/zabbix_server#sslcertlocation).|
|*Файл SSL ключа*<br>*(SSL key file)*|Имя файла закрытого ключа SSL, используемого для аутентификации клиента. Файл закрытого ключа должен быть в формате PEM^1^. Поддерживаются пользовательские макросы.<br>Папка, содержащая этот файл, задаётся параметром конфигурации Zabbix сервера или прокси [`SSLKeyLocation`](/manual/appendix/config/zabbix_server#sslkeylocation).|
|*Пароль к SSL ключу*<br>*(SSL key password)*|Пароль к файлу закрытого ключа SSL. Поддерживаются пользовательские макросы.|
|*Описание (Description)*|Введите описание коннектора.|
|*Активировано (Enabled)*|Отметьте флажок, чтобы коннектор был активирован.|

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

```default
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/хостов) имена хостов или IP-адреса могут преобразовываться в loopback-адреса (например, `127.0.0.1`/`localhost`) или нормализоваться клиентом, что может сделать такие предупреждения вводящими в заблуждение.
Чтобы избежать путаницы, убедитесь, что все адреса `Kafka.URL` относятся к одному кластеру Kafka, проверьте разрешение DNS с хоста коннектора и `advertised.listeners` брокера и отдавайте предпочтение адресам, которые преобразуются в объявленный адрес брокера.

[comment]: # ({/695ba0a3-cfad3c2f})

[comment]: # ({3208b284-b67df609})
#### Протокол

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

Более подробную информацию смотрите в [Протоколе экспорта JSON с разделителем в виде перевода строки](/manual/appendix/protocols/real_time_export).

[comment]: # ({/3208b284-b67df609})

[comment]: # ({fd0d393d-ae5d9204})
##### Запрос сервера

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

```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}
```

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

```json
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}
```

[comment]: # ({/fd0d393d-ae5d9204})

[comment]: # ({d6988482-89101d44})
##### Ответ получателя

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

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

```json
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"}
```

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

```json
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"}
```

[comment]: # ({/d6988482-89101d44})
