实现Prometheus告警按应用模块分发的关键是Alertmanager路由配置与告警规则中统一打标module标签,通过match匹配该标签并路由至对应receiver,同时差异化设置group_by和通知渠道。
要实现 Prometheus 告警按不同应用模块分发,关键不在 Prometheus 本身,而在 Alertmanager 的路由配置和告警规则中对模块标签的统一打标。核心逻辑是:先让每条告警带上明确的模块标识(如 module: "user-service"),再在 Alertmanager 中用 match 或 match_re 匹配该标签,把告警导向对应 receiver。
模块信息必须由你主动注入到告警的 labels 字段中,Prometheus 不会自动识别“应用模块”。常见做法有:
labels: {module: "order-service", env: "prod"}
labels: {module: "payment", team: "finance"}
labels: {module: "{{ $labels.pod }}"}(需配合 relabel_configs 或 recording rule 提前提取)注意:所有标签值应保持简洁、规范、无空格,避免正则匹配失败或路由失效。
Alertmanager 的 route 是树形结构,支持嵌套匹配。例如:
module: "user-service" → 发给 user-team 的钉钉机器人module: "auth-service" → 发给 security-team 的企业微信match: {module: "payment", env: "prod"} 单独路由生产支付告警示例片段:
route: receiver: default-pager group_by: [alertname, module] routes: - match: module: user-service receiver: user-dingtalk - match: module: auth-service receiver: auth-wecom - match_re: module: ^(order|payment|refund)-service$ receiver: finance-webhook
不同模块的告警密度和响应节奏不同,group_by 和间隔参数需差异化设置:
group_by: [alertname, instance] + group_interval: 1m
group_by: [alertname] + group_wait: 10s(更快触达)group_by 包含 module,否则 user-service 和 order-service 的 CPU 告警可能被合并成一条每个 receiver 对应一个模块团队习惯的通讯方式:
receiver 名称必须与 route 中引用的完全一致,且每个 receiver 至少配置一种通知方式(如 webhook_configs 或 email_configs)。