← 中文资源

简体中文版本

夜间 ETL 作业监控工作流

给批处理作业装心跳、量级 sanity 检查与完成门禁,让静默的部分失败在业务察觉前就打页。

阅读英文原文

目标

夜间 ETL 有三种安静的死法:挂住不动、干净退出但只做了一半、或者全速处理错数据。心跳抓挂死、完成门禁抓半程、量级带宽抓坏数据——简单的一封成功邮件对这三种全都视而不见。

步骤要点

  1. 每个阶段发心跳:行数、字节数、耗时实时上报监控系统,挂死表现为心跳停止而不是到点才发现。
  2. 设完成门禁:跑完校验所有阶段确实执行、完成标记已写、水位已推进,跳阶段的“绿色退出”也会报警。
  3. 加量级带宽:行数字节量对照历史区间(考虑周内与季节性),越界即告警。
  4. 区分打页与噪音:硬失败与超时进寻呼,量级异常进早间摘要供分诊,值班能睡整觉。
  5. 下游首个消费者核验新鲜度与行数,捕捉作业自身看不到的损坏。

排错提示

作业退出码零但报表缺数据是完成门禁缺失,门禁要查产物存在性而非退出码;量级异常半夜打页说明分级错了,带宽越界进摘要、失败才进寻呼;挂死要等到早上才发现是心跳没接监控,把阶段心跳变成可告警指标。

适用边界

量级带宽依赖稳定的历史模式,业务结构性变化(新品类、新市场)会触发误报需重校准;下游核验只能覆盖第一个消费者,深层衍生层要靠对账流程。

代码示例

nightly_orders ETL  (00:30Z)
heartbeats: extract 00:31 (2.1M rows)
            transform 00:34 (2.1M in, 2.0M out)
            load 00:39 (2.0M upserted)
            DONE marker 00:41   watermark 10-21

checks:
  completion gate    PASS (all stages + marker)
  volume band        2.0M vs [1.8M, 2.3M]  PASS
  downstream         dashboard fresh 00:42  PASS

anomaly example (caught):
  transform out 0.9M (55% of band) -> morning digest
  cause: upstream partial outage 10-21 21:40Z