Zabbix 可以通过 HTTP 将监控项值和事件流式传输到外部系统(详见 协议详情)。
标签过滤器可用于流式传输监控项值或事件的子集。
Zabbix 有两个服务器进程负责数据流式传输:连接器管理器和连接器工作进程。Zabbix 的内部监控项 zabbix[connector_queue] 允许监控连接器队列中排队的值的数量。
配置 Zabbix 向外部系统进行数据流式传输的步骤如下:
1. 准备一个远程系统,用于接收来自 Zabbix 的数据。 可以使用以下工具之一:
events.ndjson 和 history.ndjson 文件中。2. 通过调整 zabbix_server.conf 中的 StartConnectors 参数来设置 Zabbix 中所需的连接器工作进程数量。 连接器工作进程的数量应与在 Zabbix 前端配置的连接器数量匹配(或超过,如果并发会话超过 1)。 然后重新启动 Zabbix 服务器。
3. 在 Zabbix 前端 (Administration → General → Connectors) 配置一个新的连接器,并使用 zabbix_server -R config_cache_reload 命令重新加载服务器缓存。

所有必填字段都用红色星号标记。
| 参数 | 描述 | 
|---|---|
| 名称 | 输入连接器的名称。 | 
| 数据类型 | 选择要流式传输的数据类型: 监控项值 - 从 Zabbix 流式传输监控项值到外部系统; 事件 - 从 Zabbix 流式传输事件到外部系统。 | 
| URL | 输入接收器的 URL。支持用户宏。 | 
| 标签过滤器 | 仅导出与标签过滤器匹配的监控项值或事件子集。如果未设置,则导出所有内容。 可以包含特定标签和标签值,也可以排除它们。可以设置多个条件。标签名称匹配始终区分大小写。 每个条件有几种可用的操作符: 存在 - 包括指定的标签名称; 等于 - 包括指定的标签名称和值(区分大小写); 包含 - 包括标签值包含输入的字符串的指定标签名称(子字符串匹配,不区分大小写); 不存在 - 排除指定的标签名称; 不等于 - 排除指定的标签名称和值(区分大小写); 不包含 - 排除标签值包含输入的字符串的指定标签名称(子字符串匹配,不区分大小写)。 有两种计算类型可用于条件: 与/或 - 所有条件必须满足,具有相同标签名称的条件将按或条件分组; 或 - 如果满足一个条件就足够了。 | 
| 信息类型 | 选择要过滤连接器应该流式传输的监控项值的信息类型(无符号数字,浮点数,字符等)。 如果设置为 "监控项值",则此字段可用。 | 
| HTTP 认证 | 选择认证选项: 无 - 不使用任何认证; 基本 - 使用基本认证; NTLM - 使用 NTLM(Windows NT LAN Manager)认证; Kerberos - 使用 Kerberos 认证(参见:配置 Kerberos 与 Zabbix); 摘要 - 使用摘要认证; Bearer - 使用 Bearer 认证。 | 
| 用户名 | 输入用户名(最多 255 个字符)。支持用户宏。 如果 HTTP 认证设置为 "基本"、"NTLM"、"Kerberos" 或 "摘要",则此字段可用。 | 
| 密码 | 输入用户密码(最多 255 个字符)。支持用户宏。 如果 HTTP 认证设置为 "基本"、"NTLM"、"Kerberos" 或 "摘要",则此字段可用。 | 
| Bearer 令牌 | 输入 Bearer 令牌。支持用户宏。 如果 HTTP 认证设置为 "Bearer",则此字段可用且必填。 | 
| 高级配置 | 点击 高级配置 标签以显示高级配置选项(见下文)。 | 
| 每条消息的最大记录数 | 指定可以在一条消息中流式传输的最大值或事件数量。 | 
| 并发会话 | 选择此连接器运行的发送进程数。最多可以指定 100 个会话;默认值为 "1"。 | 
| 尝试次数 | 流式传输数据的尝试次数。最多可以指定 5 次尝试;默认值为 "1"。 | 
| 尝试间隔 | 指定在流式传输数据的尝试失败后连接器应等待的时间。最多可以指定 10 秒;默认值为 "5 秒"。 如果 尝试次数 设置为 "2" 或更多,则此字段可用。 通常的尝试是在通信错误或 HTTP 响应代码不是 200、201、202、203、204 时触发的。重定向将被跟踪,所以 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 代理地址。如果指定了错误的协议,连接将失败,监控项将变为不支持。 请注意,HTTP 代理仅支持简单认证。 | 
| SSL 验证对等体 | 选中复选框以验证 web 服务器的 SSL 证书。 服务器证书将自动从系统范围内的证书颁发机构(CA)位置获取。您可以使用 Zabbix server 或proxy 配置参数 SSLCALocation来覆盖 CA 文件的位置。 | 
| SSL 验证主机 | 选中复选框以验证 web 服务器证书的 Common Name 字段或 Subject Alternate Name 字段是否匹配。 这设置了 CURLOPT_SSL_VERIFYHOSTcURL 选项。 | 
| SSL 证书文件 | 用于客户端认证的 SSL 证书文件名称。证书文件必须是 PEM1 格式。支持用户宏。 如果证书文件同时包含私钥,请将 SSL 密钥文件 字段留空。如果密钥被加密,请在 SSL 密钥密码 字段中指定密码。包含此文件的目录由 Zabbix server 或proxy 配置参数 SSLCertLocation指定。 | 
| SSL 密钥文件 | 用于客户端认证的 SSL 私钥文件名称。私钥文件必须是 PEM1 格式。支持用户宏。 包含此文件的目录由 Zabbix server 或proxy 配置参数 SSLKeyLocation指定。 | 
| SSL 密钥密码 | SSL 私钥文件密码。支持用户宏。 | 
| 描述 | 输入连接器描述。 | 
| 启用 | 选中复选框以启用连接器。 | 
服务器与接收器之间的通信通过使用 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",而失败的请求则使用其他状态码。
成功示例:
带有错误的示例: