Skip to content
返回构建教程

生产调试

安全调试生产事故:先只读、再假设、永不 prod 直修。

为什么

prod 事故高压高赌注:用户每分钟丢钱/数据/信任,'试修'诱惑压倒。但恐慌部署的修常更糟——你不懂因、修有未测副作用、现两事故。方法:一、只读调查(日志、指标、trace、仅 SELECT DB 查)提假设;二、staging 复现;三、staging 修并验;四、部署。最有价值技能是知何时回退非前进——15 分钟不能提假设则回退到末知好从稳定态查。生产非你 IDE。

何时使用

prod 事故(用户面宕或错误突增)时。需多久多久——压力下勿跳方法。

如何做

1. 确认并指派——起计时器、呼值班、开事故频道
   - 5 分钟内状态页发"调查中";用户忍宕非忍沉默

2. 只读调查——动任何前提假设
   - 查仪表盘:错误率何时突增?那边界上何部署?
   - 读日志:按错误级+时间窗过滤;找共同请求形状
   - DB 仅 SELECT 查——事故中 prod 永不 UPDATE/DELETE
   - 提假设:"14:32 部署改 auth 检查,坏 SSO 用户登录"

3. 决:回退还是前进?
   - 15 分钟不能提假设 → 回退到末知好部署
   - 假设清晰且修小 → 前进(staging 后)

4. staging 复现并那修
   - 同代码部署 staging;触发同请求;确认 bug
   - 写修;验 bug 走且无回归;获评审

5. 部署修并盯指标 15 分钟
   - 部署完非解决;错误率回基线才解决
   - 48 小时内写事后:时间线、因、修、行动项——此是事故停复之法

示例

# 1. 确认(5 分钟内)
# - 开 #incident-2024-03-15,呼值班,发状态页更新

# 2. 只读调查
# 错误率 14:33 突增——14:32 部署何?
git log --since="2024-03-15 14:30" --until="2024-03-15 14:35" --oneline
# abc1234 feat: 收紧 SSO token 验证

# 读日志(按突增窗过滤)
aws logs filter-log-events --log-group prod --start-time 1710517980 --filter-pattern '"level":"error"'
# {"level":"error","msg":"SSO token 拒","reason":"缺 aud claim","userId":42}

# 假设:新验证拒无 aud claim 的 token;
#       旧 SSO token(aud 加前发)被拒。

# 3. 回退(修不明,15 分钟过)
vercel rollback prod-deploy-abc1234   # 回到知好,用户解锁

# 4. staging 复现 + 修
# - abc1234 部署 staging,旧 token 登录 → 确认
# - 修:接受无 aud token 作迁移(警告非拒)
# - PR + 评审 + staging 验

# 5. 部署前进修并盯
vercel deploy --prod
# 盯错误仪表盘 15 分钟 → 回基线 → 宣解决

常见问题

  • ⚠无 staging 复现部署'快修'到 prod——修坏另事现两事故。
  • ⚠调查中 prod 跑 UPDATE/DELETE'清坏数据'——毁证据不能找因。
  • ⚠45 分钟试前进而 30 秒回退本可解锁用户。
  • ⚠无事后,3 月后同事故再发因无人写因。

最佳实践

  • ✓回退作一命令、文档完善操作——若 20 分钟才想出,压力下你不会做。
  • ✓书签只读仪表盘(错误率、p99 延迟、部署标记),调查 10 秒起非 10 分钟找对视图。
  • ✓每事故 48 小时内要求事后,无责时间线+具体行动项追到关闭。
  • ✓游戏日(预定消防演练)练事故方法——真压力下你执排练的非读的。