如何在Airflow中设置SLA?

时间:2017-05-19 13:34:59

标签: airflow apache-airflow airflow-scheduler

我想在传感器操作员中设置SLA。 documentation对使用它并不太清楚。所以我使用S3KeySensor运算符进行了测试,该运算符正在查找不存在的文件。我将sla设置为30秒,我希望在UI中在SLA未命中的30秒后看到记录 - 但它没有发生。我究竟做错了什么?

inputsensor = S3KeySensor(
    task_id='check_for_files_in_s3',
    bucket_key='adp/backload/20136585/',
    wildcard_match=True,
    bucket_name='weblogs-raw',
    s3_conn_id='AWS_S3_CENTRAL',
    timeout=120,
    poke_interval=10,
    sla=timedelta(seconds=30),
    dag=dag)

inputsensor.set_downstream(next_step)

4 个答案:

答案 0 :(得分:4)

SLA或服务级别协议使您可以指定应该在其中完成任务的时间增量。如果当前时间与execution_start时间之间的时间间隔超过指定的SLA,则将其视为任务的SLA丢失。

摘自文档-https://airflow.apache.org/concepts.html#slas

  

服务级别协议或任务或DAG应该成功的时间可以在任务级别设置为时间增量。如果到那时一个或多个实例还没有成功,则会发送一封警报电子邮件,详细列出错过其SLA的任务列表。该事件也记录在数据库中,并可以在Web UI中的“浏览”->“缺少的SLA”下使用,可以在其中分析和记录事件。

我经常观察到,即使任务不是预期的行为,但如果任务进入SLA时间范围内的运行状态,气流也不会触发SLA未命中。这里可能也是一样。我建议您在next_step上添加30秒的SLA,并且我相信它会触发,因为S3KeySensor会花费30秒以上的时间来完成。

答案 1 :(得分:2)

'sla': timedelta(hours=2),

https://github.com/apache/incubator-airflow/blob/master/airflow/example_dags/tutorial.py#L44

这一行有一个来自气流Git的例子。

答案 2 :(得分:1)

根据documentation SLA表示计划周期结束后的时间增量。因此,如果您的计划时间间隔是'@daily'sla=timedelta(hours=1),那么Airflow将在1:00 AM(计划时间超过一小时)检查SLA丢失。

答案 3 :(得分:0)

小时内

'sla': timedelta(hours=2)

几分钟之内

'sla': timedelta(minutes=120)