本节摘要:Airflow 自带任务状态与日志,但值班需要的是“哪一类违约在扩散”。要分开看:调度器心跳与解析延迟、队列堆积、任务失败率、SLA miss、数据库锁、外部依赖超时。告警必须带 dag_id、窗口、owner,否则只是红灯装饰。
阅读完本节,你应当能够:
平台层回答 Airflow 自己活着吗。调度器心跳年龄、解析耗时分位数、导入错误个数、元数据库连接与锁等待、执行器槽位、Celery 队列长度或未调度 Pod、Triggerer 是否在跑。这些红了,所有业务 DAG 都会 crook,不该叫某一个 DAG 的 owner 先改 SQL。
DAG 层回答业务契约有没有履约。失败次数、重试次数、运行时长相对调度间隔的占比、SLA miss、paused 是否意外、catchup 是否被打开。原文把可观测性不足概括成:能告诉你某任务某时刻 ConnectionRefused,难告诉你是否与上游发布有关。所以 DAG 层日志要带窗口和外部请求 id,方便与下游追踪系统对齐,即使 Airflow 还不是完整的分布式追踪中枢。
平台红 → 叫平台值班 DAG红 → 叫 owner,附窗口与日志链 两者同时红 → 先平台
| 信号 | 含义 | 优先动作 |
|---|---|---|
| 调度器心跳过老 | 不再推进状态 | 看进程与数据库 |
| 导入错误突增 | 发布坏了代码 | 回滚 DAG 发布 |
| queued 长时间 | 槽位、池、Worker | 先别加 retries |
| failed | 业务或连接 | 看该次 try 日志 |
| SLA miss 但 success | 履约晚了 | 拆任务或改窗口 |
| 成功率高时长顶满间隔 | 时序债务 | 优化或降频 |
任务日志按 try 存储。告警链接要能定位到失败那一次,而不是最新一次成功。远程日志是前提。日志里禁止密码、证件号、完整 SQL 带条件值若含个人数据——监控平台会变成第二套敏感库。
on_failure_callback 把失败变成工单或即时消息。写回调时带 dag_id、task_id、逻辑日期、日志检索键。不要在回调里再做重业务,失败路径应短。sla_miss_callback 处理“绿但晚”。两者接到同一频道会让人疲劳,分开:失败走紧急,SLA 走日间。
StatsD 或 OpenTelemetry 导出是平台层常用手段。任务级自定义指标不要每个 DAG 发明一套名字,用标签:team、criticality、layer。否则仪表盘无法聚合。
传感器超时在监控里常被当成平台故障。单独标签 sensor,避免把等待外部文件与 Worker 死掉混成一个失败率。
不是所有红都要半夜打电话。生产关键 DAG 才进紧急路由,用 tags 或命名前缀识别。回填队列的失败可以邮件。同一窗口重试中的中间失败可以抑制到最终失败再叫,除非重试次数异常飙升表示外部大面积故障。
⚠️ 常见坑:用 UI 人工盯红条当监控。没人值夜班的周末,红条不会自己变成电话。
💡 关键直觉:成功率是虚荣指标。时长占比和 SLA miss 才能抓住“还在绿、但已经还不上钟”的债务。
变更窗口要和监控联动:发布 DAG 时导入错误告警会响,应预期并抑制或标记发布事件,否则发布本身变成事故噪音,真事故会被淹没。
原文提到监控要从任务层走向与追踪、指标相关分析打通。动手最小集是:日志带窗口、指标带团队、告警带 owner。追踪 id 能接就接,接不上时不要阻塞上线,但不要宣称已经全栈可观测。
容量告警:数据库磁盘、XCom 表大小、日志存储。这三样是静默杀手,不会以任务 failed 出现,会以某天 UI 打不开出现。
一条合格告警包含:环境、dag_id、task_id、逻辑日期或区间、状态、try 次数、owner、日志检索键、是否回填。缺 owner 的告警等于发给空气。缺窗口的告警会让人重跑错误的一天。缺 try 次数会让人点开成功的那次日志。把这套字段写进回调模板,比选即时通讯品牌重要。
降噪规则写明白:同一实例重试中的中间失败不叫紧急;最终失败才叫。同一 DAG 五分钟内失败超过阈值,升级为平台级,因为更可能是连接或数仓全局故障。发布窗口内导入错误预期响起,用发布事件标记抑制。周末非关键 tags 走邮件。这些规则要版本化,随 DAG 标签体系一起改,不要只活在某个人的过滤设置里。
原文批评可观测性停在任务层。最小补救:日志第一行打出窗口与外部相关 id;指标用 team、critical、sensor 标签;关键 DAG 记录窗口闭合到成功的时长。追踪系统能接 OpenTelemetry 就接,接不上时不要假装已经有全链路。假装会让故障复盘找不到下一跳。
容量:XCom 表、日志盘、数据库盘,三条告警阈值。静默涨满的表现是某天 UI 超时,不是任务红。把这三条和任务失败率放在同一张值班图的不同行,避免只盯红条。
要,若那 1% 是关键日报,或若 99% 的成功都发生在 SLA 之后。把成功率拆成关键/非关键,再叠时长。虚荣指标会让时序债务长到不可逆:每天都绿,每天都晚一点,直到某天窗口重叠把表写穿。
原文 brief 里有这种展望。生产上可以当辅助,不能当唯一值班。自动归因若读到密码或个人信息,等于把敏感日志送给另一套模型。先脱敏,再谈辅助。本教程不把 LLM 当作监控组件的一部分,避免把展望写成已经交付的功能。
第一张:当前红的关键 DAG 与窗口列表。第二张:平台层心跳、锁、队列是否异常。第三张:今日是否处于发布或回填窗口。三张齐,交接才算完成。只有第一张,会把平台故障交给 DAG owner。只有第二张,会忽略业务 SLA。没有第三张,会把预期中的导入错误当事故处理。交接模板比工具重要。工具可以换,三张图的结构不要换。传感器失败单独列,避免把等待外部文件算进平台失败率,污染第二张图的趋势。容量告警(盘、XCom)放在第二张图的脚注,防止静默涨满只在灾难日出现。
每周只看一张图:关键 DAG 的时长占比分位。上升就进债列表,与功能需求一起排。不看这张图的周会,会永远觉得“平台挺稳”,直到重叠窗口写穿。稳是成功率幻觉。把图贴出来,幻觉少一些。平台层另看心跳与锁,不进业务周会,进平台周会。两会不要合并成一场又长又空的会。告警字段抽查:随机点三条告警,看是否含窗口与 owner。不含就修模板,不要训值班。模板错是平台债。传感器单独趋势,防止外部迟到污染失败率。失败率被污染后,所有人不再相信告警,于是真事故无人接。信任比灵敏度重要。信任来自字段完整与分类正确。完整与正确比多接一个通知渠道重要。渠道再多,文案缺窗口,人还是要问“哪一天”。问的时间够再失败一次。
每周随机三条,核窗口、owner、try、是否回填。缺字段就修模板,当周完成。完成前关键 DAG 的告警视为不可信,值班要补手工字段。不可信是严重状态。严重状态逼模板修复。修复比训人快。训人会造成绕过。绕过会让抽查失去意义。意义是信任。信任来自字段。字段来自模板。模板来自 4.3 最小字段表。表已经有了。缺的是抽查。抽查让表活。活的表让 99% 成功率不再掩盖晚到。晚到在时长图。时长图在周会。周会与抽查是监控的两只手。一只看趋势,一只看文案。文案错,趋势再对人也找不到窗。找不到窗就会重跑错误的一天。错误的一天可能覆盖正确数据。覆盖是不可逆,除非存储有版本。版本不是默认。默认会丢。丢了才明白字段贵。贵的字段用抽查保养。保养很烦。烦是监控的美德。美德不是多渠道。多渠道复制同一条缺字段的消息,只是让更多人一起问哪一天。问的人越多,越像重视。重视解决不了缺字段。缺字段用抽查修。修模板。模板对了,渠道可以少。少渠道提高信噪。信噪高,夜班才接。接了才处理。处理才履约。履约是监控的终点。终点不是大屏。大屏可以没有。没有抽查的大屏是装饰。装饰在事故里不响正确的人。正确的人靠 owner。owner 靠字段。字段靠抽查。抽查靠制度。制度在本节。本节把制度写短。短才能执行。执行才有信任。信任才有值班。值班才有 4 章的意义。意义是违约要响。响对人才算响。人对才靠字段。字段每周抽。抽到缺就修。修完再抽。循环比项目有用。项目会结束。循环要一直转。一直转,监控才不是上线仪式。仪式很美。循环很烦。选烦。烦能救命。救命的告警带窗口。窗口在字段。字段在抽查。抽查结束。
每周三条的缺字段条数写在平台周报第一行。第一行不是羞辱,是模板健康度。健康度差就停新渠道接入,先修模板。先修是优先级。优先级结束用新渠道掩盖坏文案。掩盖会让更多人一起问哪一天。问得越多越像重视。重视解决不了缺字段。缺字段用第一行逼修。逼修比训值班快。快结束绕过。绕过结束抽查无意义。无意义结束信任。信任结束值班。值班结束 4 章意义。意义是响对人。对人靠字段。字段靠抽查。抽查靠公开第一行。第一行结束装饰大屏。大屏可以没有。没有抽查的大屏必须没有。必须结束仪式监控。仪式结束于周报第一行。第一行结束 4.3。4.3 结束违约要响。响结束于对人。对人结束本节。
周会没有时长图时,会必须先补图再谈需求。空窗等于允许幻觉继续。幻觉是成功率。成功率结束不了债务。债务要图。图要每周。每周结束空窗。空窗结束本节最后一口令。口令结束虚荣。虚荣结束。
下一章在能值班的集群上,加入数据就绪调度、权限和插件。