2 流式传输到外部系统
概述
Zabbix 可以通过 HTTP 将监控项值和事件流式传输到外部系统(详见 协议详情)。
标签过滤器可用于流式传输监控项值或事件的子集。
Zabbix 有两个服务器进程负责数据流式传输:连接器管理器
和连接器工作进程
。Zabbix 的内部监控项 zabbix[connector_queue]
允许监控连接器队列中排队的值的数量。
配置
配置 Zabbix 向外部系统进行数据流式传输的步骤如下:
1. 准备一个远程系统,用于接收来自 Zabbix 的数据。 可以使用以下工具之一:
- 简单的示例 接收器,将接收的信息记录在
events.ndjson
和history.ndjson
文件中。 - Zabbix 服务器的 Kafka 连接器 - 一个轻量级的服务器,用 Go 编写,设计用于将 Zabbix 的监控项值和事件转发到 Kafka Broker。
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_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"}