Skip to content

空跑 / 静默失败检出 ​

难度与前置

难度:进阶
前置:调度显示成功/失败;能查分区行数与水位/进度指标;有基础量级或新鲜度告警。
读完能做什么:识别「任务绿、数据空/错」的几类静默失败,用检出清单与首响步骤处理,并用检出率与 MTTD 验收。

适用场景 ​

  • 调度全绿,业务却说看板为零或昨同比断裂
  • 过滤条件、配置开关、分区通配导致写入 0 行但 exit 0
  • 流作业水位卡住或闲置,无失败事件故无告警
  • 补数/重跑跳过已有分区,表面成功实则未刷到

不适用:

真实场景(一条) ​

短剧投放日批 dwd_ad_event 调度成功。配置中心把实验过滤写成 app_id IN ()(空列表),引擎语义为「恒假」,写入 0 行,作业仍 exit 0。新鲜度「分区存在」也绿(空分区已创建)。直到看板消耗为 0 才发现。

按本清单:成功 ≠ 有数 → 零行/同比跌零告警 → 首响区分过滤吞数 vs 源空窗 vs 跳过分区 → 修复后 MTTD 从「业务发现 ~6h」降到「自动告警 <15min」,观察 30 天空跑对外事故 0。

怎么做(步骤清单) ​

1. 静默失败分类(先对号) ​

类型信号典型根因
零行成功exit 0;输出分区行数 = 0过滤恒假、源空、写路径错
过滤吞数行数远低于基线但非 0错误 where、错误字典、权限视图
跳过分区任务成功;目标 dt 未写入或 mtime 旧依赖误判已完成、补数 skip 已存在
水位停滞作业 RUNNING/IDLE;事件时间不推进源停、idle 无告警、脏时钟
错数成功行数正常;关键度量离谱口径开关、Join 丢边、单位错误

口诀:调度成功只证明进程退出码;数据合同要另开验收。

2. 检出清单(监控侧,可复制) ​

text
静默失败检出清单
□ 成功实例必须上报:输出行数、字节量、分区列表
□ 零行:P0/P1 表零行 = 告警(允许名单:合法空窗日需标注)
□ 同比/基线:|今日行数/基线-1| 超阈 → 告警(链 anomaly-baseline)
□ 分区覆盖:期望 dt 集合 vs 实际写入;跳过要显式状态码
□ 新鲜度:最大事件时间/分区封闭(链 freshness-sla);空分区不算达标
□ 流作业:watermark 滞后、idle 超时告警;禁止「无 checkpoint 失败=健康」
□ 主键/度量抽检:日级 checksum 或对账(链 reconciliation)
□ 配置变更:过滤条件变更进变更窗并触发样例回归

3. 首响 20 分钟(值班) ​

text
静默失败 · 首 20 分钟
T+0  现象:□零行 □跌零/腰斩 □分区缺 □水位停 □错数
T+5  调度:实例终态 ____  退出码 ____  是否「跳过」态 ____
T+8  量级:行数 ____ vs 基线 ____(volume-monitor)
T+10 新鲜度:源封闭?Y/N  空分区?Y/N(freshness-sla)
T+12 过滤/配置:最近变更?Y/N  实验开关?____
T+15 是否对外不可信:□是(公告+阻断 ADS)□否 □观察
T+20 唯一下一步:________  问题单:________(closed-loop)

分流提示:

  • 像对账 diff → 交 recon-triage,但先标「可能空跑」
  • 确认空跑/错数已对外 → 升级真警与复盘,不按「抖动」关单
  • 告警路由见 alert-oncall

4. 防再发(工程最小集) ​

手段说明
成功契约绿必须带行数/字节指标;缺指标视同失败
空分区 ≠ 就绪READY 规则与 dependency 对齐
合法空窗日日历标注(大促停投等),否则零行即警
配置即代码过滤变更走 PR + test-fixture
闭环原因码含「空跑/静默」;复验看 MTTD

常见坑(至少这些) ​

  1. 相信调度绿灯等于数据就绪

  2. 空分区创建成功,新鲜度也标达标

  3. 零行白名单过大,真空跑被吞

  4. 只告失败态,不告「成功但 0 行」

  5. 水位不动却无 idle 告警,流任务假健康

  6. 跳过分区无状态码,补数以为刷过

  7. 跌零当「业务没投放」不核源
    先核源与过滤变更。

  8. 检出后不进 closed-loop,下周同样空跑

如何验收(带数字的前后对比) ​

项改前(示例)改后(目标)
P0 表零行/跳过检出靠业务发现自动告警;MTTD ≤ 15min
成功实例缺行数指标常见0(缺则失败)
空跑对外事故(30 天)≥10
合法空窗误报高有日历;误报可解释
静默类问题单含原因码与复验无100%
text
空跑/静默失败验收(可复制)
范围:P0/P1 作业 ____ 个
成功必带行数指标:____%
演练:故意零行过滤 → 告警是否 <15min:Y/N
观察期空跑对外:____(期望 0)
抽检水位 idle 告警:Y/N
签字(质量/值班):________  日期:________

Checklist:

  • [ ] 分类表 + 检出清单 + 首 20 分钟可执行
  • [ ] 链到 volume-monitor / freshness-sla / closed-loop / recon-triage / alert-oncall / anomaly-baseline
  • [ ] 验收含 MTTD 与空跑事故数字
  • [ ] 无假外链;无未公开阈值当机密泄露

相关专篇(互链,不重写) ​

你要做的事看哪篇
行数/字节告警行数/字节量监控
封闭与 SLA新鲜度 SLA
问题单认领复验质量闭环
差异分流对账失败分诊
接警升级告警与值班
波动阈值波动基线
本篇只做空跑/静默检出与首响,不替代量级/对账设计

相关面试题 ​

题库小程序链接待定;先用站内锚点占位。

  • [ ] 题:列举至少四类静默失败,并说明为何「调度成功」不够?(考察点:分类表)→ 占位:#todo-interview-silent-failure-types
  • [ ] 题:零行成功如何在 15 分钟内被检出?验收看哪些数字?(考察点:MTTD + 行数指标)→ 占位:#todo-interview-silent-failure-zero-row
  • [ ] 题:空分区为何不能算新鲜度达标?与 dependency READY 如何对齐?(考察点:空分区陷阱)→ 占位:#todo-interview-silent-failure-empty-part
  • [ ] 题:首 20 分钟清单如何决定是否阻断 ADS?(考察点:对外不可信)→ 占位:#todo-interview-silent-failure-block