如何获得手动触发 DAG 的 Airflow 用户?

tte*_*hdo 6 airflow airflow-scheduler apache-airflow-xcom airflow-operator

在 Airflow UI 中,“浏览器 > 日志”下可用的日志事件之一是事件“触发器”以及负责触发此事件的 DAG ID 和所有者/用户。这些信息是否可以通过编程轻松获取?

用例是,我有一个 DAG,它允许一部分用户手动触发执行。根据触发此 DAG 执行的用户,从此 DAG 执行代码的行为会有所不同。

先感谢您。

kax*_*xil 8

您可以直接从LogAirflow Metadata Database的表中获取,如下所示:

from airflow.models.log import Log
from airflow.utils.db import create_session

with create_session() as session:
   results = session.query(Log.dttm, Log.dag_id, Log.execution_date, Log.owner, Log.extra).filter(Log.dag_id == 'example_trigger_target_dag', Log.event == 'trigger').all()

# Get top 2 records
results[2]
Run Code Online (Sandbox Code Playgroud)

输出

(datetime.datetime(2020, 3, 30, 23, 16, 52, 487095, tzinfo=<TimezoneInfo [UTC, GMT, +00:00:00, STD]>),
 'example_trigger_target_dag',
 None,
 'admin',
 '[(\'dag_id\', \'example_trigger_target_dag\'), (\'origin\', \'/tree?dag_id=example_trigger_target_dag\'), (\'csrf_token\', \'IjhmYzQ4MGU2NGFjMzg2ZWI3ZjgyMTA1MWM3N2RhYmZiOThkOTFhMTYi.XoJ92A.5q35ClFnQjKRiWwata8dNlVs-98\'), (\'conf\', \'{"message": "kaxil"}\')]')
Run Code Online (Sandbox Code Playgroud)