2 流式传输到外部系统

概述

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

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

两种 Zabbix 服务器进程类型负责数据流式传输:connector manager 和 connector worker。 Zabbix 内部监控项 zabbix[connector_queue] 可用于监控连接器队列中排队的值数量。

配置

需要执行以下步骤,将数据流式传输到外部系统:

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

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

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

3. 在 Zabbix 前端中配置新的 connector(管理 > 常规 > Connectors),并使用 zabbix_server -R config_cache_reload 命令重新加载服务器缓存。

必填字段以星号标记。

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

每个条件有以下运算符可用:
存在 - 包含指定的标签名称;
等于 - 包含指定的标签名称和值(区分大小写);
包含 - 包含指定的标签名称,且标签值包含输入的字符串(子字符串匹配,不区分大小写);
不存在 - 排除指定的标签名称;
不等于 - 排除指定的标签名称和值(区分大小写);
不包含 - 排除指定的标签名称,且标签值包含输入的字符串(子字符串匹配,不区分大小写)。

条件有两种计算类型:
And/Or - 必须满足所有条件,具有相同标签名称的条件将通过 Or 条件进行分组;
Or - 满足一个条件即可。
信息类型 选择信息类型(无符号数值、浮点数值、字符等),用于筛选 connector 应传输的监控项值。
当数据类型设置为“监控项值”时,此字段可用。
HTTP 身份验证 选择身份验证选项:
无 - 不使用身份验证;
Basic - 使用基本身份验证;
NTLM - 使用 NTLM(Windows NT LAN Manager)身份验证;
Kerberos - 使用 Kerberos 身份验证(另请参阅:在 Zabbix 中配置 Kerberos);
Digest - 使用 Digest 身份验证;
Bearer - 使用 Bearer 身份验证。
用户名 输入用户名(最多 255 个字符)。支持用户宏。
当HTTP 身份验证设置为“Basic”、“NTLM”、“Kerberos”或“Digest”时,此字段可用。
密码 输入用户密码(最多 255 个字符)。支持用户宏。
当HTTP 身份验证设置为“Basic”、“NTLM”、“Kerberos”或“Digest”时,此字段可用。
Bearer token 输入 Bearer token。支持用户宏。
当HTTP 身份验证设置为“Bearer”时,此字段可用且为必填项。
高级配置 单击高级配置标题,显示高级配置选项(见下文)。
每条消息的最大记录数 指定一条消息中可以传输的值或事件的最大数量。
并发会话 选择为此 connector 运行的发送进程数量。最多可指定 100 个会话;默认值为“1”。
尝试次数 数据传输的尝试次数。最多可指定 5 次;默认值为“1”。
尝试间隔 指定 connector 在数据传输失败后应等待的时间。最多可指定 10s;默认值为“5s”。
当尝试次数设置为“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 proxy 可以使用以下格式指定 HTTP proxy:
[protocol://][username[:password]@]proxy.example.com[:port]
支持用户宏。

可选的 protocol:// 前缀可用于指定备用 proxy 协议(cURL 7.21.7 开始支持协议前缀)。未指定协议时,proxy 将被视为 HTTP proxy。默认使用 1080 端口。

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

请注意,HTTP proxy 仅支持简单身份验证。
SSL 验证对端 选中复选框,以验证 Web 服务器的 SSL 证书。
服务器证书将根据系统范围 CA 位置中的受信任证书颁发机构(CA)证书进行验证。可以使用 Zabbix 服务器或 proxy 配置参数 SSLCALocation 覆盖 CA 文件的位置。
SSL 验证主机 选中复选框,以验证 Web 服务器证书的通用名称字段或主题备用名称字段是否匹配。
这将设置 cURL 选项 CURLOPT_SSL_VERIFYHOST。
SSL 证书文件 用于客户端身份验证的 SSL 证书文件名称。证书文件必须为 PEM1 格式。支持用户宏。
如果证书文件还包含私钥,请将SSL 密钥文件字段留空。如果密钥已加密,请在SSL 密钥密码字段中指定密码。包含此文件的目录由 Zabbix 服务器或 proxy 配置参数 SSLCertLocation 指定。
SSL 密钥文件 用于客户端身份验证的 SSL 私钥文件名称。私钥文件必须为 PEM1 格式。支持用户宏。
包含此文件的目录由 Zabbix 服务器或 proxy 配置参数 SSLKeyLocation 指定。
SSL 密钥密码 SSL 私钥文件密码。支持用户宏。
描述 输入 connector 描述。
启用 选中复选框以启用 connector。

当 Kafka connector 配置为使用以逗号分隔的 bootstrap broker 地址列表时(例如 Kafka.URL=kafka1.example.com:9093,kafka2.example.com:9093),Kafka 客户端会连接到最先响应的 broker,并使用其集群元数据。 如果列表中包含来自不同 Kafka 集群的地址,则只会使用响应最快的集群,其他地址将记录为不可用;因此,即使 connector 已连接,也可能出现如下启动警告:

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 集群,验证 connector 主机上的 DNS 解析以及 broker 的 advertised.listeners,并优先使用可解析为 broker 广播地址的地址。

协议

服务器与接收器之间的通信通过使用 REST API 和 NDJSON(Newline-delimited JSON)格式的 HTTP 完成,内容类型为 "Content-Type: application/x-ndjson"。

有关更多详细信息,请参阅 Newline-delimited 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"}