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>]

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

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

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

对于不支持的监控项:

  1. 服务器打开TCP连接
  2. 服务器发送<HEADER><DATALEN>vfs.fs.size[/nono]
  3. Agent读取请求并响应<HEADER><DATALEN>ZBX_NOTSUPPORTED\0无法获取文件系统信息:[2] 没有这样的file或目录
  4. 服务器处理数据,将监控项状态更改为不支持,并显示指定的错误消息
  5. 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 \
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 全局正则表达式大小写敏感设置。

服务器必须返回成功响应。

例如:

  1. Agent建立TCP连接
  2. Agent请求检查项列表
  3. 服务器返回监控项列表(监控项键值、间隔时间)
  4. Agent解析响应
  5. 关闭TCP连接
  6. 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 \
info string yes 监控项处理结果。

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

例如:

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

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

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

旧版 XML 协议

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