可以通过 HTTP 将 监控项值 和事件从 Zabbix 流式传输到外部系统(参见 协议细节)。
可以使用标签过滤器来流式传输 监控项值 或事件的子集。
有两个 Zabbix server 进程负责数据流传输:connector manager
和 connector worker
。Zabbix 内部的 监控项 zabbix[connector_queue]
可用于监控连接器队列中排队的值的数量。
配置将数据流传输到外部系统需要以下步骤:
1. 准备一个用于接收Zabbix数据的远程系统。 为此,可以使用以下工具:
events.ndjson
和 history.ndjson
文件中。2. 通过调整 zabbix_server.conf
中的 StartConnectors
参数,在Zabbix中设置所需的连接器工作进程数。 连接器工作进程的数量应与Zabbix前端中配置的连接器数量匹配(如果并发会话数超过 1,则应超过该数量)。 然后,重启 Zabbix server。
3. 在Zabbix前端中配置一个新的连接器(Administration → General → Connectors),并通过 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_proxy 、HTTPS_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”,其他情况表示请求失败。
成功的示例:
带错误的示例: