本节详细介绍了由Zabbix agent执行的被动检查与主动检查。
Zabbix采用基于JSON的通信协议与Zabbix agent进行交互。
另请参阅:Zabbix agent 2协议详情。
被动检查是一种简单的数据请求。Zabbix server或proxy会请求某些数据(例如CPU负载),然后Zabbix agent将结果返回给服务器。
服务器请求
关于头部和数据长度的定义,请参考protocol details。
Agent响应
上述方括号中的部分是可选的,仅在不支持监控项时发送。
例如,对于支持的监控项:
对于不支持的监控项:
主动检查需要更复杂的处理流程。agent首先必须从服务器获取需要独立处理的监控项列表。
获取主动检查的服务器列表配置在configuration file的'ServerActive'参数中。检查请求频率由同一配置文件中的'RefreshActiveChecks'参数设定。若主动检查更新失败,系统将在硬编码的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 \ |
|
info | string | no | 失败时的错误信息 | |
data | array of objects | no | 主动检查监控项 | |
key | string | no | 带宏扩展的监控项键值 | |
key_orig | string | no | 未扩展宏的监控项键值 | |
itemid | number | no | 监控项标识符 | |
delay | integer | no | 监控项更新间隔 | |
lastlogsize | number | no | 监控项最后日志大小 | |
mtime | number | no | 监控项修改时间 | |
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 | 全局正则表达式大小写敏感设置 |
服务器必须返回成功响应。
例如:
1。 Agent建立TCP连接 2。 Agent请求检查列表 3。 服务器返回监控项列表(监控项键值、间隔) 4。 Agent解析响应 5。 关闭TCP连接 6。 Agent开始周期性数据采集
请注意,当使用主动检查时,(敏感)配置数据可能会被能够访问Zabbix server捕获器端口的第三方获取。这是因为任何人都可以伪装成主动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 | string | yes | success \ |
info | string | yes | 监控项处理结果。 |
如果某些值在服务器端发送失败(例如,因为主机或监控项已被禁用或删除),agent将不会重试发送这些值。
例如:
1。 Agent建立TCP连接 2。 Agent发送值列表 3。 服务器处理数据并返回状态 4。 TCP连接关闭
注意上例中vfs.fs.size[/nono]的不支持状态通过"state"值为1和"value"属性中的错误消息表示。
错误消息在服务器端将被截断至2048个字符。
Zabbix最多可处理16 MB的Base64编码XML数据,但单个解码后的值不应超过64 KB,否则在解码过程中将被截断至64 KB。