流式传输到外部系统

概述

可以通过 HTTP 将监控项值和事件从 Zabbix 流式传输到外部系统(请参见协议详情)。

标签过滤器可用于流式传输部分监控项值或事件。

Zabbix 中有两种服务器进程类型负责数据流传输:connector managerconnector worker。 Zabbix 内部监控项 zabbix[connector_queue] 可用于监控 connector 队列中已入队的值数量。

配置

需要执行以下步骤来配置向外部系统的数据流:

1. 设置远程系统,以接收来自 Zabbix 的数据。 为此,可以使用以下工具:

  • 一个简单的 接收器 示例,可将接收到的信息记录在 events.ndjsonhistory.ndjson 文件中。
  • Zabbix 服务器的 Kafka 连接器 - 一个使用 Go 编写的轻量级服务器,用于将监控项值和事件从 Zabbix 服务器转发到 Kafka broker。

2. 在 Zabbix 中设置所需数量的连接器 worker,方法是在 zabbix_server.conf 中调整 StartConnectors 参数。 连接器 worker 的数量应与 Zabbix 前端中配置的连接器数量相匹配(如果并发会话数大于 1,则应大于或等于该数量)。 然后,重启 Zabbix 服务器。

3. 在 Zabbix 前端中配置新的连接器(Administration > General > Connectors),并使用 zabbix_server -R config_cache_reload 命令重新加载服务器缓存。

必填字段以星号标记。

参数 描述
Name 输入连接器名称。
Data type 选择要传输的数据类型:
Item values - 将监控项值从 Zabbix 传输到外部系统;
Events - 将事件从 Zabbix 传输到外部系统。
URL 输入接收器 URL。支持用户宏。
Tag filter 仅导出与标签过滤器匹配的监控项值或事件。如果未设置,则导出所有内容。
可以包含或排除特定标签及标签值。可以设置多个条件。标签名称匹配始终区分大小写。

每个条件有以下运算符可用:
Exists - 包含指定的标签名称;
Equals - 包含指定的标签名称和值(区分大小写);
Contains - 包含指定的标签名称,且标签值包含输入的字符串(子字符串匹配,不区分大小写);
Does not exist - 排除指定的标签名称;
Does not equal - 排除指定的标签名称和值(区分大小写);
Does not contain - 排除指定的标签名称,且标签值包含输入的字符串(子字符串匹配,不区分大小写)。

条件有两种计算类型:
And/Or - 必须满足所有条件,具有相同标签名称的条件将通过 Or 条件进行分组;
Or - 满足一个条件即可。
Type of information 选择信息类型(无符号数值、浮点数值、字符等),用于筛选连接器应传输的监控项值。
Data type 设置为“Item values”时,此字段可用。
HTTP authentication 选择身份验证选项:
None - 不使用身份验证;
Basic - 使用基本身份验证;
NTLM - 使用 NTLM(Windows NT LAN Manager)身份验证;
Kerberos - 使用 Kerberos 身份验证(另请参阅:配置 Kerberos 与 Zabbix);
Digest - 使用摘要身份验证;
Bearer - 使用 Bearer 身份验证。
Username 输入用户名(最多 255 个字符)。支持用户宏。
HTTP authentication 设置为“Basic”、“NTLM”、“Kerberos”或“Digest”时,此字段可用。
Password 输入用户密码(最多 255 个字符)。支持用户宏。
HTTP authentication 设置为“Basic”、“NTLM”、“Kerberos”或“Digest”时,此字段可用。
Bearer token 输入 Bearer 令牌。支持用户宏。
HTTP authentication 设置为“Bearer”时,此字段可用且为必填项。
Advanced configuration 单击 Advanced configuration 标题以显示高级配置选项(见下文)。
Max records per message 指定一条消息中可以传输的值或事件的最大数量。
Concurrent sessions 选择要为此连接器运行的发送进程数量。最多可指定 100 个会话;默认值为“1”。
Attempts 数据传输的尝试次数。最多可指定 5 次尝试;默认值为“1”。
Attempt interval 指定连接器在数据传输尝试失败后应等待的时间。最多可指定 10s;默认值为“5s”。
Attempts 设置为“2”或更高时,此字段可用。
以下情况视为尝试失败:建立连接失败,或 HTTP 响应代码不是 200、201、202、203、204。发生通信错误,或 HTTP 响应代码不是 200、201、202、203、204、400、401、403、404、405、415、422 时,将触发重试。系统会跟随重定向,因此 302 -> 200 属于成功响应;而 302 -> 503 将触发重试。
Timeout 指定消息超时时间(1-60 秒,默认值为 5 秒)。
支持时间后缀(例如 30s1m)。支持用户宏。
HTTP proxy 可以按以下格式指定要使用的 HTTP proxy:
[protocol://][username[:password]@]proxy.example.com[:port]
支持用户宏。

可以使用可选的 protocol:// 前缀来指定其他 proxy 协议(协议前缀支持已在 cURL 7.21.7 中添加)。未指定协议时,proxy 将被视为 HTTP proxy。默认使用 1080 端口。

如果指定了 HTTP proxy,proxy 将覆盖 http_proxyHTTPS_PROXY 等与 proxy 相关的环境变量。如果未指定,proxy 将不会覆盖与 proxy 相关的环境变量。输入的值将按原样传递,不会执行有效性检查。
也可以输入 SOCKS proxy 地址。如果指定了错误的协议,连接器将无法从 Zabbix 传输监控项值或事件。

请注意,HTTP proxy 仅支持简单身份验证。
SSL verify peer 选中复选框以验证 web 服务器的 SSL 证书。
服务器证书将自动从系统范围的证书颁发机构(CA)位置获取。可以使用 Zabbix 服务器或 proxy 配置参数 SSLCALocation 覆盖 CA 文件的位置。
SSL verify host 选中复选框以验证 web 服务器证书的 Common Name 字段或 Subject Alternate Name 字段是否匹配。
这将设置 cURL 选项 CURLOPT_SSL_VERIFYHOST
SSL certificate file 用于客户端身份验证的 SSL 证书文件名称。证书文件必须为 PEM1 格式。支持用户宏。
如果证书文件还包含私钥,请将 SSL key file 字段留空。如果密钥已加密,请在 SSL key password 字段中指定密码。包含此文件的目录由 Zabbix 服务器或 proxy 配置参数 SSLCertLocation 指定。
SSL key file 用于客户端身份验证的 SSL 私钥文件名称。私钥文件必须为 PEM1 格式。支持用户宏。
包含此文件的目录由 Zabbix 服务器或 proxy 配置参数 SSLKeyLocation 指定。
SSL key password SSL 私钥文件密码。支持用户宏。
Description 输入连接器描述。
Enabled 选中复选框以启用连接器。

当 Kafka 连接器配置为使用以逗号分隔的 bootstrap broker 地址列表时(例如 Kafka.URL=kafka1.example.com:9093,kafka2.example.com:9093),Kafka 客户端会连接到最先响应的 broker,并使用其集群元数据。 如果列表中包含来自不同 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 可能解析为回环地址(例如 127.0.0.1/localhost),或被客户端规范化,这可能导致此类警告产生误导。 为减少混淆,请确保所有 Kafka.URL 地址都属于同一个 Kafka 集群,验证从连接器主机到 broker 的 DNS 解析以及 broker 的 advertised.listeners,并优先使用可解析为 broker 广播地址的地址。

协议

服务器与接收器之间的通信通过 HTTP 完成,使用 REST API、NDJSON 和 "Content-Type: application/x-ndjson"。

有关更多详细信息,请参见 Newline-delimited JSON export protocol

服务器请求

流式传输监控项值的示例:

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