3 被动与主动 agent 检查
概述
本节详细介绍了由Zabbix agent执行的被动和主动检查。
Zabbix使用基于JSON的通信协议与Zabbix agent进行通信。
另请参阅:Zabbix agent 2 协议详情。
被动检查
被动检查是一种简单的数据请求。Zabbix server或proxy向服务器请求某些数据(例如CPU负载),Zabbix agent将结果返回给服务器。
服务器请求
关于头部和数据长度的定义,请参阅protocol details。
<item key>
Agent响应
<DATA>[\0<ERROR>]
上述方括号中的部分是可选的,仅在不支持的监控项时发送。
例如,对于支持的监控项:
- 服务器打开TCP连接
- 服务器发送<HEADER><DATALEN>agent.ping
- Agent读取请求并响应<HEADER><DATALEN>1
- 服务器处理数据以get该值,本例中为'1'
- TCP连接关闭
对于不支持的监控项:
- 服务器打开TCP连接
- 服务器发送<HEADER><DATALEN>vfs.fs.size[/nono]
- Agent读取请求并响应<HEADER><DATALEN>ZBX_NOTSUPPORTED\0无法获取文件系统信息:[2] 没有这样的file或目录
- 服务器处理数据,将监控项状态更改为不支持,并显示指定的错误消息
- TCP连接关闭
主动检查
主动检查需要更复杂的处理。agent首先必须 从服务器检索一组监控项以进行独立处理
用于get主动检查的服务器列在 'ServerActive' 参数用于 agent configuration file。询问频率 这些检查的间隔时间由配置文件中的'RefreshActiveChecks'参数设置 相同配置file. 但如果刷新主动检查失败, 它 在硬编码的60秒后重试。
agent随后会定期将新值发送到服务器
如果 agent 位于防火墙后方,您可能需要考虑 仅使用主动检查,因为在这种情况下您不需要 修改防火墙以允许初始传入连接。
获取监控项列表
Agent请求
主动检查请求用于获取需要由agent处理的主动检查项。该请求由agent在启动时发送,之后按照_RefreshActiveChecks_间隔定期发送。
{
"request": "active checks",
"host": "Zabbix server",
"host_metadata": "mysql,nginx",
"interface": "zabbix.server.lan",
"ip": "159.168.1.1",
"port": 12050
}
| 字段 | 类型 | 必填 | 值 |
|---|---|---|---|
| request | string | yes | active checks |
| host | string | yes | 主机名. |
| host_metadata | string | no | 配置参数HostMetadata或HostMetadataItem的指标值。 |
| interface | string | no | 配置参数HostInterface或HostInterfaceItem的指标值。 |
| ip | string | no | 配置参数ListenIP的首个IP(如设置)。 |
| port | number | no | 配置参数ListenPort的值(如设置且非默认agent监听端口)。 |
服务器响应
服务器在处理完主动检查请求后,会向agent返回主动检查响应。
{
"response": "success",
"data": [
{
"key": "log[/home/zabbix/logs/zabbix_agentd.log]",
"key_orig": "log[/home/zabbix/logs/zabbix_agentd.log]",
"itemid": 1234,
"delay": 30,
"lastlogsize": 0,
"mtime": 0
},
{
"key": "agent.version",
"key_orig": "agent.version",
"itemid": 5678,
"delay": 10,
"lastlogsize": 0,
"mtime": 0
}
]
}
| 字段 | < | 类型 | 必填 | 值 | |
|---|---|---|---|---|---|
| response | < | string | yes | success \ |
failed |
| info | < | string | no | 失败时的错误信息。 | |
| data | < | array of objects | no | 主动检查监控项。 | |
| key | string | no | 展开宏后的监控项键值。 | ||
| ^ | key_orig | string | no | 未展开宏的监控项键值。 | |
| ^ | itemid | number | no | 监控项标识符。 | |
| ^ | delay | integer | no | 监控项update间隔。 | |
| ^ | lastlogsize | number | no | 监控项lastlogsize值。 | |
| ^ | mtime | number | no | 监控项mtime值。 | |
| refresh_unsupported | < | number | no | 不支持的监控项刷新间隔。 | |
| regexp | < | array of objects | no | 全局正则表达式。 | |
| name | string | no | 全局正则表达式名称。 | ||
| ^ | expression | string | no | 全局正则表达式。 | |
| ^ | expression_type | number | no | 全局正则表达式类型。 | |
| ^ | exp_delimiter | string | no | 全局正则表达式分隔符。 | |
| ^ | case_sensitive | number | no | 全局正则表达式大小写敏感设置。 | |
服务器必须返回成功响应。
例如:
- Agent建立TCP连接
- Agent请求检查项列表
- 服务器返回监控项列表(监控项键值、间隔时间)
- Agent解析响应
- 关闭TCP连接
- Agent开始周期性数据采集
注意:当使用主动检查时,(敏感)配置数据可能 被能够访问Zabbix server trapper端口的第三方获取。 这是因为任何人都可以伪装成主动agent并请求监控项配置数据; 除非使用encryption选项,否则不会进行身份验证。
发送采集数据
Agent发送
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 | string | yes | agent data |
|
| session | string | yes | agent每次启动时生成的唯一会话标识符。 | |
| data | array of objects | yes | 监控项值。 | |
| id | number | yes | 值标识符(用于在网络问题情况下检查重复值的递增计数器)。 | |
| 主机 | string | yes | 主机名。 | |
| key | string | yes | 监控项键。 | |
| value | string | no | 监控项值。 | |
| lastlogsize | number | no | 监控项lastlogsize。 | |
| mtime | number | no | 监控项mtime。 | |
| state | number | no | 监控项状态。 | |
| source | string | no | 值事件日志来源。 | |
| eventid | number | no | 值事件日志eventid。 | |
| severity | number | no | 值事件日志严重级别。 | |
| timestamp | number | no | 值事件日志时间戳。 | |
| clock | number | yes | 值时间戳(自Epoch起的秒数)。 | |
| ns | number | yes | 值时间戳纳秒部分。 | |
每个值都会被分配一个虚拟ID。值ID是一个简单的递增计数器,在单个数据会话(由会话令牌标识)内唯一。该ID用于在连接质量差的环境中丢弃可能重复发送的值。
服务器响应
agent数据响应是服务器在处理完agent数据请求后发送回agent的。
{
"response": "success",
"info": "processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
}
| 字段 | 类型 | 必填 | 值 | |
|---|---|---|---|---|
| response | string | yes | success \ |
failed |
| info | string | yes | 监控项处理结果。 |
如果某些值在服务器端发送失败(例如由于主机或监控项被禁用或删除),agent将不会重试发送这些值。
例如:
- Agent建立TCP连接
- Agent发送值列表
- 服务器处理数据并返回状态
- TCP连接关闭
注意上例中vfs.fs.size[/nono]的不支持状态通过"state"值为1和"value"属性中的错误消息来指示。
错误消息在服务器端将被截断至2048个字符。
旧版 XML 协议
Zabbix最多可处理16MB的Base64编码XML数据 但单个解码后的值不应超过64KB 否则在解码过程中会被截断为64KB