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

Airflow任务状态全景简化监控系统开发方案咨询

Airflow任务状态全景监控方案实现指南

一、核心方案(简化前端+后端数据存储)

1. 后端数据采集与存储

  • 状态捕获方式:
    • 成功/失败状态:在Airflow DAG的全局配置中添加on_success_callback和on_failure_callback,回调函数内将任务的dag_id、task_id、execution_date、state写入业务数据库(如MySQL/PostgreSQL)。
    • 运行中状态:每5分钟定时查询Airflow元数据库的task_instance表,筛选state='running'且execution_date为目标日期的任务同步到业务库;或调用Airflow REST API的/taskInstances接口过滤状态。
  • 数据库表设计示例:
    CREATE TABLE airflow_task_monitor (
        id INT AUTO_INCREMENT PRIMARY KEY,
        dag_id VARCHAR(255) NOT NULL,
        task_id VARCHAR(255) NOT NULL,
        execution_date DATETIME NOT NULL,
        state ENUM('running', 'success', 'failed') NOT NULL,
        update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    );
    
  • 后端接口开发:
    • 按日期查询接口:GET /api/task-stats?date=YYYY-MM-DD,返回每个DAG的任务数量统计(总任务数、成功数、失败数、运行中数)。
    • 日期辅助接口:提供获取最早/最晚有数据日期的接口,支持日期切换边界判断。

2. 前端页面实现

  • 核心展示组件:
    • 日期控制栏:默认显示当日,左右箭头触发日期切换,点击后请求对应日期的数据。
    • DAG进度条区域:每个DAG对应一条进度条,按任务数量占比划分颜色:
      • 深绿色段:成功任务数占比
      • 浅绿色段:运行中任务数占比
      • 红色段:失败任务数占比
      • 进度条下方标注DAG名称、各状态具体任务数(如成功20/运行中5/失败2)
  • 技术选型建议:用Vue3/React18搭建轻量单页应用,进度条可基于原生HTML5 <progress> 自定义样式,或直接用Element UI/antd的进度条组件快速实现。

二、批量监控优化方案

  • 告警机制:新增后端定时任务,扫描业务库中当日state='failed'的任务,触发企业微信/钉钉/邮件告警,可在DAG配置中绑定对应负责人信息。
  • 业务线分组展示:按业务线对DAG进行分组,非技术人员可快速查看整条业务线的任务健康度。
  • 历史数据对比:在进度条旁添加昨日同期数据对比(如较昨日成功率提升5%),帮助感知任务运行趋势。
  • 离线报表导出:提供Excel导出功能,包含当日所有DAG的任务状态明细,方便业务人员存档。
  • 缓存优化:对高频查询的日期数据(如当日)做Redis缓存,减少数据库查询压力,提升页面加载速度。

三、技术细节探讨方向

  • Airflow状态获取效率:若Airflow元数据量较大,直接查询task_instance表建议添加execution_date和state的联合索引;用REST API则开启分页查询,避免单次返回数据过多。
  • 实时性平衡:非技术人员对实时性要求不高,轮询间隔设为5-10分钟即可,兼顾数据新鲜度与Airflow集群压力。
  • 数据一致性:运行中任务为定时同步,存在短暂延迟,可在页面标注数据更新时间:YYYY-MM-DD HH:MM,避免误解。
  • 权限控制:若需分角色查看,前端可添加简单权限校验,如业务线负责人仅能查看对应组的DAG。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:31:07