日期:2026-08-17
我们线上出过一次数据库慢查询,告警群里七八个人同时被叫起来,每个人盯着自己那块,没人牵头定方案,有人在查应用日志,有人在盯中间件,还有人跑去问是不是网络问题。恢复花了四十分钟,业务方在群里骂了一路。更尴尬的是事后复盘,写出来的结论是加强监控、优化告警这种谁都不得罪的废话,同样的坑下个月又踩了一遍。我们意识到,故障不可怕,可怕的是没人把信息拢起来。
现在故障一来,先是一组 Agent 接管信息面。告警汇聚 Agent 把各系统告警去重、定级,合成一条总告警。影响面分析 Agent 顺着调用链和监控,估出这次影响的是哪些服务、多少用户、什么核心指标掉了。处置建议 Agent 根据历史预案和知识库,给出几步可操作的建议,标出哪步该谁做。进展同步 Agent 在群里按时播报,让所有人知道现在到哪了。复盘归档 Agent 在恢复后自动把时间线、决策、根因整理成一份能用的复盘。
首先要解决的是告警噪声,一次故障能炸出上百条告警,我们按服务和时间窗聚类,只留根因相关的几类,其他的折叠。接着要解决的是影响面评估,不能拍脑袋,我们接了调用链和核心指标,自动算受影响的服务树和用户体验跌幅,给个量化范围。还有一块难啃的是处置协同,建议不能只给一条,要按角色分派,谁负责切流、谁负责扩容、谁负责通知,责任清晰才不会群里互相等。复盘那块,我们强制要求附时间线和根因,不允许写加强监控这种空话,模板就卡死。
案例片段(已脱敏): 告警汇聚与影响面分析配置片段(字段示意):
incident_agent: alert_cluster: { window: 5m, by_service: true } impact: scope: service_tree user_drop_estimate: true suggest: { by_role: [sre, dba, notify] } postmortem: require: [timeline, root_cause] forbid_phrase: ["加强监控", "优化告警"]一次实战:数据库慢查询触发 120+ 条告警,聚类后归为 3 类根因相关;影响面估出 2 个核心服务、约 8% 用户受影响;处置建议按角色分派,恢复时长由 40 分钟降到 12 分钟。
平均恢复时长从四十分钟量级降到十几分钟,主要是有人把信息拢起来牵头了。告警噪声下降明显,值班人不再被几十条重复告警淹没。处置协同效率提升,角色分派让该干活的人直接干活,不再互相等。复盘采纳率上去是因为模板卡死了空话,写出来的东西真能指导下次。要承认,影响面估算最早那版偏保守,把没影响的也算进去了,业务方反而更慌,后来调了范围才算准。
故障应急这事,我现在的看法是,技术定位反而不是最难的,难的是一群人别各看各的。Agent 先把告警聚起来、把影响面说清楚,比任何高超的定位工具都救命,因为它解决的是人的协同。复盘模板卡死空话这条,是我们被同一坑踩两次之后下的狠手,效果立竿见影。影响面估算我后来觉得宁可准一点也别大,算大了制造恐慌,算小了漏了真影响,这个度得靠几次实战磨。这套后来我们接到其他几条业务线也跑得动。
故障应急这事,技术定位不是最难的,难的是一群人别各看各的。Agent 先把告警聚起来、把影响面说清楚,比任何定位工具都救命,因为它解决的是人的协同。我们那次四十分钟恢复,一半时间耗在没人牵头、各查各的。复盘模板卡死空话,是被同一坑踩两次之后下的狠手,效果立竿见影,写出来的东西真能指导下次。影响面估算我后来觉得宁可准一点也别大,算大了制造恐慌,算小了漏真影响,这个度靠几次实战磨出来。现在这套接到其他几条业务线也跑得动,说明协同的抽象是对的。我们把历史复盘沉淀成预案库,下次同类故障直接调得出处置步骤,不那么依赖某个人临场发挥。告警聚类窗口我们调过,太短聚不干净,太长又慢,最后五分钟按服务聚合最顺。处置建议按角色分派,谁切流谁扩容谁通知清清楚楚,群里不再互相等。故障不可怕,怕的是信息散成一地没人收,Agent 就是把信息收口的那只手,我们是用一次长恢复换来的清醒。预案库我们按故障类型分了类,数据库类、中间件类、依赖类各一套,新值班人先读对应类再上岗。复盘归档我们接了知识库,历史复盘能直接被检索,类似故障一来先弹历史。协同这套我们打算接到更多业务线,已经在谈了。
预案库我们按故障类型分了类,数据库类、中间件类、依赖类各一套,新值班人先读对应类再上岗。复盘归档接了知识库,历史复盘能被直接检索,类似故障一来先弹历史,不用再从头查。故障不可怕,怕的是信息散成一地没人收,Agent 就是把信息收口的那只手,这清醒是用一次长恢复换来的。我们把进展同步 Agent 的播报频率也调过,太频繁刷屏,太慢又没人知道进度,最后定成每三分钟一条最稳。