Runbook 是什么
"凌晨 3 点被叫醒的那个人,第一眼能看懂、能动手做的步骤指南。"
它不是项目文档,不是架构图。它是面对一个具体告警 / 故障时,那一个人需要的:
- 这个告警是什么意思
- 第一步先看哪个仪表板
- 常见原因 1 / 2 / 3 + 各自怎么处理
- 怎么联系到上下游负责人
- 升级路径:自己搞不定找谁
一份 Runbook 的标准骨架
# Runbook: 付款 API 错误率告警
## 告警含义
付款 API HTTP 5xx 比例 > 1%(5 分钟窗口)
## 影响评估
快速看:
- Grafana 大盘 [链接]
- 当前请求量 + 错误率分布
- 影响地区 / 渠道
## 常见原因 + 处理
### 1. 数据库连接池耗尽(最常见)
症状:app 日志一片 connection refused
处理:
- 临时:`kubectl scale deployment/payment --replicas=8`
- 检查 RDS 监控,确认 master 没挂
- 长期:增大 pool 配置(PR #xxx 模板)
### 2. 上游支付通道故障
症状:与某家通道相关的 trace 全部 timeout
处理:
- 立即切到备用通道:`kubectl ... patch ...`
- 通知商务联系对方
- 客户公告(按预设模板)
### 3. 部署引入 bug
症状:错误率从某个时间点突然上升
处理:
- kubectl rollout undo deployment/payment
- 通知发版人
- 进入 SEV-2 复盘
## 联系人
- 服务 Owner: @alice (SRE 群 / 飞书 #payment-sre)
- DBA on-call: @bob
- 上游通道商务: @carol
## 升级路径
30 分钟未恢复 → 升级到 Lead
1 小时未恢复 → 拉客服 + CTO
关键原则
1. 告警 → Runbook 链接是底线
每个告警必须带 Runbook URL:
# Prometheus 告警规则
- alert: HighErrorRate
annotations:
runbook_url: https://wiki/runbook/high-error-rate
summary: "Error rate > 1% on {{ $labels.service }}"
凌晨被叫醒的人不该现想"该看哪里"——所有东西从告警一键跳过去。
2. 写得像 step-by-step 不是说明文
❌ "需要分析当前的连接池使用情况和上游服务健康度" ✓ "1. 打开 [Grafana 链接];2. 看 'pool_active' 是否到上限;3. 如果到了,跑..."
3. 命令尽量可复制可粘贴
kubectl -n prod logs -l app=payment --tail=100 | grep ERROR
不是 "kubectl logs the payment pod and check errors"。
4. 每次事故后修一次 Runbook
postmortem 行动项里通常有"完善 Runbook"——真的去改。Runbook 是活文档,不是一次写完不动的。
自动化优先
"能自动化的就别让 on-call 手做。"
- Runbook 步骤里"先扩容"——能不能自动 HPA?
- "重启某 Pod"——能不能 livenessProbe 自动来?
- "切到备用通道"——能不能 Circuit Breaker 自动切?
Runbook 只承载真的需要人判断的步骤。SRE Book 把这种"自动化能消灭的人工劳作"叫 Toil——值得专门花时间消灭。
Knowledge Base 整体架构
Runbook 只是知识库的一部分。完整架构:
公司 Wiki / Backstage / Notion
├── Runbooks(怎么处理告警 X)
├── ADR(Architecture Decision Records,重要决策为什么这么做)
├── Onboarding(新人怎么本地起服务)
├── Service Catalog(每个服务的 owner / SLO / 依赖)
├── Architecture Diagrams(系统总图)
├── Postmortems(历史事故)
└── How-to / FAQ(常见操作)
ADR:架构决策记录
# ADR-2026-001: 选用 Loki 而不是 ELK
**状态**:已采纳
**日期**:2026-04-12
**决策者**:@xxx, @xxx
## 背景
日志量增长,原 ELK 集群成本和运维负担都重。
## 选项
1. 升级 ELK 集群
2. 改用 Loki + Grafana
3. 用云商托管日志
## 决策
选 Loki:与已有 Grafana 集成自然,存储成本预期更低。
## 后果
- 全文搜索能力下降,已确认现有查询模式以标签过滤为主
- 团队需要学 LogQL(培训计划 ...)
ADR 让 6 个月后的人知道为什么决策成这样——不写就只能猜。
工具
- Confluence / Notion:传统文档型,富文本
- Backstage(Spotify 开源 → CNCF Incubating):开发者门户 + TechDocs(git-based 文档)
- MkDocs / Docusaurus / VitePress:静态生成器,docs-as-code
- Git 仓库 + Markdown:最简最强,适合 SRE / 工程团队
选项越简单,越容易被维护。Notion 写 Runbook 比 Confluence 流畅——这种小事影响 Runbook 是否真的被更新。
反模式
- "找老员工问"是公司主要知识源:bus factor 危险
- Runbook 全在某个人脑子里:写下来或在重要事故里被坑
- Wiki 上 1000 篇文档,最后修改时间 2 年前:定期审;老的归档或删
- 告警没 Runbook 链接 / 链接是 404:告警 review 时检查
- 不允许 Runbook 修错的人改:必须低门槛,任何人都能 PR
推荐阅读
- Google SRE Workbook: Document Code Reviews and Postmortems Culture — Ch 12 含 Runbook
- PagerDuty Operations Documentation — 实操指南
- Backstage TechDocs — docs-as-code 平台
- ADR GitHub: Documenting Architecture Decisions — ADR 模板与例子合集
- Atlassian: Incident Documentation Templates
至此完成 SRE 实践 5 篇。下一批进入安全与合规——按计划这一批要特别保守,合规相关只指官方文档。