这是原厂英文文档的翻译页面. 欢迎帮助我们 完善文档.
2022 Zabbix中国峰会
2022 Zabbix中国峰会

3 被动和主动Agent检查

概述

本节提供有关 Zabbix agent 执行的被动和主动检查的详细信息。

Zabbix 使用基于 JSON 的通信协议与 Zabbix agent进行通信。

另请参阅:[Zabbix agent 2] (/manual/appendix/protocols/zabbix_agent2) 协议详细信息。

被动检查

被动检查是一个简单的数据请求。Zabbix服务器或proxy请求一些数据(例如,CPU负载),Zabbix agent将结果发送回服务器。

Server 请求 头部和数据长度的定义请参考协议详细信息

<item key>

Agent 响应

<DATA>[\0<ERROR>]

在上面,方括号中的部分是可选的,只发送到不受支持的监控项。

例如, 对于支持的监控项:

  1. Server 打开一个TCP连接
  2. Server 发送 <HEADER><DATALEN>agent.ping
  3. Agent 读取请求并响应 <HEADER><DATALEN>1
  4. Server 处理数据以获取值, 例如'1'
  5. TCP连接关闭

对于不支持的监控项:

  1. Server 打开一个TCP连接
  2. Server 发送 <HEADER><DATALEN>vfs.fs.size[/nono]
  3. Agent 读取请求并响应 <HEADER><DATALEN>ZBX_NOTSUPPORTED\0Cannot obtain filesystem information: [2] No such file or directory
  4. Server 处理数据, 更改监控项状态为不支持并显示指定的错误消息
  5. TCP连接关闭

主动检查

主动检查需要更复杂的处理,agent 必须首先从server端检索独立处理监控项的列表。

The servers 主动检查的列表在agent 配置文件中的 'ServerActive' 参数中列出, 请求这些检查的频率是由相同配置文件中的'RefreshActiveChecks' 参数设置的。 然而,如果刷新主动检查失败,则在60秒后重试。

agent然后定期向服务器发送新值。

如果代理位于防火墙后面,您可能会考虑 仅使用主动检查,因为在这种情况下您不需要 修改防火墙以允许初始传入连接。

In order to decrease network traffic and resources usage Zabbix server or Zabbix proxy will provide configuration only if Zabbix agent still hasn't received configuration or if something has changed in host configuration, global macros or global regular expressions.

The agent then periodically sends the new values to the server(s).

If an agent is behind the firewall you might consider using only Active checks because in this case you wouldn't need to modify the firewall to allow initial incoming connections.

获取监控项列表

Agent 请求

主动检查请求用于获取agent要处理的主动检查。 此请求由agent在启动时发送,然后以 RefreshActiveChecks 间隔发送。

{
        · "request": "active checks",
        · "host": "Zabbix server",
        · "host_metadata": "mysql,nginx",
        · "hostinterface": "zabbix.server.lan",
        · "ip": "159.168.1.1",
        · "port": 12050
       }
字段 类型 必填
request 字符串 主动检查
host 字符串 主机名。
host_metadata 字符串 没有 配置参数 HostMetadata 或 HostMetadataItem 度量值。
hostinterface 字符串 没有 配置参数 HostInterface 或 HostInterfaceItem 度量值。
ip 字符串 没有 如果设置了配置参数 ListenIP 第一个 IP。
port 编号 没有 配置参数 ListenPort 值(如果已设置)而不是默认agent侦听端口。

Server 响应

在处理主动检查请求之后,主动检查响应由服务器发送回agent。

{
        · "response": "success",
        · "data": [
        · {
        · "key": "log[/home/zabbix/logs/zabbix_agentd.log]",
        · "key_orig": "log[/home/zabbix/logs/zabbix_agentd.log]",
        · "itemid": 1234,
        · "delay": "30s",
        · "lastlogsize": 0,
        · "mtime": 0
        · },
        · {
        · "key": "agent.version",
        · "key_orig": "agent.version",
        · "itemid": 5678,
        · "delay": "10m",
        · "lastlogsize": 0,
        · "mtime": 0
        · }
        · ]
       }
字段 类型 必填
response 字符串 成功| 失败
info 字符串 没有 失败时的错误信息。
data 对象数组 没有 主动检查监控项。
钥匙 字符串 没有 带有扩展宏的监控项键。
key_orig 字符串 没有 没有扩展宏的监控项键。
itemid 数字 没有 监控项标识符。
delay 字符串 没有 监控项更新间隔。
lastlogsize 数字 没有 监控项 lastlogsize。
mtime 数字 没有 监控项时间。
refresh_unsupported 数字 没有 不支持的监控项刷新间隔。
regexp 对象数组 没有 全局正则表达式。
name 字符串 没有 全局正则表达式名称。
expression 字符串 没有 全局正则表达式。
expression_type 数字 没有 全局正则表达式类型。
exp_delimiter 字符串 没有 全局正则表达式分隔符。
case_sensitive 数字 没有 全局正则表达式区分大小写设置。

· 服务器必须成功响应。

例如:

1.·agent打开一个TCP连接 2.·agent索要检查列表 3.·服务器响应监控项列表(监控项键,延时) 4.·agent解析响应 5.·TCP连接关闭 6. · agent开始定期收集数据

请注意,在使用主动检查时,(敏感)配置数据可能可供有权访问 Zabbix 服务器采集器端口的各方使用。 这是可能的,因为任何人都可能假装是一个主动agent并请求监控项配置数据; 除非您使用 encryption 选项,否则不会进行身份验证。

发送收集的数据

Agent 发送

代理数据请求包含收集的监控项值。

{
        · "request": "agent data",
        · "data": [
        · {
        · "host": "Zabbix server",
        · "key": "agent.version",
        · "value": "2.4.0",
        · "clock": 1400675595,
        · "ns": 76808644
        · },
        · {
        · "host": "Zabbix server",
        · "key": "log[/home/zabbix/logs/zabbix_agentd.log]",
        · "lastlogsize": 112,
        · "value": " 19845:20140621:141708.521 Starting Zabbix Agent [<hostname>]. Zabbix 2.4.0 (revision 50000).",
        · "clock": 1400675595,
        · "ns": 77053975
        · }
        · ],
        · "session": "1234456akdsjhfoui"
       }
字段 类型 必填
request 字符串 agent数据
session 字符串 每次启动代理时生成的唯一会话标识符。
data 对象数组 监控项值。
id 数字 值标识符(用于在出现网络问题时检查重复值的增量计数器)。
host 字符串 主机名。
key 字符串 监控项键。
value 字符串 没有 监控项值。
lastlogsize 数字 没有 监控项 lastlogsize。
mtime 数字 没有 监控项时间。
state 数字 没有 监控项状态。
source 字符串 没有 值事件日志源。
eventid 数字 没有 值事件日志eventid。
severity 数字 没有 值事件日志严重性。
timestamp 数字 没有 值事件日志时间戳。
clock 数字 值时间戳(自纪元以来的秒数)。
ns 数字 值时间戳纳秒。

每个值都分配了一个虚拟 ID。 值 ID 是一个简单的递增计数器,在一个数据会话中是唯一的(由会话令牌标识)。 此 ID 用于丢弃可能在连接性差的环境中发送的重复值。

服务器响应

agent数据响应在处理代理数据请求后由服务器发送回agent。

{
        · "response": "success",
        · "info": "processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
       }
字段 类型 必填
response 字符串 成功| 失败
info 字符串 监控项处理结果。

· ::: noteimportant 如果在服务器上发送某些值失败(例如,因为主机或监控项已被禁用或删除),agent将不会重试发送这些值。 :::

举例:

  1. Agent 打开一个TCP连接
  2. Agent 发送一个值列表
  3. Server 处理数据并将状态返回
  4. TCP 连接关闭

请注意,在上面的示例中,vfs.fs.size[/nono] 的不支持状态如何由“state”值 1 和“value”属性中的错误消息指示。

服务器端的错误消息将被修剪为 2048 个符号。

Heartbeat message

The heartbeat message is sent by an active agent to Zabbix server/proxy every HeartbeatFrequency seconds (configured in the Zabbix agent configuration file).

It is used to monitor the availability of active checks.

{
         "request": "active check heartbeat",
         "host": "Zabbix server",
         "heartbeat_freq": 60
       }
Field Type Mandatory Value
request string yes active check heartbeat
host string yes The host name.
heartbeat_freq number yes The agent heartbeat frequency (HeartbeatFrequency configuration parameter).

较旧的 XML 协议

Zabbix将占用16 MB的XML base64编码的数据, 但单个解码值应该不超过64kb,否则,在解码时将被截断到64 KB。