Airflow 气流:DAG运行的监测解决方案
我目前正在尝试设置气流监控,理想情况下,在执行DAG时发送一封电子邮件,邮件中包含有关所有包含任务的一些信息,如任务的最终状态、运行时等 我目前未能解决的问题是:Airflow 气流:DAG运行的监测解决方案,airflow,monitoring,Airflow,Monitoring,我目前正在尝试设置气流监控,理想情况下,在执行DAG时发送一封电子邮件,邮件中包含有关所有包含任务的一些信息,如任务的最终状态、运行时等 我目前未能解决的问题是: 如何获取与DAG运行关联的所有任务实例的状态 将邮件作为DAG中的一个组件发送有意义吗 如果是这样的话,我如何以一种简单的方式保证该任务将在所有其他任务之后运行 除此之外,我还有一个附加的pickle,我所寻找的解决方案在某种意义上必须是简单的,即它应该只有2-3行代码,或者可以泛化为Python函数,因为我的Python经验较少
- 如何获取与DAG运行关联的所有任务实例的状态
- 将邮件作为DAG中的一个组件发送有意义吗
- 如果是这样的话,我如何以一种简单的方式保证该任务将在所有其他任务之后运行
def发送任务摘要(**上下文):
tis=context['dag\u run'].get\u task\u instances()
对于tis中的ti:
打印(ti.\U dict\U)
dag=dag(…)
作业状态=蟒蛇操作员(
任务id=“作业状态”,
python\u callable=send\u task\u summary,
提供上下文=True,
trigger\u rule=TriggerRule.ALL\u完成,
dag=dag
)
leaves=[dag.tasks中任务的任务,如果不是任务,则为任务。下游_列表]
排除=[''工作状态']
对于叶中的l:
如果l.task_id不在排除中:
作业状态。设置上游(l)
如何获取与DAG关联的所有任务实例的状态
跑
我建议使用PythonOperator而不是EmailOperator,因为您需要包含获取任务状态所需信息的上下文。基于上面的代码片段,我利用send\u email
实用程序发送电子邮件
从afflow.utils.email导入发送\u电子邮件
def发送任务摘要(**上下文):
ti=上下文['task']
dr=context['dag_run']
body=ti.render_模板(无,“路径/目标/模板”,上下文)
发送电子邮件(收件人=”alan@example.com,subject=f“{dr}摘要”,html_content=body)
您还可以使用Jinja模板构建电子邮件
{%用于dag_运行中的ti。获取_任务_实例():-%}
{%endfor-%}
另一种方法是利用DAG对象的
从afflow.models导入DAG
从日期时间导入日期时间
def发送任务摘要(上下文):
tis=context['dag\u run'].get\u task\u instances()
对于tis中的ti:
打印(ti.\U dict\U)
dag=dag(
dag_id='my_dag',
计划时间间隔=“@once”,
开始日期=日期时间(2020,1,1),
失败时\u回调=发送\u任务\u摘要
)
这一切看起来都非常有希望,接近我的想象!我今天要试一试。非常感谢。工作正如所愿!特别是“`task\u instances=context['dag\u run'].get\u task\u instances()``位非常有用,再次感谢!