|
|
4 zile în urmă | |
|---|---|---|
| .. | ||
| WecomCenter | 4 zile în urmă | |
| README.md | 4 zile în urmă | |
一个自包含、多语言的 Zabbix 7.4 前端模块(custom module / plugin)。加载后会在 Administration → WeCom Center 增加一个定制页面,集中处理:
trigger.status,0 启用 / 1 停用)。由于单套环境常有数万个触发器,需先输入关键字搜索(最多显示 200 条)。templates/ 目录里的模板文件(yaml/xml/json)一键导入 Zabbix。location_lat / location_lon(主机资产清单)。所有改动都通过 Zabbix 官方 API 写入数据库,因此:换机器、重建容器、升级镜像后设置都在;只要“加载插件”即可复用。
WecomCenter/
├── manifest.json # 模块清单(v2.0),注册 2 个 action
├── Module.php # 模块入口:注册视图目录、初始化 i18n、注入左侧菜单
├── actions/
│ ├── WecomCenterView.php # GET 控制器,渲染页面
│ └── WecomCenterSave.php # POST 控制器,分发一键方案/保存/测试/导入/地图
├── views/
│ └── wecom.center.view.php # 页面模板(Zabbix 原生 UI 组件)
├── lib/
│ ├── I18n.php # 极简多语言层(按当前语言加载,缺省回退英文)
│ └── Helper.php # 业务逻辑:媒介/账号/key、方案预设、导入、坐标、测试
├── locale/ # 35 个语言文件(见“多语言”)
├── templates/demo.yaml # 示例模板(演示一键导入)
└── assets/wecom.center.css
持久化模块目录:在 docker-compose.yaml 的 web 服务下挂载宿主目录:
zabbix-web-nginx-mysql:
volumes:
- /opt/zabbix/zabbix-server/web-modules:/usr/share/zabbix/modules
把本 WecomCenter/ 目录整体放到宿主 /opt/zabbix/zabbix-server/web-modules/WecomCenter/,然后
docker compose up -d 重建一次 web 容器使挂载生效(数据不动,仅 web 短暂重启)。
启用模块(写入 module 表,status=1 为启用):
INSERT INTO module(moduleid,id,relative_path,status,config)
SELECT 1001,'wecom_center','modules/WecomCenter',1,'[]'
WHERE NOT EXISTS (SELECT 1 FROM module WHERE id='wecom_center');
(也可在 Administration → General → Modules 里点“启用”。)
换环境:重复 1–3 即可。模块代码放在 git 里,
web-modules/随仓库走;MySQL 卷里保存着module启用记录,二者都在 → 插件始终在线。
en_GB/en_US 共用英文)。zh_CN、zh_TW、ja_JP、ko_KR、ru_RU、de_DE、fr_FR、es_ES、pt_BR、it_IT、pl_PL、tr_TR。locale/en.php 为 locale/<lang>.php 并翻译 value 即可,键名保持不变。模块会读取当前用户语言(CWebUser::$data['lang'])自动切换。manifest.json 用 manifest_version: 2.0;action 的控制器类位于 actions/(自动加载器会把子命名空间段转小写)。Module::init() 里 CView::registerDirectory($this->getRelativePath().'/views')。APP::Component()->get('menu.main')->findOrAdd(_('Administration'))->getSubmenu()->add(...)。mediatype.get 不支持 sortfield=name(会整体返回 false);configuration.import 的规则键是复数 templates(不是 template);trigger.update 不接受 triggers 数组,只能逐条用 triggerid 更新。active 字段:0=启用、1=停用;严重度为位掩码(未分类=1…灾难=32)。触发器“是否告警”落在 trigger.status:0=启用、1=停用。页面基于“Webhook 类型(type=4)的媒介 + 一个机器人账号(默认用户名 wecomrobot)的媒介记录”工作:
severity / active。webhook_url 参数(保留其它参数)。webhook_url,检查返回 errcode:0。若环境中没有 Webhook 媒介类型,页面会提示“未找到 webhook 媒介类型”。