适用版本:Zabbix 7.4.x(已在 7.4.16 / MySQL 8.0.43 验证)。 一个自包含、多语言的 Zabbix 前端模块(custom module / plugin)。加载后会在 Administration → WeCom Center 增加一个定制页面,分 告警 / 优化 / 日常维护 三个标签页。
| 标签页 | 关键能力 |
|---|---|
| 告警 Alert | 企业微信群机器人 key 设置与测试;5 套告警策略预设(先预览 → 再应用);手动勾选会通知的严重度;一键刷新(写入模板触发器 / 触发器原型 / 已发现触发器,全部节点生效)。 |
| 优化 Optimization | 服务端调优参数生成(只生成 .env/compose 片段与重建命令,不落地,运维自行重建);真实华为模板 →「导入」→「切换」迁移设备;Geomap 单点标记。 |
| 日常维护 Maintenance | 按类别批量改告警等级;按单个触发器精确调整:勾选开关告警 + 行尾下拉改严重度;保存后页面自动刷新。 |
所有改动都走 Zabbix 官方 API / 受控 SQL 写进数据库,所以换机器、重建容器、升级镜像,配置都在——只要「加载插件」即可复用。
仓库自带的 docker-compose.yaml 已经把「插件随仓库走 + 自动启用」做好:
git clone <本仓库地址> zabbix-deploy
cd zabbix-deploy
# (可选)已有环境的模块目录在别处时,用环境变量覆盖,默认是仓库同级的 ./web-modules
# export WEB_MODULES_DIR=/opt/zabbix/zabbix-server/web-modules
docker compose up -d
启动后:
./web-modules/WecomCenter 被挂到容器 /usr/share/zabbix/modules/WecomCenter。wecom-module-init 会等 MySQL 就绪后,把 module 表里的 wecom_center 登记为 已启用(status=1)。脚本是幂等的:已存在就不动,重复 up 也安全。也就是说:全新环境
up -d完,什么都不用点,插件已经在了。
确认 web 容器挂载了持久化的 modules 目录(否则重建容器文件会丢):
zabbix-web-nginx-mysql:
volumes:
- /opt/zabbix/zabbix-server/web-modules:/usr/share/zabbix/modules
把 web-modules/WecomCenter 整个目录拷到宿主那台目录下(即 .../web-modules/WecomCenter/)。
cd web-modules && ./install.sh(自动探测运行中的 zabbix-* web 容器并复制进去;或 ./install.sh /usr/share/zabbix/modules)。docker compose up -d 重建 web 容器使挂载生效(只重启 web,数据不动)。
启用模块(写 module 表,status=1 为启用;moduleid 不是自增列,需显式给值):
SET @nid := (SELECT COALESCE(MAX(moduleid),0)+1 FROM module);
INSERT INTO module(moduleid,id,relative_path,status,config)
SELECT @nid,'wecom_center','modules/WecomCenter',1,'[]'
WHERE NOT EXISTS (SELECT 1 FROM module WHERE id='wecom_center');
也可以进 Administration → General → Modules → Scan directory → 启用 WecomCenter。
web-modules/)拉过去,按 2.1 或 2.2 重来即可;数据库卷保留则配置不丢。ubuntu-7.4.16),up -d 重建后插件仍在(文件在挂载目录、启用记录在 DB)。/opt/zabbix/zabbix-server/web-modules/WecomCenter/manifest.json 与 DB 的 module 行(id=wecom_center,status=1)。安装后第一次打开 WeCom Center → 告警 页,会显示 First-time setup / 首次配置:
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=... 里 key= 后面那串)。| 对象 | 作用 |
|---|---|
全局宏 {$WECOM_KEY} |
存放机器人 key(换机器人只改这一格) |
媒体类型 WeCom Group Robot |
type=4 webhook,内置发送脚本(markdown,失败回退 text) |
机器人用户 wecomrobot |
挂上面这个媒体类型,severity = High + Disaster |
触发器动作 Send alarm by Wecom Robot |
告警发红字、恢复发绿字,均带 {$ZBX_URL} 直达详情链接 |
群机器人就是「往群里发一条消息」,没有收件人账号/接收目标的概念,所以这里不设真人接收者,只维护一个机器人账号承载媒介。
{$WECOM_KEY};点 发送测试 会直接打企微接口,返回 errcode:0 即通。severity 位掩码 / active)。StartSNMPPollers 等 .env/compose 参数与重建命令。只生成、不落地,由运维复制到主机自行 docker compose up -d 重建 server(零风险、零特权)。Huawei VRP by SNMP walk(导出文件在 templates/),点「导入」即导入 Zabbix(已存在则就地更新,新模板则新建)。A. 按类别批量改告警等级
other 不参与)。B. 按单个触发器精确调整
Temperature)→ 点 Search(最多显示 200 条;全库可能有数万个触发器)。trigger.status,0 启用 / 1 停用);所有调整只改
triggers.priority/triggers.status,不删除任何对象。对「已发现(LLD)触发器」因 Zabbix API 不允许改其 priority,改用受控 SQL 精确更新,可逆。
| 等级 | priority | 媒介位掩码 |
|---|---|---|
| 未分类 Not classified | 0 | 1 |
| 信息 Information | 1 | 2 |
| 警告 Warning | 2 | 4 |
| 一般严重 Average | 3 | 8 |
| 严重 High | 4 | 16 |
| 灾难 Disaster | 5 | 32 |
trigger.status(0 启用 / 1 停用)。media.active(0 启用 / 1 停用),严重度用位掩码。en_GB/en_US 共用英文),与 Zabbix 语言数量一致。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、键名不变即可。Q:改完严重度,为什么告警没立刻变?
A:页面(读数据库)会立刻显示新值;Zabbix server 的「配置缓存」约 60 秒(CacheUpdateFrequency)刷新后才作用于告警判定。这是 Zabbix 机制,不是插件问题。
Q:地图是空白的? A:Geomap 底图依赖浏览器访问外网 OSM 瓦片;纯内网会空白,但标记点逻辑正确。
Q:会不会误伤生产触发器?
A:不会。所有操作都要你主动点 Apply / Save 才写库;「预览」不写库;改动仅限 priority / status,不删对象,且可用备份回滚。
Q:换机器人 key 要改哪里?
A:只改页面「机器人 key」一处(即全局宏 {$WECOM_KEY}),或 Administration → Macros。
Q:能在非 docker 的 Zabbix 上用吗?
A:可以。把 WecomCenter/ 放到 modules 目录、启用模块即可(见 2.2)。
Q:升级 Zabbix 会丢插件吗? A:不会。插件文件在宿主持久化目录、启用记录在数据库;只要目录与数据库卷保留,升级镜像后仍在。
zabbix-deploy/
├── docker-compose.yaml # 带插件:挂载 ./web-modules + wecom-module-init 自动启用
├── web-modules/
│ ├── install.sh # 一步搬运脚本(docker 自动探测 / 指定目录)
│ ├── README.md # 开发者向说明
│ └── WecomCenter/ # 插件本体
│ ├── manifest.json # v2.0,注册 2 个 action
│ ├── Module.php # 入口:注册视图、i18n、注入左侧菜单
│ ├── actions/ # View(GET) / Save(POST) 控制器
│ ├── views/ # 页面模板
│ ├── lib/ # I18n.php / Helper.php(业务逻辑)
│ ├── locale/ # 35 个语言文件
│ ├── templates/ # 内置真实华为模板
│ └── assets/ # wecom.center.css
└── docs/使用说明.md # 本文档
动手批量改前,建议先导出相关对象做备份(媒介类型、动作、全局宏、触发器 priority 快照)。示例(API 导出):
# 用 API token 导出媒介/动作/宏,保存为 JSON,需要时用对应 API 还原
页面「预览」永远是 dry-run,先看影响面再应用,是最稳的做法。