当前位置: 首页 > news >正文

Zabbix 采集层:多协议/多类型数据采集的实现逻辑

Zabbix 采集层作为数据入口,核心通过「配置驱动采集规则 + 引擎层协议适配 + 预处理标准化」的三层架构,实现 SNMP、HTTP/HTTPS、Agent、Traps、ICMP 等数十种协议/类型的数据采集,且无需修改核心代码即可扩展新协议/新场景。

一、核心架构:配置与引擎解耦

采集层的核心设计是「声明式配置(templates/)」与「通用采集引擎(src/)」分离,前者定义采集什么、怎么采集,后者实现协议怎么解析、数据怎么获取,二者通过标准化的「采集项 Key + 采集类型」关联。

层级核心目录/模块作用
配置层templates/定义采集规则(协议类型、目标地址、指标路径、预处理),无代码扩展
引擎层src/zbxserver/poller/主动采集调度(轮询),按配置层规则触发不同协议的采集逻辑
协议适配层src/libs/zbx{snmptools/http/agent}/封装各协议的底层交互逻辑(如 SNMP OID 解析、HTTP 请求发送)

二、多协议采集的实现流程(通用逻辑)

所有协议的采集均遵循「规则解析 → 协议适配 → 数据获取 → 预处理」的标准化流程,以 SNMP(网络设备)和 HTTP(应用)为例,核心流程如下:

SNMP_AGENT

HTTP_AGENT

ZABBIX_AGENT

ICMP

TRAP

templates/ 采集规则

采集引擎解析规则

判断采集类型/协议

src/libs/zbxsnmptools/ 解析OID

src/libs/zbxhttp/ 构造请求

src/libs/zbxagent/ 通信封装

src/libs/zbxicmp/ 发包检测

src/zbxserver/trapper/ 被动接收

原始数据返回

预处理(清洗/转换)

输出标准化数据至传输层

关键步骤说明:

  1. 规则解析:采集引擎(poller/trapper)读取templates/中定义的采集项(Item),提取核心参数:
    • type:采集类型(如SNMP_AGENT/HTTP_AGENT/ZABBIX_AGENT);
    • key:采集项唯一标识(如snmp.get[1.3.6.1.2.1.1.1.0]/http.get[https://hadoop:50070/jmx]);
    • params:协议参数(如 SNMP 社区串、HTTP 请求头、Agent 超时时间);
    • preprocessing:数据预处理规则(如 JSONPATH 提取、数值转换)。
  2. 协议适配:引擎根据type调用对应协议的封装库,完成底层交互;
  3. 数据预处理:对原始数据做标准化清洗,消除不同协议/设备的格式差异。

三、主流协议的具体实现方式

1. SNMP 协议采集(网络设备/服务器硬件)

SNMP 是 Zabbix 最核心的采集协议,覆盖 90%+ 网络设备监控场景:

核心模块:
  • 配置层:templates/net/xxx_snmp/(如extreme_snmp//zyxel_snmp/),定义SNMP_AGENT类型采集项,指定 OID/宏变量;
  • 引擎层:src/zbxserver/poller/snmp/(主动轮询)、src/zbxserver/trapper/snmptrap/(被动接收 Trap);
  • 协议封装:src/libs/zbxsnmptools/(SNMP v1/v2c/v3 适配、MIB 解析、OID 转换)。
实现逻辑:
  • 主动采集(轮询):
    1. 从模板读取 SNMP 采集项(如snmp.get[{$SNMP_COMMUNITY},1.3.6.1.2.1.2.2.1.10.{#IFINDEX}],{#IFINDEX} 为 LLD 动态变量);
    2. zbxsnmptools封装 SNMP 请求(支持 v3 的认证/加密),发送至目标设备;
    3. 解析返回的 SNMP PDU 包,提取指标值(如端口入流量);
    4. 执行预处理(如DISCARD_UNCHANGED_HEARTBEAT丢弃未变化数据)。
  • 被动采集(Trap):
    1. Zabbix Server/Proxy 监听 UDP 162 端口(SNMP Trap 默认端口);
    2. snmptrap模块解析 Trap 报文,匹配模板中定义的SNMP_TRAP类型采集项;
    3. 提取 Trap 中的 OID 和值,触发告警(如设备端口 Down 事件)。

2. HTTP/HTTPS 协议采集(应用/云服务/API)

适配无 Agent 场景下的应用监控(如 Hadoop、Travis CI、Veeam 备份、SharePoint):

核心模块:
  • 配置层:templates/app/xxx_http/(如hadoop_http//travis_ci_http/),定义HTTP_AGENT类型采集项;
  • 协议封装:src/libs/zbxhttp/(HTTP 请求构造、响应解析、Cookie/Header 管理、HTTPS 证书校验)。
实现逻辑:
  1. 模板中配置 HTTP 采集项,指定 URL、请求方法(GET/POST)、请求头(如Content-Type: application/json);
  2. zbxhttp发送 HTTP 请求,接收 JSON/XML/文本响应;
  3. 通过预处理规则提取指标(如 JSONPATH:$.beans[?(@.name=='Hadoop:service=DataNode')].Remaining);
  4. 支持高级特性:超时重试、代理配置、自定义变量(如{$HADOOP_DATANODE_PORT})。

3. Zabbix Agent 采集(服务器/客户端)

适用于深度监控服务器 OS(CPU/内存/磁盘)、本地应用:

核心模块:
  • 配置层:模板中定义ZABBIX_AGENT/ZABBIX_ACTIVE类型采集项;
  • 引擎层:src/zbxserver/poller/agent/(被动模式,Server 主动拉取)、src/zabbix_agent/(客户端采集逻辑);
  • 协议封装:src/libs/zbxcomm/(TCP/UDP 通信,Agent 协议封装)。
实现逻辑:
  • 被动模式(Server → Agent):
    1. Server 轮询 Agent 端口(10050),发送采集 Key(如system.cpu.util[all,avg1]);
    2. Agent 执行本地采集脚本(如读取/proc/stat计算 CPU 使用率),返回数值;
    3. Server 接收并标准化数据。
  • 主动模式(Agent → Server):
    1. Agent 本地配置采集规则(从 Server 同步模板),主动采集数据;
    2. Agent 连接 Server 端口(10051),推送采集结果;
    3. Server 的trapper模块接收数据,减少 Server 轮询压力。

4. 其他协议/类型采集

协议/类型核心模块适用场景实现要点
ICMPsrc/libs/zbxicmp/设备可达性检测发送 ICMP Echo 请求,计算丢包率/响应时间,支持 IPv4/IPv6
JMXsrc/zbxserver/poller/jmx/Java 应用监控(Tomcat/JVM)通过 JMXMP/Jolokia 协议连接 JVM,读取 MBean 指标
ODBCsrc/libs/zbxodbc/数据库监控(Oracle/MySQL)通过 ODBC 驱动执行 SQL 查询,采集数据库性能指标(如连接数、慢查询数)
SSH/Telnetsrc/zbxserver/poller/ssh/命令行采集(无 Agent 设备)执行远程命令(如df -h),解析输出结果
Trapssrc/zbxserver/trapper/被动告警(SNMP Trap/自定义)监听指定端口,接收并解析 Trap 报文,匹配告警规则

四、多类型数据的标准化处理

不同协议返回的数据格式差异大(SNMP 是数值/字符串、HTTP 是 JSON/XML、Agent 是文本),采集层通过「预处理规则」实现标准化:

核心预处理能力(配置在 templates/ 采集项中):

预处理类型作用示例场景
JSONPATH从 JSON 响应中提取指定字段Hadoop JMX 响应中提取 DataNode 剩余磁盘空间
REGEX正则提取文本中的数值SharePoint 响应头中提取健康分数(X-SharePointHealthScore)
MULTIPLIER数值单位转换(如百分秒→秒)SNMP 采集的运行时间(×0.01)
DISCARD_UNCHANGED丢弃未变化数据,减少存储压力设备型号/固件版本(无需频繁采集)
CHECK_NOT_SUPPORTED兼容不支持的指标,采集失败时返回默认值部分设备不支持的 SNMP OID 返回 0
JAVASCRIPT复杂数据转换/拼接Zyxel 固件版本多字段拼接(Vx.y(z)_a.b.c)

示例:HTTP 采集 Hadoop 数据的预处理

preprocessing:-type:JSONPATHparameters:["$.beans[?(@.name=='Hadoop:service=DataNode,name=FSDatasetState')].Remaining.first()"]-type:MULTIPLIERparameters:["0.000001"]# 字节转MB-type:DISCARD_UNCHANGED_HEARTBEATparameters:["1h"]# 1小时内未变化则丢弃

五、动态发现(LLD):适配多实例/动态拓扑

采集层不仅支持静态采集,还通过 LLD(低级别发现)实现「动态多实例采集」,适配如端口、容器、数据库实例等动态拓扑:

实现逻辑:

  1. 模板中定义 LLD 发现规则(如snmp.discovery[1.3.6.1.2.1.2.2.1.1],发现网络端口);
  2. 采集引擎执行发现规则,返回实例列表(如 {#IFINDEX}=1、{#IFNAME}=eth0);
  3. 根据「采集项原型」动态生成每个实例的采集项(如监控 eth0/eth1 的流量);
  4. 支持嵌套 LLD(父规则发现集群,子规则发现集群内节点)。

六、核心设计优势

  1. 协议无关性:无论 SNMP/HTTP/Agent,采集引擎均通过「采集类型」抽象,新增协议仅需扩展src/libs/zbx{proto}/封装库;
  2. 无代码扩展:新增采集场景仅需在templates/新增配置文件,无需修改核心引擎;
  3. 标准化预处理:统一的预处理规则消除不同协议的数据格式差异,降低下游计算层复杂度;
  4. 高性能调度:采集引擎采用多进程/多线程调度,支持采集频率自定义(如 10s/1min/5min),适配不同指标的采集需求。

总结

Zabbix 采集层实现多协议/多类型采集的核心是「配置驱动 + 协议封装 + 标准化预处理」:

  • 配置层(templates/)通过声明式规则定义“采集什么”,适配不同业务场景;
  • 引擎层(src/)通过协议封装库实现“怎么采集”,屏蔽底层协议差异;
  • 预处理规则实现“数据怎么标准化”,为后续存储/计算层提供统一格式的数据。
    这种设计既保证了多协议的兼容性,又实现了采集规则的灵活扩展,是 Zabbix 适配各类监控场景的核心基础。
http://www.jsqmd.com/news/519390/

相关文章:

  • 零基础玩转Wireshark:5个必学的流量分析骚操作(含端口扫描检测)
  • 嘎嘎降AI普通模式vs深度改写模式:什么情况该用哪个
  • HTTPS的工作过程
  • 探索IEEE 39节点暂态模型:Simulink与PSCAD仿真之旅
  • 别再手动对齐了!用Word制表位3分钟搞定专业文档排版
  • 程序搭建的基本流程
  • 如何让降AI后的论文读起来更自然?5个人工润色小技巧
  • 运维人必看!用Wireshark排查网络故障的3个真实案例(含tcpdump对比)
  • OpenClaw-Medical-Skills 仓库介绍
  • 点云处理神器CloudCompare的5个隐藏功能:90%用户不知道的实用技巧
  • 华为云Kafka配置避坑指南:从实例规格选择到流量控制实战
  • STK卫星仿真入门:从零搭建高低轨卫星网络(附详细参数配置)
  • 论文降AI后怎么检查专业术语有没有被改?逐项检查清单分享
  • 中国纯裸地30米分辨率DEM地形栅格数据(FABDEM)
  • 降AI+降重+格式修正一条龙教程:毕业论文终稿提交前必看
  • 基于CEEMDAN + PE + 小波降噪重构的信号处理之旅
  • 有做豆包推广的公司吗?2026年企业如何联系专业AI获客服务商? - 品牌2026
  • PFC2D 中隧道开挖应力释放模拟:精准掌控比例的艺术
  • MATLAB实战:用Power Method快速计算对称矩阵主特征值(附完整代码)
  • cjh_蓝桥杯C++学习_枚举+日期问题分享
  • 降AI工具的风格迁移技术是什么意思?通俗解读背后的原理
  • 手机摄像头背后的高速通道:深入浅出图解MIPI CSI-2数据流
  • 竞争性谈判实战指南:从文件准备到最终报价的5个关键决胜点
  • 【华为OD机考真题】智慧交通·路口最短时间问题 (Java/Go)
  • LeetCode HOT100 - 回文子串
  • Matlab基于连续小波变换(CWT)批量生成时频图
  • 从经纬度到平面坐标:ArcGIS中高斯投影的完整工作流(含自定义中央子午线技巧)
  • 洛谷 P1336:最佳课题选择 ← 分组背包
  • 最长公共子序列(LCS)——从零开始的动态规划
  • 学习web第三天