2 流式传输到外部系统

概述

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

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

Zabbix 有两个服务器进程负责数据流式传输:连接器管理器连接器工作进程。Zabbix 的内部监控项 zabbix[connector_queue] 允许监控连接器队列中排队的值的数量。

配置

配置 Zabbix 向外部系统进行数据流式传输的步骤如下:

1. 准备一个远程系统,用于接收来自 Zabbix 的数据。 可以使用以下工具之一:

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

2. 通过调整 zabbix_server.conf 中的 StartConnectors 参数来设置 Zabbix 中所需的连接器工作进程数量。 连接器工作进程的数量应与在 Zabbix 前端配置的连接器数量匹配(或超过,如果并发会话超过 1)。 然后重新启动 Zabbix 服务器。

3. 在 Zabbix 前端 (AdministrationGeneralConnectors) 配置一个新的连接器,并使用 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_proxyHTTPS_PROXY 这样的与代理相关的环境变量。如果未指定,则代理不会覆盖与代理相关的环境变量。输入的值将原样传递,不进行安全检查。
您也可以输入 SOCKS 代理地址。如果指定了错误的协议,连接将失败,监控项将变为不支持。

请注意,HTTP 代理仅支持简单认证。
SSL 验证对等体 选中复选框以验证 web 服务器的 SSL 证书。
服务器证书将自动从系统范围内的证书颁发机构(CA)位置获取。您可以使用 Zabbix server 或proxy 配置参数 SSLCALocation 来覆盖 CA 文件的位置。
SSL 验证主机 选中复选框以验证 web 服务器证书的 Common Name 字段或 Subject Alternate Name 字段是否匹配。
这设置了 CURLOPT_SSL_VERIFYHOST cURL 选项。
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",而失败的请求则使用其他状态码。

成功示例:

HTTP/1.1 200 OK
       Date: Wed, 11 Jan 2023 16:40:30 GMT
       Content-Length: 0

带有错误的示例:

HTTP/1.1 422 Unprocessable Entity
       Content-Type: application/json
       Date: Wed, 11 Jan 2023 17:07:36 GMT
       Content-Length: 55
       
       {"error":"invalid character '{' after top-level value"}