runbook

可执行运维手册的结构与验证

补充说明

Runbook 是给“不熟悉这个服务、凌晨三点被叫起来的人”看的可执行步骤。它必须写清症状、影响、前置条件、诊断顺序、止血动作、验证、回滚和升级路径。只写“重启服务”不算 runbook。

每条告警都应链接到对应 runbook。Runbook 要随系统版本更新,并定期在演练环境执行一遍。

常用示例

Runbook 模板:

# 支付回调失败率升高

## 症状
- 告警:PaymentCallbackFailureRateHigh
- 看板:/d/payment/callback

## 影响
- 用户:支付成功但订单状态未更新
- SLO:支付回调成功率 99.9%

## 前置条件
- 权限:prod checkout 命名空间 edit
- 工具:kubectl、psql 只读、Argo CD 访问

## 诊断(按顺序)
1. kubectl -n checkout get pods -l app=payment
2. kubectl -n checkout logs deploy/payment --since=10m
3. kubectl -n checkout get endpoints payment-callback
4. psql -c "select count(*) from pg_stat_activity;"

## 止血
- 回滚:argocd app rollback payment <revision>
- 切流:把回调消费者指向备用集群
- 降级:关闭非关键重试,先保全主链路

## 验证
- 回调成功率 > 99.9% 持续 10 分钟
- 积压消息 < 1000

## 升级
- 15 分钟未恢复:联系 @payments-oncall,再找 IC

## 回滚本操作
- 记录执行的每条命令和时间

告警里直接带 runbook 链接:

- alert: PaymentCallbackFailureRateHigh
  expr: job:slo_errors:ratio_rate5m{job="payment"} > 0.001
  for: 5m
  annotations:
    runbook_url: https://wiki.example.com/runbooks/payment-callback
    summary: "支付回调失败率超过 SLO"

把高频止血动作脚本化:

#!/usr/bin/env bash
set -euo pipefail
NS=${NS:-checkout}
kubectl -n "$NS" rollout undo deploy/payment
kubectl -n "$NS" rollout status deploy/payment --timeout=5m

易错点与排错

读完自测

合上页面,先回答,再展开对照。

  1. Runbook 和事故复盘的区别是什么?
  2. 一份 runbook 至少需要哪些部分?
  3. 为什么 runbook 要在演练环境定期执行?
答案
  1. Runbook 是事前编写的可执行处置步骤;复盘是事后分析原因和改进项。
  2. 症状、影响、前置条件、诊断、止血、验证、回滚和升级路径。
  3. 系统、权限、命令和依赖会变化;不演练的 runbook 在真正故障时很可能失效。

相关条目