一次数据库抖动就能连锁触发上百条告警,把值班同学从床上叫醒。本文介绍炬鲸 OBSERVE 的告警聚合、抑制、静默与分级四道防线,以及如何配置把噪声压到最低。
半夜三点,数据库主从切换引发三十秒抖动。这三十秒里,订单服务超时、支付服务重试、网关 5xx、Redis 连接池告警接踵而至——一条根因,连锁触发两百多条告警。值班同学被电话叫醒后,先花十分钟从告警洪流里翻出第一条真正的报错,再花二十分钟逐一关闭无关告警。
问题不在“告警太多”,而在“告警没有组织”。可观测平台的告警模块,价值不只是“能发出来”,而是“发出来的每一条都值得看一眼”。
炬鲸 OBSERVE 用四层机制把噪声挡在值班人员手机之外:
告警规则用 YAML 声明式配置,下面这段把“订单服务错误率大于 5%”的告警按错误码聚合,并抑制下游支付服务的超时告警:
alert_rules:
- name: order-service-error-rate
expr: error_rate(service='order-service', window='5m') > 0.05
severity: P1
group_by: [service, error_code]
group_wait: 30s
inhibit: [pay-service-timeout]
notify: [wecom-oncall]
再加一条根因告警:数据库连接池耗尽时,订单、支付、网关的告警全部被抑制,最终只推一条 “DB connection pool exhausted” 给值班同学。告警量从两百条降到一条,on-call 的起床成本也降到最低。
group_by 先按 service,稳定后再细化到 error_code;告警的价值是“精准叫醒正确的人”,不是“证明系统在报警”。