3 zabbix agent的被动和主动检查
概述
本节提供关于Zabbix agent被动和主动执行检查的详细信息。
Zabbix使用一个基于JSON的通信协议来与Zabbix agent进行通信。
这里有一些Zabbix使用的协议细节中的使用到的定义:
<HEADER> - "ZBXD\x01" (5 bytes)
<DATALEN> - data length (8 bytes). 1 will be formatted as 01/00/00/00/00/00/00/00 (eight bytes in HEX, 64 bit number)
为了避免耗尽内存, 当Zabbix server使用 Zabbix protocol 协议时一次连接只接受128M。
被动检查
被动检查是一个简单的数据请求。Zabbix服务器或proxy请求一些数据(例如,CPU负载),Zabbix agent将结果发送回服务器。
Server 请求
<item key>\n
Agent 响应
<HEADER><DATALEN><DATA>[\0<ERROR>]
在上面,方括号中的部分是可选的,只发送到不受支持的项目。
例如, 对于支持的监控项:
Server 打开一个TCP连接
Server 发送 <HEADER><DATALEN>agent.ping
Agent 读取请求并响应 <HEADER><DATALEN>1
Server 处理数据以获取值, 例如’1’
TCP连接关闭
对于不支持的监控项:
Server 打开一个TCP连接
Server 发送 vfs.fs.size[/nono]\n
Agent 读取请求并响应 <HEADER><DATALEN>ZBX_NOTSUPPORTED\0Cannot obtain filesystem information: [2] No such file or directory
Server 处理数据, 更改项目状态为不支持并显示指定的错误消息
TCP连接关闭
主动检查
主动检查需要更复杂的处理,agent 必须首先从server端检索独立处理监控项的列表。
The servers 主动检查的列表在agent 配置文件中的 ‘ServerActive’ 参数中列出, 请求这些检查的频率是由相同配置文件中的’RefreshActiveChecks’ 参数设置的。 然而,如果刷新主动检查失败,则在60秒后重试。
agent然后定期向服务器发送新值。
获取监控项列表
Agent 请求
<HEADER><DATALEN>{
"request":"active checks",
"host":"<hostname>"
}
Server 响应
<HEADER><DATALEN>{
"response":"success",
"data":[
{
"key":"log[/home/zabbix/logs/zabbix_agentd.log]",
"delay":30,
"lastlogsize":0,
"mtime":0
},
{
"key":"agent.version",
"delay":600,
"lastlogsize":0,
"mtime":0
},
{
"key":"vfs.fs.size[/nono]",
"delay":600,
"lastlogsize":0,
"mtime":0
}
]
}
服务器必须响应成功。 对于每一个返回的监控项, 不管监控项是不是日志监控项,必须存在 key, delay, lastlogsize and mtime 。
例如:
Agent 打开一个TCP连接
Agent 请求检查清单
Server 响应为监控项列表 (item key, delay)
Agent 解析响应
TCP 关闭连接
Agent 开始定期收集数据
注意,在使用主动检查时,对于可以访问Zabbix服务器trapper端口的配置数据是可得到的。 这是可能的,因为任何一个都可以假装是一个主动agent,并请求项目配置数据; 除非你使用 加密 选项,否则认证不会发生
发送收集的数据
Agent 发送
<HEADER><DATALEN>{
"request":"agent data",
"data":[
{
"host":"<hostname>",
"key":"agent.version",
"value":"2.4.0",
"clock":1400675595,
"ns":76808644
},
{
"host":"<hostname>",
"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
},
{
"host":"<hostname>",
"key":"vfs.fs.size[/nono]",
"state":1,
"value":"Cannot obtain filesystem information: [2] No such file or directory",
"clock":1400675595,
"ns":78154128
}
],
"clock": 1400675595,
"ns": 78211329
}
Server 响应
<HEADER><DATALEN>{
"response":"success",
"info":"processed: 3; failed: 0; total: 3; seconds spent: 0.003534"
}
如果在服务器上发送一些值失败(例如,因为主机或监控项被禁用或删除),agnet将不会重试发送这些值。
例如:
Agent 打开一个TCP连接
Agent 发送一个值列表
Server 处理数据并将状态返回
TCP 连接关闭
注意,上面例子中不支持 vfs.fs.size[/nono] 的状态由 “state” 值为 1 和 “value” 中的错误消息表示。
在服务器端,错误消息将被处理到2048个符号。
老的XML协议
Zabbix将占用16 MB的XML base64编码的数据, 单个解码值不应该超过64kb,否则在解码时将被截断到64 KB。