3 被动和主动Agent检查

概述

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

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

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

被动检查

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

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

  1. <item key>

Agent 响应

  1. <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 间隔发送。

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

Server 响应

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

  1. {
  2. · "response": "success",
  3. · "data": [
  4. · {
  5. · "key": "log[/home/zabbix/logs/zabbix_agentd.log]",
  6. · "key_orig": "log[/home/zabbix/logs/zabbix_agentd.log]",
  7. · "itemid": 1234,
  8. · "delay": "30s",
  9. · "lastlogsize": 0,
  10. · "mtime": 0
  11. · },
  12. · {
  13. · "key": "agent.version",
  14. · "key_orig": "agent.version",
  15. · "itemid": 5678,
  16. · "delay": "10m",
  17. · "lastlogsize": 0,
  18. · "mtime": 0
  19. · }
  20. · ]
  21. }
字段类型必填
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 发送

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

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

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

服务器响应

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

  1. {
  2. · "response": "success",
  3. · "info": "processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
  4. }
字段类型必填
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.

  1. {
  2. "request": "active check heartbeat",
  3. "host": "Zabbix server",
  4. "heartbeat_freq": 60
  5. }
FieldTypeMandatoryValue
requeststringyesactive check heartbeat
hoststringyesThe host name.
heartbeat_freqnumberyesThe agent heartbeat frequency (HeartbeatFrequency configuration parameter).

较旧的 XML 协议

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