如何在 Airflow 中将 SLA 添加到 ETL 作业 运行?

How to add SLA's to ETL jobs running in Airflow?

我是 Apache Airflow 的新手。我在 Airflow 中已经有一些 DAG 运行。现在我想向其中添加 SLA,以便我可以跟踪和监控任务并在出现问题时收到警报。

我知道如何使用 timedelta() 将 SLA 添加到 DAG default_args,如下所示

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2015, 6, 1),
    'email': ['airflow@example.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
    'sla': timedelta(minutes=30)
}

但我有以下问题:

  1. 我们可以为整个 DAG 指定 SLA 还是只为单独的任务指定?

  2. 对于 运行 30 分钟的 DAG,SLA 时间是多少合适?

  3. 对于 运行 5 分钟的任务,SLA 时间是多少合适?

  4. 我们在指定 SLA 时还需要考虑 retry_delay 吗?

We can specify SLA for whole DAG or only for tasks individually?

我认为 SLA 仅作为一个整体提供 for individual tasks and not for DAG。但我认为通过在末尾创建一个任务 (DummyOperator) 来实现整个 DAG 的相同效果(虽然不能肯定地说),该任务依赖于你的 DAG 的所有其他任务并在其上设置 SLA关闭任务


What would be appropriate SLA time for the DAG that is running for 30 minutes?

这完全取决于任务的关键性、失败率等因素。但我建议您从 'strict-enough' timedelta(例如 5 分钟)开始,然后对其进行调整(增加或减少) 从那里


What would be appropriate SLA time for a task that is running for 5 minutes?

同上,从 1 分钟开始调整


Do we need to consider retry_delay as well while specifying SLA?

按照docs,我会说是

:param sla: time by which the job is expected to succeed. Note that
        this represents the ``timedelta`` after the period is closed. For
        example if you set an SLA of 1 hour, the scheduler would send an email
        soon after 1:00AM on the ``2016-01-02`` if the ``2016-01-01`` instance
        has not succeeded yet.