本节提供有关 Zabbix agent 和 Zabbix agent 2 执行的被动和主动检查的详细信息。
Zabbix 使用基于 JSON 的通信协议与 Zabbix agent进行通信。
从Zabbix 7.0起,Zabbix agent 和 Zabbix agent 2 协议已统一。Zabbix agent 和 Zabbix agent 2 请求/响应之间的差异由"variant" 标签值表示。
被动检查是一个简单的数据请求。Zabbix server或proxy请求一些数据(例如,CPU负载),Zabbix agent将结果发送回服务器。
被动检查是异步执行的 - 在其他检查开始之前不需要接收对一个请求的响应。 DNS 解析也是异步的。
异步检查最大并发数为1000 (由 MaxConcurrentChecksPerPoller定义).
异步agent pollers 由 StartAgentPollers 参数定义.
Server 请求
头部和数据长度的定义请参考 协议详情。
Agent 响应
例如,对于支持的监控项:
对于不支持的监控项:
为了确保 Zabbix server或proxy可以与 7.0 之前版本(具有明文协议)的Agent一起使用,实现了到旧协议的故障转移。
重启后或接口配置更改时,使用 JSON 协议(7.0 及更高版本)执行被动检查。 如果没有收到有效的 JSON 响应 (agent 发送 "ZBX_NOTSUPPORTED"), Zabbix 会将接口缓存为旧协议,并通过仅发送监控项来 重试 检查。
请注意, Zabbix server/proxy 每小时都会再次尝试使用所有接口的新协议,如果有需要,则回退到旧协议。
主动检查需要更复杂的处理,agent 必须首先从server/proxy端获取监控项列表,或通过 远程命令 进行独立处理。
从中获取主动检查的server/proxy在Agent 配置文件 的"ServerActive"参数中列出。请求这些检查的频率由同一配置文件中的"RefreshActiveChecks"参数设置。但是,如果刷新主动检查失败,则会在硬编码 60 秒后重试。
从 Zabbix 6.4 开始,Agent(处于主动模式)不再每两分钟从server/proxy接收一次完整的配置副本(默认)。相反,为了减少网络流量和资源使用,每 5 秒(默认)执行一次增量配置同步,server/proxy 仅在Agent尚未收到配置时才提供配置的完整副本,或者主机配置、全局宏或全局正则表达式发生了某些变化。
然后,agent定期向服务器发送新值。如果Agent收到任何远程命令 需要去执行,执行结果也会被发送。请注意,自 Zabbix Agent 7.0 起,支持在主动Agent上执行远程命令。
如果Agent位于防火墙后面,您可能会考虑仅使用主动检查,因为在这种情况下您不需要修改防火墙以允许初始传入连接。
Agent 请求
主动检查请求用于获取agent要处理的主动检查。 此请求由agent在启动时发送,然后以 RefreshActiveChecks 间隔发送。
{
"request": "active checks",
"host": "Zabbix server",
"host_metadata": "mysql,nginx",
"hostinterface": "zabbix.server.lan",
"ip": "159.168.1.1",
"port": 12050,
"version": "7.0.0",
"variant": 2,
"config_revision": 1,
"session": "e3dcbd9ace2c9694e1d7bbd030eeef6e"
}
字段 | 类型 | 必填 | 值 |
---|---|---|---|
request | string | yes | 主动检查 |
host | string | yes | 主机名. |
host_metadata | string | no | 配置参数 HostMetadata 或 HostMetadataItem 度量值. |
hostinterface | string | no | 配置参数 HostInterface 或 HostInterfaceItem 度量值. |
ip | string | no | 如果设置了,配置参数 ListenIP 第一个 IP. |
port | number | no | 配置参数 ListenPort 值(如果已设置)而不是默认agent侦听端口. |
version | string | yes | agent 版本号. |
variant | number | yes | agent 变体 (1 - Zabbix agent, 2 - Zabbix agent 2). |
config_revision | number | no | 增量配置同步的配置标识符. |
session | string | no | 增量配置同步的会话标识符. |
Server 响应
在处理主动检查请求之后,主动检查响应由服务器发送回agent。
{
"response": "success",
"config_revision": 2,
"data": [
{
"key": "system.uptime",
"itemid": 1234,
"delay": "10s",
"lastlogsize": 0,
"mtime": 0
},
{
"key": "agent.version",
"itemid": 5678,
"delay": "10m",
"lastlogsize": 0,
"mtime": 0,
"timeout": "30s"
}
],
"commands": [
{
"command": "df -h --output=source,size / | awk 'NR>1 {print $2}'",
"id": 1324,
"wait": 1
}
]
}
字段 | 类型 | 必填 | 值 | |
---|---|---|---|---|
response | string | yes | 成功 | 失败 |
|
info | string | no | 失败时的错误信息. | |
data | array of objects | no | 主动检查监控项. 如果主机配置未更改则省略. | |
key | string | no | 具有扩展宏的Item key. | |
itemid | number | no | 监控项ID. | |
delay | string | no | 监控项更新时间. 从 Zabbix 7.0 开始,Zabbix agent 和 Zabbix agent 2 都支持灵活/调度间隔. |
|
lastlogsize | number | no | 监控项最新日志大小. | |
mtime | number | no | 监控项更改时间. | |
timeout | string | 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 | 全局正则表达式区分大小写设置. | |
commands | array of objects | no | 远程执行命令. 如果远程执行命令被 操作 或手动脚本 执行触发,也包含在内. 请注意,自 Zabbix Agent 7.0 起,支持主动Agent上执行远程命令。较旧的主动Agent将忽略主动检查服务器响应中包含的任何远程命令. | |
command | string | no | 远程命令. | |
id | number | no | 远程命令标识符. | |
wait | number | no | 远程命令执行方式 ("0" (不等待) 对于从动作 操作; "1" (等待) 对于从手动的 脚本 执行). | |
config_revision | number | no | 增量配置同步 的配置标识符. 如果主机配置未更改,则省略。如果主机配置更改则增加. |
服务器必须成功响应。
例如:
请注意,在使用主动检查时,(敏感)配置数据可能供有权访问 Zabbix server采集器端口的各方使用。这是可能的,因为任何人都可能假装是一个主动agent并请求监控项配置数据。除非您使用加密 选项,否则不会进行身份验证。
Agent 发送
Agent数据请求包含收集的监控项值和执行的远程命令的值(如果有)。
{
"request": "agent data",
"data": [
{
"id": 1,
"itemid": 5678,
"value": "7.0.0",
"clock": 1712830783,
"ns": 76808644
},
{
"id": 2,
"itemid": 1234,
"value": "69672",
"clock": 1712830783,
"ns": 77053975
}
],
"commands": [
{
"id": 1324,
"value": "16G"
}
],
"session": "1234456akdsjhfoui",
"host": "Zabbix server",
"version": "7.0.0",
"variant": 2
}
字段 | 类型 | 必填 | 值 | |
---|---|---|---|---|
request | string | yes | agent数据 |
|
data | array of objects | yes | 监控项值. | |
id | number | yes | 值标识符(用于在出现网络问题时检查重复值的增量计数器). | |
itemid | string | yes | 监控项ID. | |
value | string | no | 监控项值. | |
lastlogsize | number | no | 监控项 lastlogsize. | |
mtime | number | no | 监控项修改时间. | |
state | number | no | 监控项状态. | |
source | string | no | 值事件日志源. | |
eventid | number | no | 值事件日志eventid. | |
severity | number | no | 值事件日志严重性. | |
timestamp | number | no | 值事件日志时间戳. | |
clock | number | yes | 值时间戳(自纪元以来的秒数). | |
ns | number | yes | 值时间戳纳秒. | |
commands | array of objects | no | 远程命令执行结果. 请注意,自 Zabbix Agent 7.0 起,支持在主动Agent上执行远程命令。较旧的主动Agent将忽略主动检查服务器响应中包含的任何远程命令. | |
id | number | no | 远程命令标识符. | |
value | string | no | 远程命令执行结果,如果执行成功. | |
error | string | no | 远程命令执行错误消息,如果执行失败. | |
session | string | yes | 每次启动Agent时生成的唯一会话标识符. | |
host | string | yes | 主机名. | |
version | string | yes | agent 版本号. | |
variant | number | yes | agent 变体 (1 - Zabbix agent, 2 - Zabbix agent 2). |
每个值都分配了一个虚拟 ID。值 ID 是一个简单的递增计数器,在一个数据会话中是唯一的(由会话令牌标识)。 此 ID 用于丢弃可能在连接性差的环境中发送的重复值。
Server 响应
agent数据响应在处理agent数据请求后由服务器发送回agent。
字段 | 类型 | 必填 | 值 |
---|---|---|---|
response | string | yes | 成功 | 失败 |
info | string | yes | 监控项处理结果. |
如果在服务器上发送某些值失败(例如,因为主机或监控项已被禁用或删除),agent将不会重试发送这些值。
例如:
请注意,在上面的示例中,vfs.fs.size[/nono] 的不支持状态是如何通过"state"值 1 和“value”属性中的错误消息来指示的。
服务器端错误消息将被修剪为 2048 个符号。
心跳消息由主动Agent每隔 HeartbeatFrequency 秒 (在Zabbix agent)/ agent 2 配置文件中配置)发送到Zabbix server/proxy。
它用于监视主动检查的可用性。
{
"request": "active check heartbeat",
"host": "Zabbix server",
"heartbeat_freq": 60,
"version": "7.0.0",
"variant": 2
}
字段 | 类型 | 必填 | 值 |
---|---|---|---|
request | string | yes | 主动检查心跳 |
host | string | yes | 主机名. |
heartbeat_freq | number | yes | agent 心跳频率 ( HeartbeatFrequency 配置参数 ). |
version | string | yes | agent 版本号 . |
variant | number | yes | agent 变体 (1 - Zabbix agent, 2 - Zabbix agent 2). |
Zabbix将占用16 MB的XML base64编码的数据, 但单个解码值应该不超过64 KB,否则,在解码时将被截断到64 KB。