3 被动与主动 agent 检查

概述

本节详细介绍了由Zabbix agent执行的被动检查与主动检查。

Zabbix采用基于JSON的通信协议与Zabbix agent进行交互。

另请参阅:Zabbix agent 2协议详情。

被动检查

被动检查是一种简单的数据请求。Zabbix server或proxy会请求某些数据(例如CPU负载),然后Zabbix agent将结果返回给服务器。

服务器请求

关于头部和数据长度的定义,请参考protocol details

<监控项 key>

Agent响应

<DATA>[\0<ERROR>]

上述方括号中的部分是可选的,仅在不支持监控项时发送。

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

  1. 服务器打开TCP连接
  2. 服务器发送<HEADER><DATALEN>agent.ping
  3. Agent读取请求并响应 <HEADER><DATALEN>1
  4. 服务器处理数据以获取值,本例中为'1'
  5. TCP连接关闭

对于不支持的监控项:

  1. 服务器打开TCP连接
  2. 服务器发送<HEADER><DATALEN>vfs.fs.size[/nono]
  3. Agent读取请求并响应 <HEADER><DATALEN>ZBX_NOTSUPPORTED\0无法获取 文件系统信息:[2] 没有这样的文件或目录
  4. 服务器处理数据,将监控项状态更改为不支持,并附带指定的错误消息
  5. TCP连接关闭

主动检查

主动检查需要更复杂的处理流程。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": "success",
         "info": "processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
       }
字段 类型 必填
response string yes success \
info string yes 监控项处理结果。

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

例如:

1。 Agent建立TCP连接 2。 Agent发送值列表 3。 服务器处理数据并返回状态 4。 TCP连接关闭

注意上例中vfs.fs.size[/nono]的不支持状态通过"state"值为1和"value"属性中的错误消息表示。

错误消息在服务器端将被截断至2048个字符。

旧版 XML 协议

Zabbix最多可处理16 MB的Base64编码XML数据,但单个解码后的值不应超过64 KB,否则在解码过程中将被截断至64 KB。