本节摘要:告警响后的三分钟最值钱,而多数团队在这三分钟里在做随机搜索:翻日志、问群、重启试试。本节把第 5.1 节的四类故障各展开成一条排障路径,合成一棵从告警直达根因的决策树:每个节点只回答一个是非题("llm.call 段占比高吗""当天有变更吗"),每个分支指向下一个视图或动作——先看什么(span 树、三本账、TopN、版本标签)、下一步往哪走。然后是一则完整案例复盘:某客服功能成本提醒线告警,从 15:10 告警到 15:35 确认根因(新 prompt 版本导致工具输出解析失败、工具层无上限重试形成循环),全程只用前半立好的四件工具——span 树、三本账、TopN、版本标签。最后给无责复盘五问模板(Google SRE 方法论,社区公认):时间线、根因、五问、行动项四件套。
告警(已按 5.1 归类) │ ├─ 慢(P95/TTFT 越带) │ ├─ llm.call 段占比高? │ │ ├─ 是 + TTFT 恶化 ──▶ 上游容量/排队 ──▶ 切轻量模型、限流排队(7.2) │ │ └─ 是 + 生成段变长 ──▶ 输出变长 ──▶ 查输出长度信号与 max_tokens │ ├─ retrieve 段占比高?──▶ 检索慢 ──▶ 降篇数、查索引 │ └─ tool 段占比高?──▶ 工具超时/重试 ──▶ 查 tool span 状态码(责任层:工具) │ ├─ 错(错误率/429/5xx 越线) │ ├─ 多模型同时错?──▶ 供应商区域故障 ──▶ 切备用、看状态页做旁证 │ ├─ 只有 429?──▶ 限流额度打穿 ──▶ 查 TPM/RPM 用量(7.2)、分池扩额 │ └─ 单点错且伴随发布?──▶ 编排/网关变更 ──▶ 回滚、查网关是否剥 usage │ ├─ 坏(裁判分/点踩率/四信号异动) │ ├─ 当天有变更?(prompt/模型/检索库三方版本标签,2.2) │ │ ├─ 有 ──▶ 版本回归 ──▶ 回滚最近变更(最快路径) │ │ └─ 无 ──▶ 模型快照静默漂移?──▶ 抽同时段样本对比、联系供应商 │ └─ 拒绝率↑ + 新主题份额↑?──▶ 输入分布变化 ──▶ 补知识库,不回滚 │ └─ 贵(三线告警/TopN 异常) ├─ 三本账哪本涨?(3.1 口径) │ ├─ 账二涨 ──▶ 输出失控/循环 ──▶ TopN 会话 → trace 看 pipeline 重复模式 → 熔断 │ ├─ 账一涨 ──▶ 输入膨胀 ──▶ 查多轮历史/few-shot/记忆注入 │ └─ 账三变 ──▶ 缓存失效 ──▶ 查前缀改动、命中率曲线 └─ 单会话集中?──▶ agent 循环或刷量 ──▶ 熔断 + 限速;分散涨 ──▶ 版本回归或用量增长
树的用法三条:节点只问是非题,不问开放式问题("为什么会慢"是下钻之后的事);每走一步先看视图再动手(视图 = span 树、三本账、TopN、版本标签);"当天有变更吗"是全树最高杠杆的问题——三方版本标签(第 2.2 节)在手的团队,坏答案类故障的定位通常不超过十分钟。
背景(示意案例,数字为示意):客服问答功能,日均 12 万次调用,预算三线已按第 3.3 节配好;周三 14:30,prompt v7 上线(工具输出的 JSON 格式约定变更,灰度 100%——这是伏笔)。
时间线(示意) 15:10 提醒线告警:客服功能消耗速率达日预算 1.9 倍(3.3 消耗速率法) 15:12 按分类表归"成本爆炸";开 TopN 会话视图 → 会话 s-88xx 已耗 61,000 token(常态约 6,000) 15:15 拉 s-88xx 的 trace:pipeline 层 11 轮 llm.call+tool 循环, 每轮 tool 返回 200 但编排层日志有"解析失败,重试"×11 15:17 三本账核对:账二暴涨(每轮都重新生成完整过程说明) 15:18 版本标签核对:s-88xx 起始于 14:47,prompt_ver=v7 ── 与上线时间对齐 15:20 决策:v7 全量回滚到 v6;熔断 s-88xx 与同类 3 个会话(SessionCap 复位流程) 15:26 消耗速率回落至 1.1 倍;漂移面板输出长度均值开始回归 15:35 根因确认:v7 改了 JSON 字段名,工具返回仍是旧字段; 编排层解析失败后无上限重试 → agent 视角"工具没成功"继续循环
根因链:变更(v7 字段改名)→ 解析失败(编排层)→ 无上限重试(编排层)→ 循环烧 token(账二)。注意责任层判定:第一嫌疑是"模型变笨了",但 span 树显示每轮 llm.call 本身正常——根因在编排侧,不在上游。这条判定救了团队两小时的"换模型试试"弯路。
复盘会(次日,无责):只对事不对人,产出四件套——时间线(上文)、根因(如上)、五问(下文模板)、行动项(下表)。
| 行动项 | 对应能力清单 | 验收方式 |
|---|---|---|
| 工具解析失败计入错误率并告警(不再静默重试) | 第 18 问 | 构造一次解析失败,5 分钟内告警 |
| 编排层重试上限 3 次 + 指数退避 | 第 16 问 | 压测循环场景,单会话 token 有上界 |
| prompt 变更先灰度 5% 观察 30 分钟再看量 | 第 17 问 | 变更流程走查 |
| 会话熔断阈值从 8 万调到 3 万 token | 第 16 问 | 熔断演练 |
Google SRE 的无责复盘(blameless postmortem,社区公认方法论)落到 LLM 应用就是五个问题:
⚠️ 两个反模式:把复盘开成追责会(下次没人再留真时间线);把行动项写成"加强意识"(不可验收 = 不会发生)。
至此,从信号到根因的完整链路闭环了。但全书立过的零件还散落在各章:tracer 在第 2 章、账本在第 3 章、探针在第 4 章、告警线在第 3.3 节。第 6 章做总装——一个约 170 行的纯标准库脚本,让三支柱真正跑在一个进程里。