AI on-call 排障——从被叫醒到修好不慌

凌晨 3 点被叫醒怎么用 AI——分流、列假设、冷静协议、修完沉淀成 runbook。

凌晨 3 点,半梦半醒,手里是一条告警,眼前是 200 行刷屏的日志——这时候你不需要一个聪明的 AI,你需要一个结构化的第二大脑:问对分流问题、按概率给三个假设排序、把你从”先重启服务看看”那种冲动里拽回来。下面这套流程是我第一次值班时希望自己有的版本:步骤短、限制硬、修完做一遍沉淀,让一夜的折腾变成下一位 on-call 不用重历的 runbook 条目。

这篇主要解决什么问题

一套从被叫醒到修好的工作流——用 AI 做分流和假设排序,在高压决策点给明确护栏(什么时候叫醒队友、什么时候直接回滚、什么时候停下接受更长的停机以换更安全的修复)。再加一遍事后沉淀,把 AI 的聊天记录转成 runbook 条目。

这篇适合谁看

任何在 on-call 轮值里的工程师,尤其首次值班的人、没有强 runbook 传统的团队。资深 on-call 用 AI 在长事故里压低认知负担。希望团队 page 处理一致化的技术负责人。

什么时候适合用

线上告警,你是响应人,系统处于降级或未知状态。从没见过的新告警——AI 在不熟悉事故的头 10 分钟最有用。一连串告警,需要分辨哪个是根。

什么时候不建议用

告警里已写明修法的 page(“DB 连接池耗尽——跑 X”)。直接照 runbook。安全事故——升级,不要聊。已知维护窗口期间的 page——先查维护计划。明显是”20 分钟前那次发布弄的”——先回滚,AI 后议。

开工前

  • 让 AI 在你的 on-call 设置里随手可达。手机、笔记本、终端——你最先抓到那个。3 点钟的摩擦能毁掉这套流程。
  • 准备好粘贴缓冲区。你会反复粘告警、日志、指标快照。整套流程都靠你给 AI 够用的上下文。
  • 大致知道你的服务拓扑。AI 调不了你描述不了的东西。“鉴权服务连 Redis 和用户数据库”这种粗略骨架就够起步。
  • 预先承诺冷静协议。在线上敲任何命令之前,深呼吸,把你要做的事告诉 AI。这 5 秒能挡掉大多数”手抖”事故。

具体步骤

  1. 分流。把告警文本和最相关的前 50 行日志贴进 AI。问:“根据这条告警和这些日志,列 3 个最可能的根因按概率排,每个给一条具体诊断检查。先不要给修复。”
    # 典型 Linux 服务的快速取日志
    journalctl -u myservice --since "10 min ago" | tail -200
    # 或 k8s
    kubectl logs deployment/myservice --tail=200 --since=10m
  2. 检查最近变更。在顺假设树往下钻之前,先问:“最近一小时有发布或配置变更吗?“有,多半就回滚。停、回滚、观察。AI 在这一步的作用是提醒你这是最便宜的检查。
  3. 按概率跑假设检查。把结果回报给 AI。“检查 1(Redis 内存)通过——用了 30%。检查 2(慢查询)确认——orders 上的 SELECT 跑 15 秒。“AI 的上下文随真数据增长,不靠猜。
  4. 写操作前的冷静协议。在线上做任何破坏性动作前——kubectl deleteDROPkill、重启——把完整命令贴进 AI 问:“我要在生产跑这条。可能出什么问题?如果它让事情更糟,怎么恢复?“5 秒,常常避免第二个事故。
  5. 决断:继续查还是回滚。查了 15 分钟仍未明、系统在持续降级,回滚通常是对的。AI 能帮你框这个权衡:“症状是 X,回滚成本是 Y,继续查的成本是 Z。要不要回滚?”
  6. 应用修复或回滚。跑动作。看系统。等恢复信号(告警消除、指标回基线)——指标没回不能宣布解决。
  7. 什么时候叫队友:30 分钟还没找到根因、影响多个服务、要做你没做过的破坏性动作、累到想不清。AI 可以建议”考虑升级”,但拍板是你。

凌晨 3 点用得住的分流 Prompt

On-call 告警。我需要分流。

告警:\{粘告警文本\}

最近日志(最近 10 分钟):
\{粘 50-200 行\}

服务上下文:\{1-2 句——这服务干嘛、关键依赖\}

最近活动(最近一小时的发布 / 配置变更,已知就写):
\{粘或 "未知"\}

产出:

1. 3 个最可能根因按概率排。每个给 *一条* 具体诊断检查(命令、看
   哪个指标、搜哪条日志)。先不要写修复。

2. 一句话:"如果还没查最近发布,先查。"

3. 一句话:"查了超过 15 分钟仍未收敛,考虑回滚最近变更。"

不要软化。不要给我三个"可能也是"的应忽略原因。这 3 个假设必须
是你真实的最佳猜测。

质量检查

  • 修复前跑过诊断检查。凌晨 3 点最常犯的错就是跳去修一个从未确认的假设。
  • 任何破坏性命令前都跑过冷静 prompt。无例外,哪怕这条命令你以前敲过。
  • 头 5 分钟内查过最近发布 / 配置变更。多数 page 都追回到”某个东西变了”。
  • 恢复以指标回基线为准,不以”告警消失”为准——告警可能短暂消除但原因不对。
  • 在你定的时间 / 范围阈值内升级。“一个人扛”是 30 分钟事故变成 3 小时事故的方式。

怎么把这流程沉淀下来

  • page 解决后让 AI 把对话总结成 runbook 条目。“把我们的对话转成 runbook 一节:症状、按顺序的诊断步骤、修复、回滚。说人话。“修一修贴进团队 runbook。
  • 分流 prompt 存成可在 10 秒内粘出来的片段。3 点的摩擦是大敌。
  • 维护一份个人”先查这几个”清单——你这个服务的 top 3-5 假设。AI 是通用的;你的服务有具体的反复出现原因。几轮之后你的清单胜过 AI 的通用排序。
  • 下次团队例会评:哪些 page AI 有用,哪些没用?AI 对陌生告警最有用,对已有 runbook 的重复告警最没用。

建议的操作流程

page → 粘告警 + 日志 → AI 给 3 个排序假设 → 查最近发布 → 跑假设检查 1 → 回报 → 确认原因 → 任何破坏性命令前先冷静 prompt → 应用修复或回滚 → 用指标确认 → 把聊天沉淀成 runbook 条目。典型 page 在流程到位时 15-30 分钟从告警到解决。

容易踩的坑

  • 只贴告警不贴日志。AI 分不了流。
  • 跳过”最近发布”检查。多数 page 是最近一小时上的什么东西引起的。
  • 没确认根因就让 AI 提修复。“调大内存上限”对一个错的原因是个好建议。
  • 不跑冷静 prompt 就敲破坏性命令。成本 5 秒,收益偶尔挡掉第二个事故。
  • 因为”应该先理解 bug”而拒绝回滚。事故中先恢复服务,理解放后面。
  • 该叫队友不叫。轮值制度的意义就是一个人不要独自做难事故的第 3 小时。
  • 不把聊天沉淀成 runbook 条目。同样的告警还会响;下一位 on-call 配得上你的笔记。

FAQ

  • AI 给的假设全错怎么办?: 给反证再问。“不是内存(已查),不是最近发布(已查)。重排。“AI 在反证下收敛比在含糊正向 prompt 下快得多。
  • AI 能直接读我的日志 / 指标吗?: agentic 设置(带 MCP 的 Claude Code 之类)能接日志搜索和看板。有用,但确认 AI 在读真实数据不是幻觉。高代价的决断手工粘数据。
  • 能让 AI 在线上直接动手吗?: 不能。AI 建议,你动手。建议和动手之间的 5 秒停顿就是用来挡坏主意的。
  • 太累想不清怎么办?: 叫队友。AI 是思考辅助,不是替代清醒的人。
  • 怎么避免被 AI 带进兔子洞?: 一开始就定 15 分钟计时。15 分钟还在降级且没确认原因,回滚,后续再查。
  • 事后复盘呢?: 用事故复盘工作流。on-call 聊天是复盘最好的输入之一——留着。

相关阅读

标签: #AI 编程 #工作流