You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Airflow数据库判断DAG无故障完成并统计相关数据?

统计Airflow中无故障、无手动干预的成功DAG运行数

要准确统计顺利完成、无故障且无手动重跑/恢复的DAG运行,需要结合dag_run和task_instance两张表,区分自动触发与手动操作、排除自动重试和故障记录。以下是具体方案:

核心逻辑

符合条件的DAG运行需满足:

  • DAG最终状态为成功
  • 由调度器自动触发(非手动触发)
  • 所有任务均一次成功,无自动重试
  • 无任何任务失败记录
  • 无手动清理/重跑操作痕迹

SQL查询语句

适用于Airflow 2.x版本(若为1.x需调整字段,见下文说明):

SELECT COUNT(DISTINCT dr.dag_run_id) AS successful_uninterrupted_dag_runs
FROM dag_run dr
JOIN task_instance ti ON dr.dag_run_id = ti.dag_run_id
WHERE dr.state = 'success'
  AND dr.external_trigger = FALSE
GROUP BY dr.dag_run_id
HAVING MAX(ti.try_number) = 1
   AND COUNT(CASE WHEN ti.state = 'failed' THEN 1 END) = 0
   AND COUNT(ti.clear_date) = 0;

条件说明

  • dr.state = 'success':筛选最终成功完成的DAG实例
  • dr.external_trigger = FALSE:排除手动触发的DAG(UI/CLI触发的实例该字段为TRUE)
  • MAX(ti.try_number) = 1:确保所有任务均一次执行成功,无自动重试(自动重试会使try_number大于1)
  • COUNT(CASE WHEN ti.state = 'failed' THEN 1 END) = 0:确保无任何任务失败记录(无故障)
  • COUNT(ti.clear_date) = 0:排除被手动清理/重跑的实例(clear_date字段存在值表示任务被手动重置过)

适配Airflow 1.x的调整

Airflow 1.x中无external_trigger字段,可通过dag_run.conf判断:调度器自动触发的实例conf为空,手动触发的实例conf通常包含自定义参数。调整后的WHERE条件:

WHERE dr.state = 'success'
  AND dr.conf IS NULL

另外,Airflow 1.x部分版本可能无clear_date字段,此时可通过task_instance的操作记录辅助判断,但准确性稍差,建议优先升级到2.x版本以获得更准确的字段支持。

内容的提问来源于stack exchange,提问作者Miky Schreiber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:10:28