Webhook 接收器是什么
webhook 接收器把告警以 JSON 的形式 POST 给自建中继服务,常见形态是钉钉、飞书、企业微信群机器人的网关。Alertmanager 送出的 payload 包含 groupKey、commonLabels、commonAnnotations 与 alerts 明细数组,中继从中取出需要展示的字段再转发。它比邮件灵活、比电话便宜,但幂等、限速与失败退避都要自己实现,中继本身也因此成为需要被监控的组件。
基本信息
| 配置位置 | receivers[].webhook_configs,含 url、send_resolved、max_alerts |
|---|---|
| payload 版本 | 常见 version 为 4 |
| 关键字段 | groupKey、status、commonLabels、commonAnnotations、alerts、externalURL |
| 投递重试 | 非 2xx 视为失败,按退避策略重试 |
| 权限要求 | 中继服务需能被 Alertmanager 访问 |
典型使用场景
- IM 群通知:把告警渲染成卡片发到值班群,并带上跳转看板的链接
- 工单系统:中继把告警转成工单或事件记录,保留可追溯的处置链条
- 统一网关:多个监控源共用一个中继做统一渲染与限速
- 定制路由:按标签把告警投递到不同团队的不同群或队列
- 二次加工:转发前补充值班人、变更单号等上下文字段
中继实现要点
- 幂等:同一 groupKey 在短时间内重复投递要去重,避免刷屏
- 退避:返回非 2xx 让 Alertmanager 记录失败并重试,不要静默吞掉
- 截断:用 max_alerts 控制单次携带条数,超出部分按数量截断
- 状态区分:send_resolved 打开时恢复事件也走同一地址,渲染要区分
- 自监控:中继要有失败率与延迟指标,否则通道故障无人知晓
payload 关键字段
payload 关键字段
{
"version": "4",
"status": "firing",
"receiver": "im",
"groupKey": "{}/{severity=\"critical\"}:{alertname=\"HighErrorRate\"}",
"commonLabels": { "alertname": "HighErrorRate", "service": "order-svc" },
"commonAnnotations": { "summary": "错误率超过 5%" },
"externalURL": "http://am.example.com:9093",
"alerts": [
{ "status": "firing",
"labels": { "instance": "10.0.1.5" },
"annotations": { "summary": "当前值 12%" },
"startsAt": "2026-10-12T10:07:00Z",
"endsAt": "0001-01-01T00:00:00Z",
"generatorURL": "http://prom.example.com/graph?g0.expr=...",
"fingerprint": "a1b2c3d4e5f6a7b8" }
]
}payload 字段读法
| 字段 | 含义 | 用途 |
|---|---|---|
| groupKey | 分组标识 | 幂等去重与日志关联的关键 |
| status | firing 或 resolved | 决定渲染哪种模板 |
| commonLabels | 组内公共标签 | 渲染标题与路由判断 |
| alerts | 告警明细数组 | 逐条展开细节内容 |
| generatorURL | 回到规则或图表 | 点击跳转定位现场 |
| fingerprint | 告警指纹 | 跨投递做去重 |
中继是告警链路上唯一由自己维护的一环,必须给它配可用性与投递失败率告警,否则最容易出现「看着有监控、实际没人收到」的隐性故障。