概述

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

    这里有一些Zabbix使用的协议细节中的使用到的定义:

    为了避免耗尽内存, 当Zabbix server使用 Zabbix protocol 协议时一次连接只接受128M。

    被动检查

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

    Server 请求

    1. <item key>\n

    Agent 响应

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

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

    • Server 打开一个TCP连接

    • Server 发送 agent.ping\n

    • Agent 读取请求并响应

      1

    • Server 处理数据以获取值, '1' in our case

    • TCP连接关闭

      对于不支持的监控项:

    • Server 发送 vfs.fs.size[/nono]\n

    • Agent 读取请求并响应

      ZBX_NOTSUPPORTED\0Cannot obtain filesystem information: [2] No such file or directory

    • Server 处理数据, 更改项目状态为不支持并显示指定的错误消息

    • TCP连接关闭

    主动检查

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

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

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

    获取监控项列表

    Agent 请求

    1. <HEADER><DATALEN>{
    2. "request":"active checks",
    3. }

    Server 响应

    服务器必须响应成功。 对于每一个返回的监控项, 不管监控项是不是日志监控项,必须存在 key, delay, lastlogsize and mtime

    例如:

    • Agent 打开一个TCP连接

    • Agent 请求检查清单

    • Agent 解析响应

    • TCP 关闭连接

    • Agent 开始定期收集数据

    注意,在使用主动检查时,对于可以访问Zabbix服务器trapper端口的配置数据是可得到的。 这是可能的,因为任何一个都可以假装是一个主动agent,并请求项目配置数据; 除非你使用 加密 选项,否则认证不会发生

    发送收集的数据

    Agent 发送

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

    Server 响应

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

    例如:

    • Agent 打开一个TCP连接

    • Agent 发送一个值列表

    • Server 处理数据并将状态返回

    • TCP 连接关闭

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

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

    Older XML protocol

    另请参阅