2 将数据流传输到外部系统

概述

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

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

有两个 Zabbix server 进程负责数据流传输:connector managerconnector worker。Zabbix 内部的 监控项 zabbix[connector_queue] 可用于监控连接器队列中排队的值的数量。

配置

配置将数据流传输到外部系统需要以下步骤:

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

  • 一个简单的 receiver 示例,将接收到的信息记录到 events.ndjsonhistory.ndjson 文件中。
  • Kafka connector for Zabbix server - 一个用Go语言编写的轻量级服务器,用于将 监控项值 和事件从 Zabbix server 转发到Kafka代理。

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

3. 在Zabbix前端中配置一个新的连接器(AdministrationGeneralConnectors),并通过 zabbix_server -R config_cache_reload 命令重新加载服务器缓存。

必填字段用星号标记。

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

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

条件有两种计算类型:
And/Or - 所有条件必须满足,具有相同标签名称的条件将按Or条件分组;
Or - 只要满足一个条件即可。
Type of information 选择用于过滤连接器应传输的 监控项值 的信息类型(数值(无符号)、数值(float)、字符等)。
如果 Data type 设置为 "监控项值",则此字段可用。
HTTP authentication 选择认证选项:
None - 不使用认证;
Basic - 使用基本认证;
NTLM - 使用NTLM(Windows NT LAN Manager)认证;
Kerberos - 使用Kerberos认证(另请参见:Configuring Kerberos with Zabbix);
Digest - 使用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 选择为此连接器 run 的发送进程数。最多可指定100个会话;默认值为 "1"。
Attempts 指定传输数据的尝试次数。最多可指定 5 次尝试;默认值为 "1"。
Attempt interval 指定在数据传输尝试失败后连接器应等待的时间。最多可指定10秒;默认值为 "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 秒)。
支持时间后缀,例如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 将覆盖与 proxy 相关的环境变量,如 http_proxyHTTPS_PROXY。如果没有指定,则 proxy 不会覆盖与 proxy 相关的环境变量。输入的值将原样传递,不进行任何合理性检查。
您还可以输入一个SOCKS proxy 地址。如果您指定了错误的协议,连接将失败且 监控项 将变为不支持。

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

协议

服务器与接收器之间的通信是通过 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”,其他情况表示请求失败。

成功的示例:

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

带错误的示例:

localhost:8080/v1/history": 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"}