Prometheus 告警路由分发:按不同应用模块配置

作者:袖梨 2026-07-12
实现Prometheus告警按应用模块分发的关键是Alertmanager路由配置与告警规则中统一打标module标签,通过match匹配该标签并路由至对应receiver,同时差异化设置group_by和通知渠道。

要实现 Prometheus 告警按不同应用模块分发,关键不在 Prometheus 本身,而在 Alertmanager 的路由配置和告警规则中对模块标签的统一打标。核心逻辑是:先让每条告警带上明确的模块标识(如 module: "user-service"),再在 Alertmanager 中用 matchmatch_re 匹配该标签,把告警导向对应 receiver。

在告警规则里打上模块标签

模块信息必须由你主动注入到告警的 labels 字段中,Prometheus 不会自动识别“应用模块”。常见做法有:

  • 按服务名打标:labels: {module: "order-service", env: "prod"}
  • 按业务域打标:labels: {module: "payment", team: "finance"}
  • 结合命名空间与工作负载(K8s 环境):labels: {module: "{{ $labels.pod }}"}(需配合 relabel_configs 或 recording rule 提前提取)

注意:所有标签值应保持简洁、规范、无空格,避免正则匹配失败或路由失效。

用 route 树按 module 标签做分发

Alertmanager 的 route 是树形结构,支持嵌套匹配。例如:

  • 根 route 默认发给值班群(兜底)
  • 子 route 匹配 module: "user-service" → 发给 user-team 的钉钉机器人
  • 另一子 route 匹配 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 对应一个模块团队习惯的通讯方式:

  • 钉钉/企微:用 Webhook 配置机器人地址,支持关键词@、消息卡片
  • 邮件:按 module 设置不同收件人列表,可用 SMTP 模板插入模块负责人
  • 电话/短信:对高危模块(如支付、风控)启用,通过第三方网关触发
  • Slack/PagerDuty:适合已有 SRE 流程的团队,可绑定 on-call schedule

receiver 名称必须与 route 中引用的完全一致,且每个 receiver 至少配置一种通知方式(如 webhook_configsemail_configs)。

相关文章

精彩推荐