【问题标题】:How to get Airflow user who manually trigger a DAG?如何获取手动触发 DAG 的 Airflow 用户?
【发布时间】:2020-05-02 17:52:08
【问题描述】:

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

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

提前谢谢你。

【问题讨论】:

    标签: airflow-scheduler airflow


    【解决方案1】:

    您可以直接从 Airflow 元数据数据库中的Log 表中获取它,如下所示:

    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]
    

    输出

    (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"}\')]')
    

    【讨论】:

    • 谢谢你,卡西尔。这就是我要找的。​​span>
    【解决方案2】:

    我会稍微修正一下之前的答案:

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

    【讨论】:

      猜你喜欢
      • 2020-05-25
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多