2026年5月

故障复盘是 SRE 的核心活动。但很多公司的复盘开成了"找责任人大会",效果反而是负的。本文是我组织过 30+ 次复盘的总结。

反模式:上来就问"谁的责任"

最常见也最毁文化的开法。一旦定责,大家就开始:
- 推诿(不是我)
- 隐瞒细节
- 不愿暴露真实问题

下次出事,没人敢主动暴露。

正确:blameless 复盘

铁律:对事不对人

具体做法:
- 不出现具体人名,只说"操作人"、"开发"、"值班"
- 不评价"做得好/不好",只复盘"发生了什么"
- 重点是"如果再来一次怎么不踩这个坑"

标准议程(90 分钟)

1. 时间线(30 分钟)

按分钟级别列出所有事件:

14:32 - 监控告警 "API 5xx > 5%"
14:33 - 值班 A 收到告警,开始查 dashboard
14:35 - 发现是 db-1 CPU 跑满
14:38 - 重启 db-1 失败
14:42 - 切到 db-2 (slave 提升)
14:45 - 业务恢复

时间线要细到分钟。先列事实,不下结论。

2. 影响范围(15 分钟)

  • 多少用户受影响
  • 业务损失(订单数、收入)
  • 持续时长

量化的目的:知道下次值得花多大力气避免。

3. 根因分析(30 分钟)

用 5 Whys:

Why 1: 为啥 5xx 增多?→ 因为 db-1 CPU 满
Why 2: 为啥 CPU 满?→ 因为有个慢查询
Why 3: 为啥慢查询出现?→ 因为新发的代码没加索引
Why 4: 为啥没加索引?→ 因为 review 没看出来
Why 5: 为啥 review 看不出?→ 因为没 SQL 静态分析工具

根因往往不是"操作失误",是"流程或系统没有兜住"。

4. Action items(15 分钟)

每个 action 必须有:
- 具体行为(不要"加强 review"这种空话)
- 负责人
- deadline
- 验收标准

例:
- ✅ "运维平台加 SQL 静态分析 plugin,未使用索引的 SQL 不允许 merge。@张三,2 周内完成。"
- ❌ "加强代码 review。@团队。"

几条铁律

别开晚于事故 1 周

记忆模糊 + 当事人调岗,越往后越没价值。

不超过 8 人

人多了变成讨论会。核心是:当事人 + 直接相关方 + 主持人。

主持人不是当事人

否则容易自我辩护。主持人最好是无利害关系的第三方。

一定要写文档

口头复盘等于没复盘。文档至少包含:
- 时间线
- 影响范围
- 根因
- Action items 和进度

存到 wiki,下次类似故障第一时间找出来对照。

文化建设

复盘文化好不好,看一个指标:有人主动暴露"差点出事"吗?

  • 如果有,说明大家信任"暴露问题不会被骂"
  • 如果没有,复盘文化是死的

我们公司有个机制叫"近失"(near miss)报告——你没造成故障但差点造成的,写下来给团队学,奖励而非惩罚。

一个反例

我之前公司有次大故障,定责到一个新员工。他后来辞职了。3 个月后类似故障再发——因为根本问题(缺监控)没解决,新员工只是触发器。

如果当时不定责而是修流程,第二次故障就不会发生。

几个 action 经常被忽视

  1. 更新 runbook:故障定位过程里发现的"哪个步骤花了 10 分钟才查到",写进 runbook 下次 1 分钟
  2. 加监控:被告警发现的故障是"还行的",被用户投诉发现的是"灾难"。每次复盘看监控覆盖
  3. 故障演练:写到 action 里就排进季度演练计划,否则永远不会做

教训:复盘不是要"惩罚谁",是要让系统变得"傻瓜也能正确操作"。

2026 年了,AI 编程工具基本能用了,但选型依然是个事。本文按我作为基础设施运维工程师的实际使用场景做对比,不站队,给场景化建议。

候选工具

  • Claude Code:Anthropic 出的 CLI Agent,目前能力最顶
  • opencode:开源 Agent CLI,模型可换
  • Cursor:VSCode fork,IDE 集成最好
  • Continue:VSCode 插件,自托管友好
  • Codex CLI:OpenAI 出的 CLI Agent,绑 ChatGPT 订阅

运维特有的需求

跟纯写代码的开发不一样,运维有几个特殊需求:

  1. 能跑命令:不只是写脚本,要能 kubectl apply / ceph -s
  2. 能 SSH 到远端机器:不是所有事都在本地
  3. 能持久化"集群上下文":每次都要解释一遍 cluster 信息很累
  4. 谨慎的破坏性操作确认:误删 PVC 是要命的事
  5. 多机/多集群并发能力:批量巡检场景

实测对比

Claude Code

  • ✅ 工具用得最聪明,会主动 ls / grep 摸清状况
  • ✅ Skills 体系适合封装运维 SOP(见我另一篇)
  • ✅ Bash 工具能配 sandbox(命令白名单),生产可用
  • ❌ 没有 Pro 订阅给第三方工具用的口子,重度用就是按 token 烧
  • ❌ 多机并发要自己拼脚本

适用:日常单集群运维、写 IaC、做架构设计

opencode

  • ✅ 开源,model 可换(甚至能接自部署 Llama)
  • ✅ 配合 Hermes-agent 能省钱
  • ✅ provider 抽象好,切模型不痛苦
  • ❌ tool use 稳定性不如 Claude Code,复杂任务偶尔抽风
  • ❌ skill 体系不如 Claude Code 成熟

适用:注重成本、想自托管、能容忍偶尔抽风的场景

Cursor

  • ✅ IDE 体验最好,diff 视图直接接受拒绝
  • ✅ codebase 索引强,问"X 在哪用"特别准
  • ❌ 在终端跑命令的能力一般,不适合"做事"
  • ❌ 服务器上 SSH 干活用不了

适用:本地写代码 / 写 manifest YAML / 写 ansible playbook

Continue

  • ✅ 完全开源,能接私有模型
  • ✅ 配置全 yaml,纯 Vim/IDE 玩家舒服
  • ❌ Agent 能力一般,更像"加强版补全"
  • ❌ tool ecosystem 弱

适用:合规要求严格、必须自托管、用法偏 inline 补全的团队

Codex CLI

  • ✅ GPT-5.x 推理强,复杂调试好用
  • ✅ ChatGPT 订阅可用
  • ❌ tool use 设计不如 Claude Code 优雅
  • ❌ 生态比较封闭

适用:已有 ChatGPT 订阅、习惯 OpenAI 风格的人

我自己的组合

不要相信"一个工具搞定一切"。我现在的栈:

  • 服务器上日常运维:Claude Code,重度用
  • 本地写 Terraform / Ansible / K8s YAML:Cursor
  • 跑小批量自动化、试新模型:opencode + Hermes
  • 临时跑个想法、不想配环境:claude.ai 网页版

成本:每月 ~200 美刀(Claude 占大头),换算成节省的时间,回本毫无压力。

几条选型反模式

追新模型频繁切:每次切都要重新建立工作流,得不偿失
只看 benchmark:跑分高的模型未必擅长你的场景
完全替代手工 review:AI 改的 PR 一定要看 diff,尤其涉及 IaC
私密集群信息直接喂给 SaaS 模型:明文 secrets、内网拓扑都要脱敏

选型 checklist

回答这 5 个问题再选:

  1. 你的工作有多大比例在终端?(>50% 选 CLI Agent)
  2. 你愿意每月花多少钱?(>100$ 选 Claude,<50$ 选 opencode+订阅模式)
  3. 数据合规要求?(严的话只能 Continue + 私有模型)
  4. 团队还是个人?(团队要选 skill 体系成熟的)
  5. 是写代码为主还是做事为主?(写代码选 IDE,做事选 CLI)

教训一句话:工具不是越新越好,选一个用熟,比同时用三个都半生不熟值。

容量规划是基础设施运维的核心活儿,但 80% 的人做错。本文是我的方法论。

错误姿势 1:按峰值规划

❌ "去年双 11 峰值 10w QPS,今年准备 12w QPS 容量"

问题:
- 峰值 1 小时,剩下 23 小时机器闲置
- 假设业务线性增长,但实际可能跳变
- 没考虑结构性变化(如改了缓存策略)

错误姿势 2:按"经验值"

❌ "1 万用户每秒大概 100 QPS 吧"

问题:每个系统的"经验值"不一样,公司间也不同。

错误姿势 3:堆机器主义

❌ "不够就加机器,先双倍买着"

问题:
- 浪费钱
- 掩盖架构问题
- 加了机器还可能因为锁、单点限制不能 scale

正确姿势:4 步法

Step 1:找业务驱动指标

每个服务有个"业务量 → 资源消耗"的转换关系。先找出来:

  • API 服务:QPS 与 CPU
  • DB:DAU 与 IOPS
  • 推送:用户数与连接数
  • 视频:在线观看数与带宽

通过历史数据回归出公式:

CPU_cores = QPS / 1500 + 0.5

Step 2:预测业务量

业务量预测 = 趋势 + 大事件

未来 6 个月 QPS = 当前 × (1 + 月增长率)^6 × 大事件系数

大事件系数:
- 没大事件:1.0
- 季度活动:1.3
- 双 11/618:3-5x

Step 3:算资源需求

把业务量代入 Step 1 的公式:

峰值 QPS = 月均 × 3 (典型电商) 或 × 1.5 (B 端)
所需 CPU = 峰值 QPS / 1500 + 0.5 = ...
所需机器 = CPU / 单机 CPU × 1.3 (留 30% buffer)

Step 4:定 SLO 兜底

  • CPU 平均 < 50%(双倍冗余)
  • CPU 峰值 < 80%(应对突发)
  • 内存平均 < 60%
  • 磁盘 < 70%

任何指标接近上限就触发扩容预警。

80/20 法则

容量规划 80% 的价值来自:

  1. 找出 top 5 资源消耗大户:精确建模
  2. 识别非线性环节:DB、缓存、消息队列经常是瓶颈
  3. 量化大事件影响:双 11、营销活动

剩下 20% 价值来自精细化(如按机房、按时段)。新手往往在精细化上花太多时间。

一个真实例子

某社交 App 规划容量:

错误做法:"注册用户 1000 万了,机器买 1000 万 / 100 万 × 现有 = 10 倍"

正确做法:
1. 找驱动指标:DAU 而不是注册用户
2. DAU/注册 = 30%,所以 DAU = 300 万
3. DAU 与 QPS 的关系 = 0.3 QPS / DAU
4. 峰值 QPS = 300 × 0.3 × 3(峰值倍数)= 270 万
5. 单机扛 5000 QPS,所以需要 540 台

结果:1000 台变 540 台,省一半成本。

工具

  • 趋势预测:Prophet(Facebook 开源)、ARIMA
  • 资源拟合:Excel 散点图 + 回归足够,复杂的用 sklearn
  • 容量看板:Grafana 自定义 dashboard

几条心得

  1. 每季度复盘容量预测准确度:不准就调模型
  2. 大版本变更前重新规划:架构变了公式失效
  3. 保留 1 个月 buffer:再快的采购也要时间
  4. 公有云就开 autoscaling:让云厂商帮你规划

教训:容量规划的目的不是"装满",是让你永远比业务快一步

SRE 和运维这俩词在国内经常混用。本文聊聊我的体会。

表面:title 区别

  • 运维(Ops):偏操作、值班、应急响应
  • SRE:偏工程化、自动化、可靠性指标

工作内容差异

维度 运维 SRE
主要产出 操作 / 维护文档 代码 / 平台
时间分配 70% 运行,30% 改进 50% 工程,50% 运营
故障态度 修好就行 必须复盘 + 写代码避免再发
工具 现成工具 + 脚本 自研平台 / Operator
KPI 系统可用性 SLO + Error Budget

SLO 是 SRE 的精髓

运维的 KPI 经常是"99.9% 可用"——但这只是个空口号。

SRE 把它做成可执行的:

SLO: 服务 X 的 99 分位延迟 < 200ms,月可用率 >= 99.9%

Error Budget:
- 30 天 99.9% = 允许 43 分钟不可用
- 已用:12 分钟(上周一次故障)
- 剩余:31 分钟

规则:
- Error Budget 充足 → 允许激进发布
- Error Budget 见底 → 冻结发布,专注稳定性

Toil 这个概念

SRE 把"重复、自动化、无长期价值"的工作叫 toil。SRE 的目标是 toil < 50% 工作时间

典型 toil:
- 每天看监控
- 手动重启挂掉的服务
- 手动扩容
- 收集故障数据

每出现一个 toil,要么自动化掉,要么消除。

实操差异举例

场景:某个服务凌晨经常 OOM

运维思路:
1. 加内存
2. 写脚本检测 OOM 自动重启
3. 加监控告警

SRE 思路:
1. 拉 OOM 时段的内存曲线 + GC 日志
2. 找开发改代码(内存泄漏)
3. 加 HPA 基于 memory 自动扩
4. 写 postmortem,更新 runbook
5. 把这类问题做成共性检查项加到 CI

国内现状

国内很多公司 title 叫 SRE 但实际干运维的活。原因:

  • 工程师文化没那么强
  • 老板觉得"维护好就行,写啥代码"
  • 业务变化快,工程化投入 ROI 看不出来

但好的公司在转:阿里、字节、美团内部都有真正意义的 SRE 团队。

想从运维转 SRE 怎么干

  1. 写代码:Python / Go,至少能写中等复杂度工具
  2. 学 SLO 设计:Google SRE 三本书必读
  3. 拥抱 IaC:手动操作的事都用 Terraform / Ansible 管起来
  4. 跟开发结对:参与 design review,把可观测性塞进去
  5. 量化一切:操作数、自动化率、故障数、MTTR

反过来呢?SRE 转运维有意义吗

有的。SRE 在大公司久了容易"工程化过度"——动不动写平台,但小公司根本承担不起。

转去做 ops 反而能保持"做对一件事"的能力——不是所有问题都要平台化。

我的观点

SRE 不是"运维 2.0",是不同的工种。但都要懂工程化思维。

最值钱的人是:能像运维一样灵活解决眼前问题,又能像 SRE 一样消除问题根源

教训:title 不重要,重要的是你解决的问题在系统里"消失"了,还是只是被你"压住"了。

新搭 OpenStack 集群时一定会问的问题:Neutron 后端选 Linuxbridge 还是 OVS?本文是我在生产 + 测试两套集群跑了两年后的结论。

一句话答案

  • 没特殊需求 → Linuxbridge:简单、稳、排查容易
  • 要 SDN / DPDK / 复杂网络策略 → OVS:功能强、性能更好、但学习曲线陡
  • 要分布式 router / SR-IOV / vxlan offload → OVS(或者更激进的 OVN)

对比维度

维度 Linuxbridge OVS
配置复杂度 简单 中-高
性能(包量) 高(DPDK 模式更高)
功能丰富度 基础(vlan/vxlan/flat) 强(flow、qos、meter、bond)
故障排查 brctl + tcpdump,思路简单 ovs-vsctl + ovs-ofctl dump-flows,需懂 OpenFlow
社区方向 稳定但不再发力 主流,OVN 是未来

Linuxbridge 的优点(容易被低估)

  1. 就是 Linux 桥:所有 Linux 网络工具直接能用,没有抽象层
  2. 没有 OpenFlow flow 表:一个 vlan 一个 bridge,看一眼就懂
  3. tcpdump 直接抓包:哪个 tap 卡了立刻定位
  4. 重启 agent 不会断流:因为内核态的 bridge 不依赖用户态进程

我们一个生产集群跑 Linuxbridge 三年,零网络故障。

OVS 的痛点(也容易被低估)

  1. flow 表难读ovs-ofctl dump-flows br-int 出来几百条,肉眼看是看不懂的
  2. ovs-vswitchd 挂了断网:进程死了所有 VM 网络断(Linuxbridge 不会)
  3. 重启 ovs-vswitchd 抖动:百毫秒级丢包,搞过的都懂
  4. 加 flow 不刷新可能有缓存:诡异问题

但优点真的很顶:

  1. vxlan offload:网卡支持的话性能直接翻倍
  2. DVR(分布式 router):南北向流量不再走 network node
  3. 细粒度 QoS / 流量镜像 / ACL:Linuxbridge 干不了

一个非常坑的事

如果你选 OVS,强烈建议直接上 OVN,别用 ML2/OVS。原因:

  • ML2/OVS 是 Neutron agent 算 flow 推到 OVS,agent 挂了网络新建就停
  • OVN 是控制面(ovn-northd)下发到节点的 ovn-controller,去掉了 Neutron agent
  • OVN 的 logical switch / router 模型比 ML2 干净

但 OVN 切换成本不低,老集群在线切几乎不可能,规划期就要选好。

我的选型建议

场景
小规模(<50 节点)私有云、传统业务 Linuxbridge
公有云、需要租户隔离 + 高吞吐 OVS / OVN
边缘集群、单节点 all-in-one Linuxbridge
要做 SDN、Service Mesh 对接 OVN

切换的代价

我们做过 Linuxbridge → OVS 的迁移:

  • 涉及节点:35 台 compute
  • 准备时间:1 个月(包括功能测试、性能压测、回滚方案)
  • 执行时间:3 个晚上的维护窗口
  • 业务影响:每台节点的 VM 需要 live-migrate 走再切,单台约 30 分钟

不是不能切,是确实折腾。

教训一句话:网络后端是 OpenStack 最难切的东西,搭集群前花一天评估,比上线后花一个月迁移划算。