3 被动和主动Agent检查

概述

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

Zabbix使用一个基于JSON的通信协议来与Zabbix Agent进行通信。

被动检查

被动检查是一个简单的数据请求。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然后定期向服务器发送新值。

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

获取监控项列表

Agent 请求

  1. {
  2. "request":"active checks",
  3. "host":"<hostname>"
  4. }

Server 响应

  1. {
  2. "response":"success",
  3. "data":[
  4. {
  5. "key":"log[/home/zabbix/logs/zabbix_agentd.log]",
  6. "delay":30,
  7. "lastlogsize":0,
  8. "mtime":0
  9. },
  10. {
  11. "key":"agent.version",
  12. "delay":600,
  13. "lastlogsize":0,
  14. "mtime":0
  15. },
  16. {
  17. "key":"vfs.fs.size[/nono]",
  18. "delay":600,
  19. "lastlogsize":0,
  20. "mtime":0
  21. }
  22. ]
  23. }

服务器必须响应成功。对于每个退回的监控项,所有 keydelaylastlogsizemtime 属性必须存在, 无论 item 是否为日志项。

示例:

  1. Agent打开TCP连接
  2. Agent请求检查列表
  3. 服务器响应一个监控项列表(item key, delay)
  4. Agent解析响应
  5. TCP连接关闭
  6. Agent开始定期收集数

请注意,当使用活动检查时,有权访问Zabbix服务器陷阱器端口的各方可能可以使用(敏感)配置数据。这是可能的,因为任何人都可以假装是活动代理并请求监控项配置数据;除非使用加密选项,否则不会进行身份验证。

发送收集的数据

Agent 发送

  1. {
  2. "request":"agent data",
  3. "session": "12345678901234567890123456789012",
  4. "data":[
  5. {
  6. "host":"<hostname>",
  7. "key":"agent.version",
  8. "value":"2.4.0",
  9. "id": 1,
  10. "clock":1400675595,
  11. "ns":76808644
  12. },
  13. {
  14. "host":"<hostname>",
  15. "key":"log[/home/zabbix/logs/zabbix_agentd.log]",
  16. "lastlogsize":112,
  17. "value":" 19845:20140621:141708.521 Starting Zabbix Agent [<hostname>]. Zabbix 2.4.0 (revision 50000).",
  18. "id": 2,
  19. "clock":1400675595,
  20. "ns":77053975
  21. },
  22. {
  23. "host":"<hostname>",
  24. "key":"vfs.fs.size[/nono]",
  25. "state":1,
  26. "value":"Cannot obtain filesystem information: [2] No such file or directory",
  27. "id": 3,
  28. "clock":1400675595,
  29. "ns":78154128
  30. }
  31. ],
  32. "clock": 1400675595,
  33. "ns": 78211329
  34. }

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

Server 响应

  1. {
  2. "response":"success",
  3. "info":"processed: 3; failed: 0; total: 3; seconds spent: 0.003534"
  4. }

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

举例:

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

注意,上面例子中不支持 vfs.fs.size[/nono] 的状态由 “state” 值为 1 和 “value” 中的错误消息表示。

在服务器端,错误消息将被处理到2048个符号。

较旧的 XML 协议

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