钉钉企业微信接收服务器故障告警通知
核心答案:将服务器故障告警推送到钉钉和企业微信,只需两步
在服务器上配置告警通知,最实用的方式是通过群机器人接收 Webhook 消息。
无论使用 Prometheus + Alertmanager 还是直接写脚本调用 HTTP 接口,核心就三步:创建群机器人获取 Webhook URL → 在告警工具中配置该地址 → 触发告警验证消息到达。
本文以零基础可操作为前提,覆盖准备、配置、避坑与验证全过程。
前置准备:确认环境与工具
- 一台运行 Linux(如 CentOS 7 或 Ubuntu 20.04)的服务器,已部署 Prometheus 和 Alertmanager(或你熟悉的其它监控工具,如 Zabbix、Nagios 等)。
- 一个钉钉群或企业微信群,有权限添加机器人。
- 已在服务器上安装 curl 用于测试(大部分系统默认已安装)。
如果你还没有监控工具,可以先安装 Prometheus + Node Exporter,本文以 Alertmanager 为例。
若只想快速测试,也可以直接跳过监控工具,用 curl 手动模拟告警。
分步操作:钉钉及企业微信群机器人配置
1. 创建群机器人
- 钉钉:
- 进入目标群 → 点击群设置 → 智能群助手 → 添加机器人 → 选择“自定义(通过Webhook接入)” → 填写机器人名称 → 安全设置选择“自定义关键词”(例如“告警”) → 保存后复制 webhook 地址。
- 企业微信:
- 进入目标群 → 点击群设置 → 群机器人 → 添加机器人 → 自定义名字 → 获取 webhook 地址。
两个平台的 webhook 地址格式类似:
- 钉钉:
https://oapi.dingtalk.com/robot/send?access_token=xxx - 企业微信:
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx
2. 配置 Alertmanager 发送到钉钉/企业微信
创建 Alertmanager 配置文件 alertmanager.yml,添加 webhook receiver。
以下为钉钉示例,企业微信只需修改 URL 和消息格式:
receivers:
- name: 'dingtalk'
webhook_configs:
- url: 'https://oapi.dingtalk.com/robot/send?access_token=你的token'
send_resolved: true
message: '{"msgtype": "markdown", "markdown": {"title": "服务器故障告警", "text": "### 告警详情\n- 告警名称:{{ .Alerts.Firing | len }} 个触发\n- 主机:{{ .GroupLabels.instance }}\n- 告警信息:{{ .Alerts.First.Labels.alertname }}\n- 当前值:{{ .Alerts.First.Annotations.value }}\n- 时间:{{ .Alerts.First.StartsAt \"2006-01-02 15:04:05\" }}"}}'
注意:钉钉 markdown 消息中的 \n 必须为实际换行符,此处为配置文件中的转义写法。
企业微信类似,但消息结构需改为:
{"msgtype": "markdown", "markdown": {"content": "您的告警内容"}}
重启 Alertmanager 使配置生效:
systemctl restart alertmanager
3. 不依赖监控工具的简易脚本方式
如果只想临时或简单发送告警,直接写一条 curl 命令即可:
- 钉钉:
curl -X POST -H "Content-Type: application/json" -d '{"msgtype":"text","text":{"content":"服务器 CPU 超过 90%,请检查!"}}' 你的钉钉Webhook地址
- 企业微信:
curl -X POST -H "Content-Type: application/json" -d '{"msgtype":"text","text":{"content":"服务器 CPU 超过 90%,请检查!"}}' 你的企业微信Webhook地址
将该命令嵌入你的监控脚本或 crontab 计划任务中,当故障条件满足时执行即可。
避坑指南:常见问题与处理
- Webhook URL 泄露风险:webhook 地址包含 token,任何人拿到都可以往群里发消息。务必妥善保管,不要在代码仓库中明文提交。建议通过环境变量或配置管理工具传入。
- 消息内容限制:
- 钉钉:单个消息 body 不能超过 20KB;markdown 消息中的图片必须为公网可访问的 HTTPS 链接。
- 企业微信:文本消息最多 2048 字节;markdown 内容中图片也需 HTTPS,且有域名白名单限制。
- 安全设置不匹配:若钉钉机器人设置了“自定义关键词”,消息中必须包含该关键词(如“告警”),否则消息会被丢弃。企业微信没有关键词限制,但建议将 IP 地址加入白名单。
- Alertmanager 模板语法错误:在配置文件中写 JSON 时容易漏掉转义引号,建议先用
alertmanager --config.file=alertmanager.yml验证配置。 - 频率限制:钉钉和企微对 Webhook 调用都有频率限制(钉钉 20 次/分钟,企业微信 3 次/秒),高并发场景需考虑限流或合并告警。
效果验证:模拟告警确认通知送达
- 手动触发一个告警(例如通过 Prometheus 的
amtool):
amtool alert add alertname=TestCPU instance=你的服务器IP
- 或直接发送一条 curl 命令到 Alertmanager 的 API:
curl -XPOST http://你的服务器IP:9093/api/v1/alerts -d '[{"labels":{"alertname":"test","instance":"192.168.1.1:9100"},"annotations":{"description":"手动测试告警","value":"95%"}}]'
- 等待几秒,查看钉钉/企业微信群是否收到告警消息。如果没有收到,检查:
- webhook token 是否正确
- 钉钉机器人安全设置是否满足(如关键词)
- 服务器能否访问外网(ping oapi.dingtalk.com 或 qyapi.weixin.qq.com)
- Alertmanager 日志:
journalctl -u alertmanager -f
收到消息即表示配置成功。
常见问题解答(FAQ)
Q1:没有安装 Prometheus,能用钉钉接收告警吗?
可以。直接编写 Shell 脚本调用 curl 发送 HTTP POST 请求到 Webhook,结合 crontab 或自定义监控脚本即可实现故障告警。
Q2:钉钉和企业微信可以同时配置吗?
可以。在 Alertmanager 中定义多个 receiver,一条告警规则可同时发送到钉钉和企微(通过 routes 匹配多个接收者)。
Q3:消息中的换行和 Markdown 格式总是不对?
检查转义:在配置文件中 JSON 内的换行需用 \n,且外层双引号需用转义符 \"。建议先用在线 JSON 校验工具验证字符串合法性。
Q4:告警太多刷屏怎么办?
可以利用 Alertmanager 的 group_wait、group_interval、repeat_interval 参数合并告警,减少通知频率。群机器人没有聚合功能,需在发送端控制。
如果你正在配置服务器故障告警推送,建议优先按本文的 Alertmanager 思路搭建,灵活性和扩展性更强。
对于仅需简单通知的场景,直接使用脚本方式更快捷。
若服务器资源有限,可以考虑使用具备正规资质的云服务商(如泽御云,官网 https://www.zeyuyun.com)提供的基础监控与告警插件,进一步简化运维工作。