这是原厂英文文档的翻译页面. 欢迎帮助我们 完善文档.

3 被动和主动Agent检查

概述

本节提供有关 Zabbix agent 执行的被动和主动检查的详细信息。

Zabbix 使用基于 JSON 的通信协议与 Zabbix agent进行通信。

另请参阅:[Zabbix agent 2] (/manual/appendix/protocols/zabbix_agent2) 协议详细信息。

被动检查

被动检查是一个简单的数据请求。Zabbix服务器或proxy请求一些数据(例如,CPU负载),Zabbix agent将结果发送回服务器。

Server 请求 头部和数据长度的定义请参考协议详细信息

<item key>

Agent 响应

<DATA>[\0<ERROR>]

在上面,方括号中的部分是可选的,只发送到不受支持的监控项。

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

  1. Server 打开一个TCP连接
  2. Server 发送 <HEADER><DATALEN>agent.ping
  3. Agent 读取请求并响应 <HEADER><DATALEN>1
  4. Server 处理数据以获取值, 例如'1'
  5. TCP连接关闭

对于不支持的监控项:

  1. Server 打开一个TCP连接
  2. Server 发送 <HEADER><DATALEN>vfs.fs.size[/nono]
  3. Agent 读取请求并响应 <HEADER><DATALEN>ZBX_NOTSUPPORTED\0Cannot obtain filesystem information: [2] No such file or directory
  4. Server 处理数据, 更改监控项状态为不支持并显示指定的错误消息
  5. TCP连接关闭

主动检查

主动检查需要更复杂的处理,agent 必须首先从server端检索独立处理监控项的列表。

The servers 主动检查的列表在agent 配置文件中的 'ServerActive' 参数中列出, 请求这些检查的频率是由相同配置文件中的'RefreshActiveChecks' 参数设置的。 然而,如果刷新主动检查失败,则在60秒后重试。

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
       }
字段 类型 必填
request string 主动检查
host string 主机名。
host_metadata string 配置参数 HostMetadata 或 HostMetadataItem 度量值。
hostinterface string 配置参数 HostInterface 或 HostInterfaceItem 度量值。
ip string 如果设置了配置参数 ListenIP 第一个 IP。
port number 配置参数 ListenPort 值(如果已设置)而不是默认agent侦听端口。

Server 响应

在处理主动检查请求之后,主动检查响应由服务器发送回agent。

{
         "response": "success",
         "data": [
           {
             "key": "log[/home/zabbix/logs/zabbix_agentd.log]",
             "key_orig": "log[/home/zabbix/logs/zabbix_agentd.log]",
             "itemid": 1234,
             "delay": "30s",
             "lastlogsize": 0,
             "mtime": 0
           },
           {
             "key": "agent.version",
             "key_orig": "agent.version",
             "itemid": 5678,
             "delay": "10m",
             "lastlogsize": 0,
             "mtime": 0
           }
         ]
       }
字段 类型 必填
response string 成功| 失败
info string 失败时的错误信息。
data array of objects 主动检查监控项。
key string 带有扩展宏的监控项键。
key_orig string 没有扩展宏的监控项键。
itemid number 监控项标识符。
delay string 监控项更新间隔。
lastlogsize number 监控项 lastlogsize。
mtime number 监控项时间。
refresh_unsupported number 不支持的监控项刷新间隔。
regexp array of objects 全局正则表达式。
name string 全局正则表达式名称。
expression string 全局正则表达式。
expression_type number 全局正则表达式类型。
exp_delimiter string 全局正则表达式分隔符。
case_sensitive number 全局正则表达式区分大小写设置。

服务器必然成功响应。

例如:

  1. Agent 打开一个TCP连接
  2. Agent 索要检查列表
  3. 服务器响应监控项列表(监控项键,延时)
  4. Agent 解析响应
  5. TCP 连接关闭
  6. Agent 开始定期收集数据

请注意,当使用主动检查时,敏感的配置数据可能会被能够访问Zabbix server trapper端口的各方获取。这是可能的,因为任何人都可能伪装成主动 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 字符串 agent数据
session 字符串 每次启动代理时生成的唯一会话标识符。
data 对象数组 监控项值。
id 数字 值标识符(用于在出现网络问题时检查重复值的增量计数器)。
host 字符串 主机名。
key 字符串 监控项键。
value 字符串 没有 监控项值。
lastlogsize 数字 没有 监控项 lastlogsize。
mtime 数字 没有 监控项时间。
state 数字 没有 监控项状态。
source 字符串 没有 值事件日志源。
eventid 数字 没有 值事件日志eventid。
severity 数字 没有 值事件日志严重性。
timestamp 数字 没有 值事件日志时间戳。
clock 数字 值时间戳(自纪元以来的秒数)。
ns 数字 值时间戳纳秒。

每个值都分配了一个虚拟 ID。 值 ID 是一个简单的递增计数器,在一个数据会话中是唯一的(由会话令牌标识)。 此 ID 用于丢弃可能在连接性差的环境中发送的重复值。

服务器响应

agent数据响应在处理代理数据请求后由服务器发送回agent。

{
        · "response": "success",
        · "info": "processed: 2; failed: 0; total: 2; seconds spent: 0.003534"
       }
字段 类型 必填
response 字符串 成功| 失败
info 字符串 监控项处理结果。

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

举例:

  1. Agent 打开一个TCP连接
  2. Agent 发送一个值列表
  3. Server 处理数据并将状态返回
  4. TCP 连接关闭

请注意,在上面的示例中,vfs.fs.size[/nono] 的不支持状态如何由“state”值 1 和“value”属性中的错误消息指示。

服务器端的错误消息将被修剪为 2048 个符号。

较旧的 XML 协议

Zabbix将占用16 MB的XML base64编码的数据, 但单个解码值应该不超过64kb,否则,在解码时将被截断到64 KB。