可执行运维手册的结构与验证
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
合上页面,先回答,再展开对照。