确认提取Airflow环境中所有DAG脚本的两种方法是否可行
Airflow DAG脚本提取方法验证
方法1:直接读取airflow--project-->dags-->datasets目录
- 这个方法不能保证100%正确:
- Airflow官方默认的DAG存储目录是
$AIRFLOW_HOME/dags,但datasets子目录并不是标准路径,大概率是客户环境自定义的结构。只有当客户确实把所有DAG脚本都集中放在这个目录下时,这个方法才管用;如果有DAG散落在dags目录的其他子文件夹或者根目录里,就会漏掉。 - 另外,Airflow允许通过配置项
dags_folder自定义DAG目录,所以得先确认客户airflow.cfg里的dags_folder值,再核对这个datasets是不是该目录下的子目录,且所有DAG都存在这里。
- Airflow官方默认的DAG存储目录是
方法2:用Unix脚本抓取含from airflow import DAG的Python文件
- 这个方法更通用、准确:
- 定义Airflow DAG的脚本几乎都会包含
from airflow import DAG(或者类似的from airflow.models import DAG)语句,通过搜索这个特征就能精准定位所有DAG脚本。 - 给你两个实用的脚本示例:
- 只导出所有DAG脚本的文件名:
# 先获取实际的DAG目录路径 DAG_DIR=$(airflow config get-value core dags_folder) # 递归搜索并导出文件名到列表文件 find $DAG_DIR -name "*.py" -exec grep -l "from airflow.* import DAG" {} \; > all_dag_files.txt - 把所有DAG脚本的内容合并到单个文件(方便人工分析):
DAG_DIR=$(airflow config get-value core dags_folder) find $DAG_DIR -name "*.py" -exec grep -l "from airflow.* import DAG" {} \; | xargs cat > all_dag_content.txt
- 只导出所有DAG脚本的文件名:
- 注意:脚本里用
from airflow.* import DAG是为了覆盖不同的导入写法,避免遗漏。
- 定义Airflow DAG的脚本几乎都会包含
内容的提问来源于stack exchange,提问作者Adigkar
相关产品推荐
相关产品推荐

