
Zabbix 的场景扩展层是实现「无代码/低代码适配不同监控场景」的核心层级围绕「模块扩展、模板配置、前端组件扩展、算法/表达式扩展」四大维度构建通过标准化的扩展接口和配置规范支持快速适配 Hadoop、SharePoint、HPE Synergy 等不同监控场景。以下是场景扩展层的核心目录、扩展机制与典型场景示例一、场景扩展层核心维度与目录映射场景扩展层的核心目标是「不修改核心引擎代码仅通过配置/扩展模块实现场景适配」各维度对应目录及职责如下扩展维度核心职责关键目录/文件模块扩展动态新增/修改菜单、页面、业务逻辑如新增监控模块、定制化权限ui/tests/selenium/modules/模块示例、ui/widgets/组件模块模板配置扩展声明式定义采集规则、预处理规则、LLD 规则适配不同监控对象templates/采集模板、database/模板配置存储前端样式/组件扩展定制化前端展示如地图组件、图标、菜单样式sass/stylesheets/sass/components/样式扩展、ui/js/vendors/第三方组件算法/表达式扩展扩展监控指标计算逻辑如自定义聚合函数、表达式解析规则tests/libs/zbxalgo/算法测试、tests/libs/zbxeval/表达式解析测试加密扩展适配不同加密场景如数据传输加密、配置加密src/libs/zbxcrypto/加密算法实现二、核心目录与场景扩展的深度解析1. 模块扩展ui/tests/selenium/modules/扩展模块示例 生产级模块规范Zabbix 提供模块化扩展框架通过Module.php逻辑manifest.json配置views/页面actions/业务逻辑的组合实现菜单、页面、功能的无侵入扩展。核心目录结构以 module_number_2 为例module_number_2/ ├── Module.php # 模块初始化如新增菜单 ├── manifest.json # 模块元配置版本、命名空间、路由 ├── views/ │ └── second.module.php # 前端页面展示 └── actions/ └── Test2.php # 业务逻辑处理权限、输入校验、响应关键扩展能力1菜单扩展Module.php通过APP::Component()-get(menu.main)操作主菜单支持新增/删除/修改菜单节点// 示例在 Monitoring 菜单下新增子菜单publicfunctioninit():void{$menuAPP::Component()-get(menu.main);$menu-find(Monitoring)-getSubMenu()-add((new\CMenuItem(2nd Module))-setAction(second.module));}// 示例删除指定菜单module_number_6publicfunctioninit():void{$menuAPP::Component()-get(menu.main);$menu-remove(Reports);// 删除顶级菜单$menu-find(Monitoring)-getSubMenu()-remove(Maps);// 删除子菜单}2模块元配置manifest.json定义模块的基础信息、路由映射是模块加载的核心配置{manifest_version:2.0,// 模块配置版本需符合Zabbix规范id:two,// 模块唯一IDname:2nd Module name,// 模块名称namespace:Example_B,// 模块命名空间对应PHP命名空间actions:{// 路由-业务逻辑映射second.module:{// 路由标识class:Test2,// 处理类对应actions/Test2.phpview:second.module// 页面模板对应views/second.module.php}}}3业务逻辑扩展actions/Test2.php继承Zabbix核心控制器CController实现自定义业务逻辑namespaceModules\Example_B\Actions;useCControllerasCAction;classTest2extendsCAction{// 初始化如关闭CSRF校验、设置权限publicfunctioninit(){$this-disableCsrfValidation();}// 权限校验protectedfunctioncheckPermissions(){returntrue;}// 输入校验protectedfunctioncheckInput(){returntrue;}// 核心业务逻辑protectedfunctiondoAction(){$responsenew\CControllerResponseData([]);$response-setTitle(2nd Module);$this-setResponse($response);}}4页面扩展views/second.module.php通过Zabbix内置的CHtmlPage快速构建前端页面(newCHtmlPage())-addItem((newCTag(h1,true,2nd module is also working)))-show();模块扩展注意事项manifest_version需符合Zabbix支持的版本如 2.0 合法2.01 会被判定为不兼容命名空间需与manifest.json中的namespace一致否则类加载失败路由Action需唯一避免与核心模块/其他扩展模块冲突。2. 模板配置扩展templates/采集规则扩展模板扩展是Zabbix适配不同监控场景的核心方式无需修改代码仅通过配置文件定义按监控对象分类app//db//server//san/如templates/app/hadoop_http/适配Hadoop监控定义采集项Item、LLD发现规则、预处理规则、触发器Trigger支持多协议扩展SNMP/HTTP/Agent/Traps如HTTP_AGENT采集Hadoop的JMX接口数据。3. 前端样式/组件扩展1样式扩展sass/stylesheets/sass/components/通过Sass变量和混合宏Mixin扩展前端样式适配不同场景的UI展示图标样式扩展_icons-extended.scss定义不同尺寸图标large/medium/small/smaller、带内容图标%icon-with-content菜单样式扩展_menu-main.scss定制主菜单/子菜单的选中、展开、悬浮样式地图组件样式扩展dashboard/_widget-geomap.scss定制地理地图组件的标记簇、悬浮/选中样式折叠面板扩展_expandable-subfilter.scss定义可折叠的筛选器样式适配长文本展示场景。2第三方组件扩展ui/js/vendors/集成第三方前端组件并扩展适配监控数据可视化场景Leaflet.markercluster/leaflet.markercluster.js扩展Leaflet地图的标记簇功能支持大批量监控节点的集群展示核心逻辑addLayers方法实现分层加载标记、集群化渲染避免大量标记导致的性能问题。4. 算法/表达式扩展Zabbix支持通过自定义算法和表达式规则扩展监控指标的计算逻辑1算法扩展tests/libs/zbxalgo/定义指标计算模式value/max/min/delta/avg适配不同场景的指标分析# zbx_mode_code.yaml 示例扩展算法模式---test case:1. Case valuein:str_mode:valueout:return:SUCCEEDmode_str_exp:VALUE2表达式扩展tests/libs/zbxeval/扩展监控触发器表达式的解析规则支持自定义函数、逻辑运算# zbx_eval_execute_ext.yaml 示例扩展sum函数---test case:Expression sum(hist(/host/key,1h))in:rules:[ZBX_EVAL_PARSE_FUNCTION,ZBX_EVAL_PARSE_GROUP,ZBX_EVAL_PARSE_ITEM_QUERY]expression:sum(hist(/host/key,1h))callbacks:-name:histargs_num:2retval:[1,2,3]out:result:SUCCEEDvalue:65. 加密扩展src/libs/zbxcrypto/适配不同加密场景如数据传输、配置加密实现AES算法的密钥扩展// aes.c 核心逻辑KeyExpansion函数生成轮密钥适配AES-128/AES-256等加密场景staticvoidKeyExpansion(uint8_t*RoundKey,constuint8_t*Key){unsignedi,j,k;uint8_ttempa[4];// 初始轮密钥 原始密钥for(i0;iNk;i){RoundKey[(i*4)0]Key[(i*4)0];RoundKey[(i*4)1]Key[(i*4)1];RoundKey[(i*4)2]Key[(i*4)2];RoundKey[(i*4)3]Key[(i*4)3];}// 生成后续轮密钥支持AES256扩展for(iNk;iNb*(Nr1);i){// 轮密钥变换RotWord/SubWord/Rcon异或// ...#ifdefined(AES256)(AES2561)if(i%Nk4){// AES256专属SubWord变换tempa[0]getSBoxValue(tempa[0]);tempa[1]getSBoxValue(tempa[1]);tempa[2]getSBoxValue(tempa[2]);tempa[3]getSBoxValue(tempa[3]);}#endif// 轮密钥异或生成RoundKey[j0]RoundKey[k0]^tempa[0];// ...}}三、场景扩展层核心设计原则1. 无侵入扩展所有扩展逻辑均通过「配置/模块」实现不修改Zabbix核心引擎代码src/zbxserver//src/zbxdb/等保证核心代码的稳定性。2. 标准化接口模块扩展遵循manifest.json配置规范 CModule基类接口模板扩展遵循Zabbix Item/Trigger/LLD配置规范前端扩展遵循Sass变量命名规范 第三方组件接口规范。3. 分层扩展数据采集层通过模板扩展适配不同监控对象业务逻辑层通过模块扩展新增/修改功能前端展示层通过样式/组件扩展定制UI算法层通过表达式/算法规则扩展计算逻辑安全层通过加密算法扩展适配不同加密场景。4. 可测试性扩展逻辑配套测试用例如zbxeval/zbx_eval_execute_ext.yaml/zbxalgo/zbx_mode_code.yaml保证扩展功能的正确性。四、典型场景扩展示例新增Hadoop监控模块模板扩展在templates/app/hadoop_http/定义Hadoop DataNode的HTTP_AGENT采集项配置JSONPATH预处理规则模块扩展manifest.json定义模块ID、命名空间、路由hadoop.moduleModule.php在Monitoring菜单下新增「Hadoop监控」子菜单actions/TestHadoop.php实现Hadoop指标的聚合计算views/hadoop.module.php展示Hadoop集群的磁盘/内存/CPU指标前端扩展在_widget-geomap.scss定制Hadoop节点的地图标记样式表达式扩展新增hadoop_datanode_remaining()函数计算DataNode剩余磁盘空间。五、核心目录补充说明目录/文件场景扩展角色核心作用ui/widgets/geomap/manifest.json组件模块配置定义地理地图组件的元信息、输入输出参数、JS类映射sass/stylesheets/sass/components/_icons-extended.scss图标样式扩展定义不同尺寸/状态的图标样式适配不同场景的UI展示src/libs/zbxcrypto/aes.c加密算法扩展实现AES密钥扩展适配不同加密强度AES-128/AES-256的场景ui/tests/selenium/modules/module_number_5/多语言模块扩展支持俄文菜单/页面适配国际化场景tests/libs/zbxeval/zbx_eval_execute_ext.yaml表达式规则扩展测试/定义自定义表达式函数适配复杂监控场景的指标计算Zabbix场景扩展层的核心价值在于「高扩展性低耦合」通过标准化的扩展接口无需修改核心代码即可适配不同行业如金融/能源/互联网、不同监控对象如Hadoop/数据库/网络设备的场景需求同时保证扩展功能的可维护性和可测试性。