2 流式传输到外部系统

概述

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

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

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

配置

要将数据流传输至外部系统,需要执行以下步骤:

1. 在远程系统上设置接收来自Zabbix的数据。 为此,提供以下工具:

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

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

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

必填字段以星号标记。

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

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

条件有两种计算类型:
And/Or - 必须满足所有条件,具有相同标签名称的条件将按Or条件分组;
Or - 如果满足一个条件就足够。
Type of information 选择要过滤监控项值的信息类型(数值(无符号)、数值(float)、字符等),该连接器应流传输。
如果数据类型设置为"监控项值",此字段可用。
HTTP authentication 选择身份验证选项:
- 不使用身份验证;
基本 - 使用基本身份验证;
NTLM - 使用NTLM(Windows NT LAN Manager)身份验证;
Kerberos - 使用Kerberos身份验证(另见:Configuring Kerberos with Zabbix);
摘要 - 使用摘要身份验证;
持有者 - 使用持有者身份验证。
Username 输入用户名(最多255个字符)。支持用户宏。
如果HTTP身份验证设置为"基本"、"NTLM"、"Kerberos"或"摘要",此字段可用。
Password 输入用户密码(最多255个字符)。支持用户宏。
如果HTTP身份验证设置为"基本"、"NTLM"、"Kerberos"或"摘要",此字段可用。
Bearer token 输入持有者令牌。支持用户宏。
如果HTTP身份验证设置为"持有者",此字段可用且必需。
Advanced configuration 点击高级配置标签以显示高级配置选项(见下文)。
Max records per message 指定可以在一条消息中流传输的最大值或事件数量。
Concurrent sessions 选择为此连接器运行的发送进程数量。最多可以指定100个会话;默认值为"1"。
Attempts 数据流传输尝试次数。最多可以指定5次尝试;默认值为"1"。
Attempt interval 指定连接器在数据流传输不成功尝试后应等待的时间。最多可以指定10秒;默认值为"5秒"。
如果尝试次数设置为"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相关的环境变量。输入的值将直接传递,不进行合理性检查。
您也可以输入SOCKSproxy地址。如果您指定了错误的协议,连接将失败,监控项将变得不受支持。

请注意,仅支持使用HTTP proxy进行简单身份验证。
SSL verify peer 选中复选框以验证Web服务器的SSL证书。
服务器证书将自动从系统范围的证书颁发机构(CA)位置获取。您可以使用Zabbix server或proxy配置参数{CODE_e5584ae0}覆盖CA文件的位置。
SSL verify host 选中复选框以验证Web服务器证书的通用名称字段或主题备用名称字段匹配。
这设置了{CODE_7ae9a28c} cURL选项。
SSL certificate file 用于客户端身份验证的SSL证书文件名称。证书文件必须为PEM1格式。支持用户宏。
如果证书文件还包含私钥,请留空SSL密钥文件字段。如果密钥已加密,请在SSL密钥密码字段中指定密码。此文件所在的目录由Zabbix server或proxy配置参数{CODE_01ffa51e}指定。
SSL key file 用于客户端身份验证的SSL私钥文件名称。私钥文件必须为PEM1格式。支持用户宏。
此文件所在的目录由Zabbix server或proxy配置参数{CODE_97ce463b}指定。
SSL key password SSL私钥文件密码。支持用户宏。
Description 输入连接器描述。
Enabled 选中复选框以启用连接器。

协议

服务器与接收器之间的通信通过使用 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"}