告警太吵没人看,太松会漏报。本文拆解炬鲸 OBSERVE 告警引擎的四种告警类型、抑制去重升级机制与通知闭环,并给出三个常见误区,让每条告警都可行动。
监控系统最常被吐槽的不是“抓不到问题”,而是“半夜三点连发几十条短信”。阈值配松了漏报,配紧了误报,运维最后要么关掉告警,要么麻木地点“已读”,真故障反而被淹没在噪声里。一个典型例子:某服务错误率白天稳定在 0.1%,但凌晨流量低谷偶发超时,如果阈值按全天平均值来设,这个时段的问题永远触达不到,值班的人睡一觉就错过了一次真实劣化。炬鲸 OBSERVE 的告警引擎围绕三个目标设计:漏报可控、误报可收敛、处置可追踪。
第一种是阈值告警:CPU、内存、错误率、P99 延迟等指标超过设定值即触发,适合资源类问题。第二种是关键字告警:日志流里出现指定 pattern(如 OutOfMemoryError、连接池耗尽、支付回调持续失败)就触发,适合无法用指标表达的业务异常。第三种是同比/环比告警:和上周同期或上一时段对比,波动超过一定幅度才告警,能抓住“没到阈值但明显异常”的隐性故障,比如周末流量曲线悄悄偏移。第四种是复合告警:多个条件用 AND/OR 组合,例如“错误率大于 5% 且 QPS 未下降”才触发,减少单指标抖动带来的误报。四种类型都支持按严重程度分级(提示、警告、严重、致命),不同级别走不同通知渠道。
告警的真正问题在于“风暴”——数据库一挂,下游几十个服务同时报“连接超时”,运维被刷屏。炬鲸 OBSERVE 用三层机制收敛:
计划内发布、维护窗口可以用静默规则整体跳过,避免发布时被自己的告警轰炸。一条规则配置长这样:
alerts:
- name: order-service-error-rate
metric: http_error_rate
condition: "> 0.05"
window: 5m
dedup: 10m
suppress_by: [mysql-down]
escalate_after: 15m
notify: [dingtalk, webhook]
告警支持企业微信、钉钉、飞书、邮件、Webhook、短信等渠道。每条告警都带 trace id 和日志快照,点开链接直接跳到对应调用链,不用再手动搜日志。处理人、处理时长、处理结果全部记录,形成可追溯的处置闭环,也为后续复盘和 SLO 统计提供数据。告警与 SLO 打通后,能直观看到错误预算的消耗速度,“到底该不该叫醒这个人”从拍脑袋变成看数据。
先别急着配一堆阈值。建议先只对“用户可见的错误率”和“核心依赖可用性”配告警,跑一周观察误报率,再逐步收紧。告警的价值不在于数量,而在于每一条都能让人做出动作。