外观
数据事故复盘怎么写(时间线 → 影响面 → 根因 → 门禁回补)
难度与前置
难度:进阶
前置:有日批/准实时主题表与告警通道;能按 告警与值班 完成止血与销警。
读完能做什么:按「时间线 → 影响面 → 根因 → 门禁回补」填完一份可归档复盘单,并留下带数字的验收与防再发门禁(不是价值观课或空话 5Why)。
适用场景
- P0/P1 数据事故销警后 24~48h 内要写短复盘并进周报
- 错误数已对外(看板/投放后台/合作方),需要影响面清单与纠正口径
- 同类告警反复出现,需要把「临时重跑」升级为永久门禁
- 补数/回刷后要证明「不会再以同样方式翻倍或漏出」
不适用:
- 值班接警与即时处置步骤本身(见 告警与值班)
- 日常 DQ 规则分级与认领闭环专文(见 质量闭环)
- 5Why / 鱼骨图方法论课、文化口号与「问责秀」
- 未发生数据错误、仅任务偶发超时且无下游影响的纯运维抖动(记值班笔记即可,不必套本模板)
真实场景(一条)
短剧投放组 ads_ad_daily_report_1d(投放日报 ADS)某日对外消耗金额比渠道后台高约 2.1 倍。业务按看板调预算,半日后发现异常。
现场还原(虚构通用例):
- 值班按 告警与值班 认领:量级告警曾响过,被「先看看」跳过;ADS 无发布门禁
- 止血:公告「看板数不可信」→ 切只读旧分区 / 停对外 API → 锁定可疑
dt - 根因:补数窗口对 DWD 插了两遍分区(无 离线幂等 覆盖写),下游 DWS/ADS 按「追加」叠加;对账规则存在但差异超阈未阻断发布(见 对账、ADS 出数验收)
- 恢复:按 补数/重跑 幂等回刷可疑分区 → 与渠道对账 diff 落入阈内 → 重新发布 ADS → 业务确认
复盘后回补:补数必须覆盖写 + 发布前强制对账 PASS + 量级 P0 阻断。观察期 30 天:同类翻倍工单 0;MTTR 从「半日发现」降到「告警 20 分钟内止血」。
怎么做(步骤清单)
1. 先开单:最小字段(禁止只写「已重跑成功」)
text
数据事故复盘单(最小)
单号 / 级别:P0 □ P1 □ 主题 owner:________ 值班:________
对象:库.表 / ADS / 看板 / 对外接口 ________
业务日 / 分区:________ 发现来源:□告警 □业务 □对账 □抽检
联动单:告警单号 ____ 补数单号 ____ 发布单号 ____
状态:□止血中 □已恢复待复盘 □复盘关闭(门禁已上)级别与认领时效对齐 告警与值班;质量问题单粒度对齐 质量闭环(表 + 分区 + 规则)。
2. 时间线:发现 → 止血 → 恢复(必须带时刻)
按上海时区写墙钟,禁止「上午/下午」模糊词。
text
时间线(可复制)
T0 发现:____(谁 / 哪条告警或哪句业务反馈)
T1 认领:____(≤ 约定响应;多人时谁主责)
T2 止血:____(公告内容一句话;停写/切旧/熔断哪条链路)
T3 影响确认:____(见下节影响面初稿时刻)
T4 根因锁定:____(技术点一句话 + 证据链接:日志/SQL/diff)
T5 修复落地:____(回刷分区范围;是否幂等)
T6 恢复验收:____(对账/行数/看板抽检数字)
T7 业务销警公告:____
T8 复盘关闭:____(门禁 PR/规则 ID:________)止血优先于完美根因:先让错误数停止扩散,再深挖。补数动作对接 补数/重跑;大规模或陌生窗口先对照 补数演练 的干跑清单,禁止无窗无验真补生产。
3. 影响面:表 / 看板 / 对外(可勾选清单)
影响面漏写 = 恢复后还有人在用脏数。
| 层 | 勾选 | 对象示例 | 错误形态 | 是否已纠正 | 对外沟通 |
|---|---|---|---|---|---|
| 仓表 | □ | ODS/DWD/DWS 分区 | 空/翻倍/口径错 | 是/否 | 内部 |
| ADS | □ | ads_* 日表 | 发布脏分区 | 是/否 | 内部+看板 |
| 看板 / 报表 | □ | 投放日报、ROI 板 | 展示错数时段 | 是/否 | 业务群公告 |
| 对外 API / 导出 | □ | 合作方拉取、邮件导出 | 下游已消费 | 是/否 | 需撤回/更正函 |
| 决策动作 | □ | 调预算、停投、结算 | 不可逆动作 | 评估中 | 升级业务负责人 |
辅助动作:
text
影响面摘要(对外可用一句话)
错误窗口:从 ____ 到 ____(上海时区)
错误指标:________ 偏差:约 ____% 或 ____ 倍
已消费方:________ 已采取:□撤回 □更正公告 □重推正确分区
未覆盖风险:________(谁可能还缓存了旧数)4. 根因:技术 + 流程(忌甩锅,要可验证)
根因写两行:技术机制(可复现)+ 流程缺口(为何门禁没拦住)。禁止只写人名。
| 根因桶(打标用) | 技术例子 | 流程例子 |
|---|---|---|
| 写入非幂等 / 双跑 | 分区追加两次 | 补数无覆盖约定、无演练 |
| 依赖/调度 | 上游未 READY 就跑 | 依赖边缺失,见 调度依赖 |
| 口径/Join | 赠款未剔除、膨胀 | 无对账原因码、无发布验收 |
| 门禁被跳过 | DQ 失败仍成功 | 「赶 SLA」口头放行 |
| 监控盲区 | 无量级/无对账 | 告警未分级或无人认领 |
| 变更未评估 | 改主键/改过滤 | 无 lineage-impact 签字 |
证据最小集(复盘附件):
- 失败/成功实例 ID、重跑次数
- 分区行数前后、对账 diff 前后(数字)
- 相关 PR/配置 diff 或「无变更」声明
- 告警是否鸣响、是否被关闭/忽略
口诀:人的失误要落到「哪条门禁缺失」;改门禁,不改「下次注意」。
5. 门禁回补:永久防再发(可勾选,必须有负责人与到期日)
临时止血 ≠ 关闭;关闭条件 = 永久控制已上线或有明确豁免到期日。
text
门禁回补清单(最小)
□ 写入:[离线幂等](/warehouse/idempotent) 覆盖写 / 去重键;补数窗演练记录见 backfill-drill
□ 质量:P0 规则(行数翻倍、对账超阈)失败阻断下游;闭环见 closed-loop
□ 对账:源 vs 仓 / 层间差异原因码强制;见 reconciliation
□ 量级:分区行数/字节量阈值;见 volume-monitor
□ 发布:ADS 验收 PASS 才切流;见 ads-publish
□ 调度:依赖边补齐;失败告警分级;见 dependency / alert-oncall
□ 变更:破坏性改表走 lineage-impact
□ 演练:下一周期安排一次相关 backfill-drill 或值班桌面推演
负责人:________ 到期:________ 验证方式(数字):________回补验收:用「若再出现同因,哪条门禁会在对外前拦住」一句话自测;答不上来 = 未关闭。
常见坑(至少这些)
复盘只写「已重跑成功」
无时间线、无影响面、无门禁 → 下周同告警。时间线用「上午发现」无墙钟
MTTR 算不清,周报不可比。影响面只写本表,漏看板/API/已调预算
仓绿了,业务仍按错数决策。根因写成「某某手滑」
无法防再发;要写缺哪条幂等/对账/发布门禁。门禁回补停留在群公告「以后注意」
无规则 ID、无 PR、无到期日 = 未回补。为赶 SLA 跳过对账/量级,事后用复盘自我感动
跳过本身应进根因桶「门禁被跳过」。补数未幂等又双跑,用第三次重跑「修」第二次事故
对照 idempotent 与 backfill-drill。把本篇写成 5Why 概念课或问责会纪要,清单字段全空
如何验收(带数字的前后对比)
| 项 | 改前(示例) | 改后(目标) |
|---|---|---|
| 复盘含完整四段(时间线/影响面/根因/门禁) | 口头或「已重跑」一句话 | 100% P0/P1 事故有单 |
| 发现→止血墙钟(P0) | 如 > 2h 或未知 | ≤ 约定(如 30min)且有记录 |
| 对外错误窗口时长 | 如半日 | 缩短;有公告时刻 |
| 同因重复事故(观察 30 天) | ≥ 1 | 0 |
| 门禁回补按期完成率 | 未知 | 100%;逾期升级 |
| 恢复后对账 / 行数验收 | 无数字 | diff 入阈;有 SQL 记录 |
| 跳过门禁出数次数 | ≥ 1 | 0 |
text
事故复盘验收记录(可复制)
单号:________ 级别:P0/P1 分区/窗口:________
时间线:T0 ____ → T2 止血 ____ → T6 恢复 ____ → T8 关闭 ____
影响面:表 ____;看板 ____;对外 ____;决策动作:有/无
根因桶:________ 证据:行数 ____→____;对账 diff ____→____
门禁:规则/PR ________ 负责人 ____ 验证日 ____
观察期:____ 天内同因工单数:____
签字(主题 owner):________ 日期:________Checklist:
- [ ] 时间线含发现/止血/恢复墙钟(上海时区)
- [ ] 影响面覆盖仓表 + ADS/看板 + 对外 + 已发生决策
- [ ] 根因含技术机制 + 流程缺口,不单点点名
- [ ] 门禁回补有负责人、到期日、验证数字
- [ ] 链到 alert-oncall / 对账 / volume-monitor / closed-loop / ads-publish / backfill-drill / lineage-impact / rerun-catchup / dependency / idempotent,不重写专篇
- [ ] 无未公开公司项目名与真实内部数据
- [ ] 未写成 5Why 概念课或空话价值观
相关专篇(互链,不重写)
| 你要做的事 | 看哪篇 |
|---|---|
| 接警、分级、公告、销警 | 告警与值班 |
| 规则认领与同分区复验 | 质量闭环 |
| 源仓/层间差异与原因码 | 对账设计 |
| 行数翻倍/空分区监控 | 行数/字节量监控 |
| 对外发布前验收 | ADS 出数验收 |
| 安全补数与演练 | 补数/重跑、补数演练 |
| 下游谁被坑了 | 改表前影响评估 |
| 依赖边与 READY | 调度依赖 |
| 写入覆盖与去重 | 离线幂等 |
| 本篇 | 只定事故复盘四段模板与门禁回补验收,不替代上述专篇 |
相关面试题
题库小程序链接待定;先用站内锚点占位。
- [ ] 题:P0/P1 复盘单四段最少要齐哪几块?(考察点:时间线/影响面/根因/门禁回补齐全)→ 占位:
#todo-interview-incident-postmortem-four-parts - [ ] 题:时间线为何必须记发现→止血→恢复墙钟(上海时区)?(考察点:MTTR 可测;P0 发现→止血有记录)→ 占位:
#todo-interview-incident-postmortem-timeline - [ ] 题:根因如何拆成技术机制 + 流程缺口,而不是只点名个人?(考察点:双根因 + 证据数字)→ 占位:
#todo-interview-incident-postmortem-rootcause - [ ] 题:门禁回补怎样验收「同因不再发」?(考察点:负责人/到期日/验证数字;观察期同因=0)→ 占位:
#todo-interview-incident-postmortem-gate
改写说明:清单体例对齐表生命周期 / 访问脱敏;主链为时间线 → 影响面 → 根因 → 门禁回补;刻意不写 5Why 概念课。虚构通用短剧投放 ADS 错误发例,无未公开公司数据。