分类 运维杂谈 下的文章

故障复盘是 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 里就排进季度演练计划,否则永远不会做

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

容量规划是基础设施运维的核心活儿,但 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 不重要,重要的是你解决的问题在系统里"消失"了,还是只是被你"压住"了。

每年盘点一次工具栈。本文是 2026 年的版本。

终端 / Shell

  • 终端:iTerm2 / Wezterm(Wezterm 新晋黑马,GPU 加速)
  • Shell:zsh + oh-my-zsh / fish
  • Prompt:starship(跨 shell,rust 写的快)
  • 复用:tmux(不可替代)+ tmux-resurrect 持久化
  • 历史:atuin(云同步 + 全文搜索)

文件操作

  • ls 替代:eza(带颜色、图标、git 状态)
  • cat 替代:bat(语法高亮 + 行号)
  • find 替代:fd(更快、更直观)
  • grep 替代:ripgrep (rg)(10x 快)
  • du 替代:dust(树状可视化)
  • diff 替代:delta(git diff 颜值飞升)

进程 / 系统

  • top 替代:btop(颜值 + 鼠标交互)
  • 进程查看:procs
  • 网络监控:bandwhich(按进程看带宽)
  • 磁盘 IO:iostat / iotop(经典款没替代)
  • systemd-cgtop:按 cgroup 看资源

K8s

  • k9s:TUI K8s 客户端,必装
  • kubectx + kubens:上下文切换
  • stern:多 Pod 日志聚合
  • kustomize:YAML 管理
  • velero:备份恢复
  • lens / k8sLens:图形化(CTO 演示用)

容器

  • docker:还是 docker
  • lazydocker:TUI Docker 管理
  • dive:分析镜像层

监控

  • Prometheus + Grafana:经典组合
  • VictoriaMetrics:Prometheus 替代,更省内存
  • Grafana Loki:日志聚合(轻量替代 ELK)
  • Tempo:分布式追踪
  • Pyroscope:持续 profiling

IaC

  • OpenTofu:Terraform 的开源 fork(HashiCorp 改 license 后大家跑路)
  • Pulumi:用编程语言写 IaC
  • Ansible:仍然在用,但 K8s 时代占比降低
  • Crossplane:用 K8s CRD 管基础设施

CI/CD

  • GitHub Actions:默认选项
  • Argo CD:GitOps 标杆
  • Tekton:K8s 原生 CI/CD
  • Drone:轻量替代

AI Agent / Copilot

  • Claude Code:CLI Agent 首选
  • Cursor:IDE 集成最好
  • opencode:开源 + 可换模型
  • GitHub Copilot:写代码补全够用
  • Codeium:免费 Copilot 替代

数据库工具

  • DBeaver:万能客户端
  • TablePlus:颜值党
  • dbmate:迁移管理
  • pg_repack:PostgreSQL 在线 vacuum

网络 / 安全

  • Wireshark:抓包祖宗
  • mtr:traceroute 替代
  • httpie / xh:curl 替代
  • bruno:Postman 开源替代
  • Tailscale:内网穿透神器

文档 / 知识

  • Obsidian:本地 markdown 笔记
  • Logseq:知识管理替代
  • HackMD:协作 markdown
  • Excalidraw:手绘风架构图

我的实际栈(每天必用)

iTerm2 + zsh + starship + tmux + atuin + eza + bat + rg + fd + delta + k9s + kubectx + stern + Claude Code + Cursor + Obsidian + Excalidraw + DBeaver + httpie + Tailscale

反潮流:还在用的"老古董"

  • vim(neovim 也用,但 vim 肌肉记忆)
  • screen(偶尔——比 tmux 老但有时更稳)
  • ssh(永不替代)
  • mysql client(CLI 比 GUI 快)

教训:工具栈不要追新——一年换一次,每次升级花一周适应。能用 5 年的工具才是真好工具。