1

我是 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,还是只为单独的任务指定 SLA?

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

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

  4. 我们是否需要在指定 SLA 时也考虑 retry_delay?

4

1 回答 1

2

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

我相信 SLA 仅适用于单个任务,而不适用于整个DAG 。但我认为,通过在末尾创建一个DummyOperator依赖于 DAG 的所有其他任务的任务(


对于运行 30 分钟的 DAG,什么是合适的 SLA 时间?

这将完全取决于您的任务的关键性、失败率等因素。但我建议您从“足够严格”的时间增量(如 5 分钟)开始,然后从那里调整(增加或减少)


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

同上,从 1 分钟开始,然后从那里开始调整


我们是否需要在指定 SLA 时也考虑 retry_delay?

按照文档,我会说是的

: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.
于 2019-07-24T06:03:02.253 回答