监控告警接入企业微信:群机器人 Webhook 配置与排错

监控告警接入企业微信,最省事的做法是使用群机器人 Webhook:在企业微信群里添加一个机器人,拿到 Webhook 地址,然后在监控系统或脚本里向这个地址 POST 一段 JSON。
不需要企业微信管理员审批应用,也不用配置可信 IP,只要机器人还在群里,消息就能发出去。
下面按零基础可操作的方式,从准备到验证逐步说明。

开始前需要确认的三件事

动手前先确认环境,避免配到一半卡住。

  • 企业微信账号权限:你所在的群需要能添加机器人。手机端和桌面端都可以操作,但部分企业可能由管理员限制了群机器人功能,如果找不到入口,先找管理员确认。
  • 监控系统版本:本文以通用的 HTTP 告警通道为例。Zabbix 需要 5.0 及以上才自带 Webhook 媒介类型;Prometheus 配合 Alertmanager 使用 webhook_configs。低版本也可以通过脚本调用 curl 实现。
  • 服务器网络:运行告警发送的机器需要能访问 qyapi.weixin.qq.com 的 443 端口。内网机器如果出不了外网,需要配置代理,否则请求会超时。

创建群机器人并拿到 Webhook

  1. 打开企业微信,进入需要接收告警的群聊(建议单独建一个“监控告警”群,避免打扰业务群)。
  2. 点击群聊右上角的设置图标,找到“群机器人”,选择“添加机器人”。
  3. 给机器人起一个容易识别的名字,比如“Zabbix告警”,确认后系统会生成一个 Webhook 地址。
  4. 复制这个地址,格式类似:
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

这个地址里的 key 就是身份凭证,等于密码,不要发到公开仓库或截图里。 如果泄露,重新生成一个机器人即可。

用 curl 先验证通道是否通

在配置监控系统之前,先用一条命令确认 Webhook 可用,能把问题范围缩小。

curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key' \
  -H 'Content-Type: application/json' \
  -d '{
    "msgtype": "text",
    "text": {
      "content": "告警通道测试:如果你看到这条消息,说明接入成功。"
    }
  }'

执行后群里有消息,返回体类似 {"errcode":0,"errmsg":"ok"},说明通道正常。
如果没消息,看返回的 errcode,对照后面的排错部分。

企业微信机器人支持 text、markdown、image、news 等消息类型。
告警场景用 markdown 更清晰,可以加颜色标记级别:

{
  "msgtype": "markdown",
  "markdown": {
    "content": "**告警**\n> 主机:web-01\n> 内容:CPU 使用率超过 90%\n> 时间:2024-01-01 10:00:00"
  }
}

markdown 类型支持 info(绿色)、comment(灰色)、warning(橙色)三种颜色,注意颜色值要写在 font color 里。

接入监控系统的两种常见方式

方式一:Zabbix 媒介类型

Zabbix 5.0 及以上在“管理 → 媒介类型”里可以直接导入企业微信 Webhook。
导入后在用户或动作里选择该媒介,填入 Webhook 的 key。
如果版本较老,可以自己写一个媒介类型脚本:

#!/bin/bash
WEBHOOK="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key"
curl -s -H "Content-Type: application/json" \
  -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$1\"}}" \
  "$WEBHOOK"

脚本放在 Zabbix 的 AlertScriptsPath 目录下,赋予执行权限,然后在媒介类型里调用。

方式二:Alertmanager webhook

Prometheus 生态里,在 alertmanager.yml 中增加一个 receiver:

receivers:
  - name: 'wechat'
    webhook_configs:
      - url: 'http://127.0.0.1:8060/webhook'

Alertmanager 本身不直接发企业微信,需要一个中间层把它的 JSON 转成企业微信格式,常用的有 PrometheusAlert 或自己写一个几十行的 Python/Flask 服务。
中间层收到 Alertmanager 的 POST 后,提取告警名、实例、描述,拼成企业微信 markdown 再转发。

容易踩的坑

  • 消息体字段写错:msgtype 和对应的内容字段名必须匹配,比如 msgtype 是 text,下面就必须是 text.content,写成 content 顶层字段会报错。
  • JSON 转义问题:在 shell 里拼 JSON 时,引号和换行容易出错。建议用 jq 生成,或者把消息体写进文件再用 curl -d @file.json。
  • 频率限制:企业微信机器人每个机器人每分钟最多发送 20 条消息。告警风暴时容易触发限流,建议在监控侧做聚合,比如 5 分钟内同类告警合并成一条。
  • 网络与代理:内网机器请求超时,多半是出不了外网。检查 curl -v 的输出,确认是否卡在连接阶段,必要时配置 https_proxy。
  • key 失效:机器人被移出群或重新生成过 key,旧地址就会失效,需要更新配置。

验证与日常检查

接入完成后,建议做三件事确认它真的在工作。

  1. 主动触发一次真实告警:比如把 CPU 阈值临时调低,看群里是否收到,确认字段和格式符合预期。
  2. 查看发送端日志:Zabbix 看“报表 → 动作日志”,Alertmanager 看自身日志,确认请求已发出且返回 errcode 为 0。
  3. 定期检查机器人是否还在群内:人员调整时有人可能顺手把机器人移出群,导致告警静默。可以把“每周发一条测试消息”做成定时任务作为心跳检测。

常见错误码说明

  • errcode 93000:Webhook 地址无效或 key 错误,检查地址是否完整复制。
  • errcode 40001:消息体格式不对,重点检查 JSON 结构和字段名。
  • errcode 45009:接口调用超过限制,检查是否短时间发送过多消息。
  • errcode 40014:access_token 无效,但群机器人 Webhook 不涉及这个,如果出现说明你可能用错了接口地址。

监控告警企业微信接入的核心就是 Webhook 加 JSON 消息体这两步,先用 curl 打通,再套进监控系统,遇到问题按错误码排查,基本都能解决。

分享到:
上一篇
用Docker快速搭建Grafana Loki日志系统实战
下一篇
Jenkins流水线搭建:从零到可运行Pipeline的完整步骤
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意