← 返回题目列表

分布式系统告警应该如何设计,如何避免告警风暴?

高频 中等 第 5 / 26 题 更新于 2026/07/28
告警告警风暴SLO可观测性

简化版

告警设计要围绕用户影响和服务目标,而不是所有指标一异常就报警。优先对错误率、P99 延迟、可用性、核心业务成功率、资源饱和度设置告警,并区分严重级别、持续时间和影响范围。

避免告警风暴要做聚合、抑制、去重、分级、依赖关联和恢复通知。根因服务已经告警时,下游大量连带错误不应该把所有人都吵醒。

详细版

好的告警应该具备可行动性。收到告警后,值班人员应该知道哪个服务、哪个接口、什么指标、影响范围、从什么时候开始、可能关联什么变更。如果告警只是“CPU 高了一下”但不需要行动,长期会让团队对告警麻木。

告警阈值要结合业务和 SLO。比如核心下单接口错误率超过 1% 持续 5 分钟,比某台机器 CPU 瞬间 90% 更值得报警。资源告警也要关注饱和度和持续时间,而不是瞬时波动。

告警风暴通常发生在依赖故障或大面积网络问题时。要通过告警聚合、根因抑制、同类合并、静默窗口、升级策略和告警路由降低噪音,让值班人员优先处理真正的根因。

完整版教学

一、告警的目标是驱动行动

告警不是为了证明系统有很多指标,而是为了让人在需要介入时及时介入。一个好告警应该回答:发生了什么、影响多大、谁负责、应该怎么查。

如果一个告警经常没人处理,或者处理动作永远是“观察一下”,它可能就不是好告警。

二、优先围绕用户影响设计

最重要的告警通常来自用户可感知指标:可用性、错误率、延迟、核心业务成功率。比如登录失败率、下单成功率、支付回调延迟,这些比单个容器 CPU 抖动更直接。

资源告警也重要,但它通常是原因或风险信号。CPU 高不一定影响用户,错误率升高才说明用户已经受影响。告警优先级要体现这一点。

三、SLO 和错误预算

SLO 是服务目标,比如 99.9% 可用性、P99 延迟小于 300ms。基于 SLO 告警比拍脑袋阈值更科学。

错误预算表示在目标范围内允许的失败量。如果错误预算消耗很快,就应该告警,因为它说明当前失败速度可能破坏服务目标。

这种方式能减少无意义告警,把注意力集中在真正影响服务承诺的问题上。

四、告警要有持续时间和窗口

瞬时波动不一定需要报警。比如 CPU 一秒钟冲高、接口偶发一个 500,都可能是正常噪音。告警通常要设置持续时间或滑动窗口。

例如“5 分钟内错误率超过 2% 且请求量大于一定阈值”比“出现一个错误就告警”更合理。请求量门槛也重要,否则低流量接口一个请求失败就变成 100% 错误率,会产生误报。

五、告警风暴的来源

分布式系统有依赖关系。一个数据库故障,可能导致几十个服务报错;一个注册中心异常,可能导致大量服务发现失败。如果每个服务都独立报警,值班人员会被淹没。

告警风暴会带来两个问题:真正根因被噪音掩盖,团队对告警疲劳。解决它需要关联和抑制。

六、如何抑制和聚合

常见手段包括:

  1. 去重:同一服务同一指标短时间只报一次。
  2. 聚合:同一根因或同一集群问题合并成一条告警。
  3. 抑制:上游依赖已告警时,下游连带告警降低优先级。
  4. 分级:P0、P1、P2 对应不同通知方式。
  5. 静默:发布窗口或已知维护期间设置静默。
  6. 升级:长时间无人确认再升级通知。

这些机制让告警系统更像调度系统,而不是喇叭。

七、面试回答建议

回答时可以说:告警要围绕用户影响和 SLO,指标要有持续窗口和请求量门槛,告警要可行动。避免风暴靠去重、聚合、抑制、分级和依赖关联。

再补充告警内容要包含服务、接口、指标、当前值、阈值、影响范围、排查链接和 Runbook,这会很加分。

八、常见追问和落地边界

常见追问是告警应该通知谁。告警路由要按服务 owner、严重级别和值班表分发。平台问题通知基础设施团队,业务成功率问题通知业务 owner,跨团队故障需要升级到统一值班协调。

另一个落地边界是每条高优先级告警都应该有 Runbook。Runbook 至少包含指标含义、常见原因、排查入口、应急动作和回滚方式。没有 Runbook 的告警,值班人员容易临场猜,恢复时间会变长。

告警还要区分症状告警和原因告警。症状告警直接反映用户影响,比如错误率、延迟、成功率;原因告警反映可能原因,比如 CPU、连接池、磁盘、GC。值班体系里通常优先响应症状告警,再用原因指标定位。只靠原因告警容易误报,只靠症状告警又可能定位慢,两者需要配合。

恢复通知也很重要。告警恢复后要通知相关人员,并记录持续时间。否则团队只知道问题发生,不知道是否恢复,也无法统计 MTTR、告警准确率和故障影响时间。告警系统本身也需要持续治理,定期清理低价值告警。

九、常见误区与追问

这道题要紧扣「告警设计」本身回答,不能把它混成泛泛的可观测性套话。面试官通常会沿着“为什么需要、流程怎么走、失败怎么兜、代价是什么”继续追问,所以回答要覆盖日志、指标、追踪、上下文传播、采样、告警和排障闭环。

回答层次要讲清的内容容易漏掉的边界
核心结论告警设计要围绕用户影响、SLO、错误预算和可行动性,而不是把所有指标阈值都发给人不要停在名词解释
流程机制定义 SLO 和核心指标 -> 设置多窗口阈值 -> 聚合相同故障 -> 通知负责人 -> 执行处置预案 -> 复盘优化规则要说清触发点、状态变化、确认点和失败兜底
工程取舍接口错误率连续 5 分钟超过 1% 比 CPU 瞬时 80% 更接近用户影响,也更适合叫醒值班同学可观测性不能替代稳定性设计,它用额外采集、存储和分析成本换更快定位问题
告警设计 面试拆解:
1. 定义 SLO 和核心指标
2. 设置多窗口阈值
3. 聚合相同故障
4. 通知负责人
5. 执行处置预案
6. 复盘优化规则

记忆钩子:先给结论,再拆流程,再讲数字例子和失败边界;回答「告警设计」时要围绕题目问法收束,不要把相邻概念堆成一段没有重点的名词清单。

  • 误区:告警越多越安全。 告警过多会造成疲劳,真正事故反而被淹没。
  • 误区:CPU 高就一定要告警。 资源指标要结合错误率、延迟和饱和度判断用户影响。
  • 误区:告警只要发出来就完成了。 告警必须可定位、可归属、可处置。
  • 追问:什么是可行动告警? 收到后能明确判断影响、负责人和下一步动作。
  • 追问:如何减少告警噪声? 聚合、抑制、分级、多窗口燃尽率和依赖根因关联。
  • 追问:告警和监控区别? 监控记录状态,告警是在状态偏离目标且需要动作时通知人或系统。

十、加强记忆

告警像消防警报,不是烟雾传感器一抖就全城拉响。真正好的告警是少而准,能把人叫醒去处理对用户有影响的问题。

告警设计的核心是可行动、可分级、可抑制、可追踪。