资讯动态

Zabbix 核心代码目录:数据分层设计

发布时间:2026/8/15 19:51:34 来源:尧图企业网站定制
#Zabbix 的代码目录围绕数据全生命周期采集→存储→处理→展示→告警实现清晰的分层设计核心数据分层贯穿src/核心引擎、templates/场景扩展、database/数据持久化、ui/数据展示等目录以下是分层拆解与目录映射关系一、数据分层核心维度Zabbix 数据分层遵循「采集→传输→存储→计算→消费」的数据流逻辑每层对应明确的目录职责且层间通过标准化接口解耦数据分层核心职责关键目录/文件采集层接入层多协议/多类型数据采集SNMP/HTTP/Agent/Traps/LLD 等templates/采集规则配置、src/libs/zbxget/采集引擎、src/zbxserver/poller/轮询采集传输层数据异步传输、队列管理、协议适配TCP/UDP/HTTPsrc/zbxserver/trapper/被动采集、src/libs/zbxcomm/通信协议、src/libs/zbxipc/进程间通信存储层数据持久化历史数据/配置数据/告警数据、缓存管理database/SQL 脚本、src/libs/zbxcachehistory/历史数据缓存、src/zbxdb/数据库交互计算层数据预处理、聚合计算、告警规则执行、LLD 动态解析src/zbxserver/evaluator/表达式计算、src/zbxserver/preprocessing/预处理、src/zbxserver/discovery/LLD 解析消费层数据展示、告警通知、API 输出、可视化渲染ui/前端展示、src/zbxserver/alerter/告警通知、src/zbxapi/REST API二、核心目录与数据分层的深度映射1. 采集层templates/src/采集引擎采集层是数据入口配置与引擎分离templates/声明式采集规则无代码扩展按监控对象分类app//db//server//san/通过 YAML/XML 定义采集项Item、LLD 发现规则、预处理规则核心配置监控项 Key如hadoop.datanode.remaining[{#HOSTNAME}]、采集类型HTTP_AGENT/SNMP_AGENT/TRAP、JSONPATH 预处理、心跳丢弃DISCARD_UNCHANGED_HEARTBEAT。src/采集引擎代码层src/zbxserver/poller/主动轮询采集如 ICMP ping、SNMP 轮询src/zbxserver/trapper/被动接收采集数据如 SNMP Trap、Zabbix Agent 主动上报src/libs/zbxsnmptools/SNMP 协议解析适配 MIB 文件src/libs/zbxhttp/HTTP 采集如 Hadoop/SharePoint 的 HTTP_AGENT 采集。典型采集层协作流程templates/app/hadoop_http/采集规则→ src/zbxserver/poller/HTTP 轮询→ src/libs/zbxhttp/请求发送→ 预处理JSONPATH 提取→ 传输层队列2. 传输层进程间通信 异步队列Zabbix 采用「主进程子进程」架构传输层负责数据在进程间/节点间流转src/libs/zbxipc/进程间通信IPC实现 poller/trapper/alerter 等进程的数据交互src/zbxserver/queue/采集数据异步队列避免采集与存储耦合src/libs/zbxcomm/统一通信协议封装TCP/UDP/HTTP适配不同采集端Agent/Proxy/Server。3. 存储层缓存 数据库分层存储Zabbix 存储层采用「内存缓存 磁盘持久化」分层设计缓存层临时存储src/libs/zbxcachehistory/历史数据缓存如cachehistory.c定义的table_name/lastid缓存结构减少数据库读写压力src/zbxserver/cache/配置数据缓存模板/主机/监控项配置。持久化层长期存储database/数据库表结构脚本MySQL/PostgreSQL/Oracle核心表items采集项配置、history/history_uint/history_str不同类型历史数据triggers告警规则、alerts告警记录、discovery_rulesLLD 规则src/zbxdb/数据库交互封装SQL 执行、连接池、事务管理src/zbxserver/housekeeper/数据清理按配置保留历史数据删除过期数据。4. 计算层预处理 规则执行 LLD 解析计算层是 Zabbix 核心逻辑层负责数据从「原始采集值」到「可消费数据/告警」的转换预处理数据清洗src/zbxserver/preprocessing/执行模板中定义的预处理规则JSONPATH 提取、Replace 替换、In range 校验、DISCARD_VALUE 容错典型场景HPE Synergy 模板中$.state转换为数字Adding - 0/Configured - 2、SharePoint 健康分数正则提取X-SharePointHealthScore\b:\s(\d)。告警计算src/zbxserver/evaluator/执行触发器表达式如max(/Extreme EXOS by SNMP/icmpping,#3)0判断是否触发告警src/zbxserver/trigger/触发器依赖管理、优先级计算。LLD 动态解析src/zbxserver/discovery/解析嵌套 LLD 规则如ui/tests/integration/data/nested_lld/中的多级发现核心逻辑父规则发现main_drule→ 子规则嵌套解析nested[{#PARENTNAME}]→ 动态生成监控项原型Item prototype。5. 消费层前端展示 告警通知 API 输出消费层是数据的最终出口适配不同消费场景前端展示ui/ui/js/前端交互如 Leaflet 地图渲染、MarkerCluster 集群展示ui/include/后端渲染监控图表、告警列表、LLD 发现结果告警通知src/zbxserver/alerter/适配多渠道Email/Slack/JIRA/Microsoft Teams执行告警发送逻辑API 输出src/zbxapi/提供 REST API暴露采集数据、配置数据、告警数据如模板导出/导入、历史数据查询。三、数据分层的核心设计原则1. 配置与引擎解耦templates/仅定义采集/计算规则声明式配置不侵入核心引擎代码核心引擎src/通过解析模板配置适配不同监控场景如 Hadoop/SharePoint/HPE Synergy 无需修改代码。2. 数据类型分层存储配置数据模板/主机/监控项存储在数据库缓存到内存src/zbxserver/cache/历史数据指标值按类型分表存储history/history_uint/history_str短期数据缓存zbxcachehistory告警数据实时计算触发后存储到alerts表同时推送至通知渠道。3. 预处理前置化数据清洗JSONPATH/Replace/正则在采集层完成减少存储层压力支持容错处理如DISCARD_VALUE/Custom on fail避免无效数据进入计算层。4. LLD 动态分层解析嵌套 LLD 支持「父规则→子规则→监控项原型」的多级解析适配动态拓扑如 HPE Synergy 数据中心→机架→服务器的层级发现解析结果缓存按lifetime_type如 DELETE_IMMEDIATELY自动清理过期发现结果。四、关键数据流转示例以 Hadoop 监控为例1. 采集层templates/app/hadoop_http/ 定义 HTTP_AGENT 采集项hadoop.datanode.get[{#HOSTNAME}]指向 DataNode 的 JMX 接口 2. 传输层poller 进程发送 HTTP 请求接收 JSON 数据后放入 IPC 队列 3. 计算层执行预处理JSONPATH 提取 $.beans[?(.nameHadoop:serviceDataNode,nameFSDatasetState)].Remaining.first() 4. 存储层清洗后的数据写入 history 表同时缓存到 zbxcachehistory 5. 计算层若剩余磁盘空间低于阈值触发器Trigger表达式计算触发告警 6. 消费层告警推送至指定渠道前端 ui/ 展示剩余磁盘空间趋势图。五、核心目录补充说明目录/文件数据分层角色核心作用src/libs/zbxcachehistory/cachehistory.c存储层缓存定义历史数据缓存结构table_name/lastid管理内存缓存的写入/读取ui/tests/integration/data/nested_lld/计算层LLD 测试测试嵌套 LLD 解析逻辑main_drule → nested[{#PARENTNAME}]database/存储层持久化提供数据库建表脚本、版本升级脚本定义配置/历史/告警数据的存储结构src/zbxserver/preprocessing/计算层预处理执行模板中定义的所有预处理规则JSONPATH/Replace/心跳丢弃等templates/xxx_http/采集层HTTP 采集配置定义 HTTP 协议的采集规则如 SharePoint/Hadoop/HPE Synergy 的 JSON 解析Zabbix 数据分层的核心价值在于「可扩展高性能」通过templates/实现无代码场景扩展通过src/分层引擎实现数据全生命周期的高效处理通过缓存数据库分层存储平衡性能与持久化需求。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价