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

如何在Airflow中为任务配置execution_timeout及失败邮件通知

Airflow配置任务execution_timeout超时失败自动发邮件的方法

核心原理

给任务设置execution_timeout参数后,任务实际运行时长超过阈值时,Airflow会主动终止任务进程,抛出AirflowTaskTimeout异常将任务标记为失败,只要绑定任务失败的邮件通知逻辑,就能实现超时触发告警。


第一步:配置Airflow SMTP邮件服务

先在Airflow配置文件airflow.cfg中修改SMTP参数,确保邮件能正常发送:

[email]
email_backend = airflow.utils.email.send_email_smtp

[smtp]
smtp_host = 你的SMTP服务地址
smtp_starttls = True
smtp_ssl = False
smtp_user = 发件邮箱账号
smtp_password = 发件邮箱授权码/密码
smtp_port = SMTP服务端口
smtp_mail_from = 发件人显示邮箱

第二步:配置任务超时与失败通知

有两种常用配置方式,可按需选择:

方式1:使用Airflow默认邮件模板(配置简单)

不需要自定义回调函数,直接在参数中开启失败邮件、配置接收邮箱和超时时间即可。如果要给DAG下所有任务统一生效,直接写在default_args里,单个任务特殊配置可以在任务参数中覆盖:

from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.bash import BashOperator

default_args = {
    'owner': 'airflow',
    'start_date': datetime(2024, 1, 1),
    # 配置告警接收邮箱,支持多个
    'email': ['your-alert-email@example.com'],
    # 开启任务失败发邮件(超时属于失败场景,会触发该逻辑)
    'email_on_failure': True,
    # 默认全局任务超时时间,单任务可单独覆盖
    'execution_timeout': timedelta(seconds=300)
}

with DAG(
    dag_id='timeout_email_demo',
    default_args=default_args,
    schedule_interval=None,
    catchup=False
) as dag:
    t1 = BashOperator(
        task_id='sleep_for_10s',
        bash_command='sleep 10s',
        # 单独给该任务设置5秒超时,覆盖全局默认配置
        execution_timeout=timedelta(seconds=5)
    )

方式2:自定义邮件内容(灵活度高)

如果需要自定义告警邮件的内容、格式,可以通过on_failure_callback绑定自定义的邮件发送函数,超时触发失败时会自动执行该函数:

from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.bash import BashOperator
from airflow.utils.email import send_email

# 自定义失败告警回调
def timeout_failure_alert(context):
    ti = context.get('task_instance')
    # 组装邮件内容
    content = f"""
    <h3>Airflow任务执行失败告警</h3>
    <ul>
        <li>DAG ID: {ti.dag_id}</li>
        <li>Task ID: {ti.task_id}</li>
        <li>执行时间: {context.get('execution_date')}</li>
        <li>失败原因: {context.get('exception')}</li>
        <li>日志跳转: {ti.log_url}</li>
    </ul>
    """
    send_email(
        to=['your-alert-email@example.com'],
        subject=f"[Airflow告警] 任务{ti.dag_id}.{ti.task_id}执行失败",
        html_content=content
    )

default_args = {
    'owner': 'airflow',
    'start_date': datetime(2024, 1, 1),
    'execution_timeout': timedelta(seconds=300),
    # 绑定失败回调,所有任务失败(含超时)都会触发
    'on_failure_callback': timeout_failure_alert
}

with DAG(
    dag_id='custom_alert_demo',
    default_args=default_args,
    schedule_interval=None,
    catchup=False
) as dag:
    t1 = BashOperator(
        task_id='sleep_for_10s',
        bash_command='sleep 10s',
        execution_timeout=timedelta(seconds=5)
    )

注意事项

  • execution_timeout是硬超时阈值,超时后Airflow会直接杀掉任务运行进程标记失败;不要和SLA配置混淆,SLA超时只会发送错过通知,不会终止任务运行。
  • 配置在default_args中的参数会自动应用到DAG下所有任务,不需要给每个任务单独重复配置,单任务有特殊需求直接在任务初始化参数中重写对应值即可。
  • 配置SMTP后建议先测试邮件发送通路是否正常,避免告警收不到的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 19:31:40