拆解 OBSERVE 告警引擎的三层规则结构、静默期、重复抑制与告警风暴收敛机制,附 YAML 配置示例和落地建议,帮值班团队告别告警噪音。
值班的人最怕的不是没有告警,而是告警太多。一个服务抖动,几十台实例同时超时,如果每个实例都发一条告警,手机能被打爆。更糟的是,告警一旦被证明是误报,下次真故障来的时候,人会本能地选择忽略。这种「狼来了」效应会累积:每一条噪音告警都在透支整条通知渠道的可信度,直到真正的故障被划过去没人看。
告警系统的价值不在于「能发多少条」,而在于「该发的那条有没有发对、有没有发出去」。OBSERVE 的告警引擎围绕这一条设计:规则可配置、触发有依据、发送有收敛。
一条告警规则由三部分组成:
一条 YAML 规则长这样:
alert:
name: order-service-5xx
source: metrics
query: 'sum(rate(http_5xx{service="order-service"}[5m])) / sum(rate(http_total{service="order-service"}[5m]))'
condition: "> 0.01"
for: 5m
labels: { severity: P2, team: order }
notify: [wecom, webhook]
for: 5m 是关键:条件持续满足 5 分钟才触发,短时间抖动会被自动过滤,避免毛刺误报。
两个容易忽略但极有用的配置:
阈值类型直接决定告警有多吵,常见三种:
流量稳定的服务,用比率(错误率)作默认值通常最稳;只有「出现一次就是事故」的场景(比如结算任务失败)才用绝对计数。
这是告警引擎最值钱的部分。当一个故障影响 50 个实例时,引擎会:
team/service/region 等标签把告警聚成一组。结果是:一条可行动的告警,而不是五十条一模一样的。
owner 和 runbook(处理手册链接),接到告警的人知道该找谁、该做什么。