Я новичок в Apache Airflow. У меня уже есть несколько DAG, работающих в Airflow. Теперь я хочу добавить к нему SLA, чтобы я мог отслеживать и контролировать задачи и получать оповещения, если что-то сломается.
Я знаю, как добавить SLA в DAG default_args, используя timedelta(), как показано ниже.
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': datetime(2015, 6, 1),
'email': ['[email protected]'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
'sla': timedelta(minutes=30)
}
Но у меня есть следующие вопросы:
Мы можем указать SLA для всей DAG или только для задач по отдельности?
Какое время SLA подходит для группы обеспечения доступности баз данных, работающей в течение 30 минут?
Какое время SLA будет подходящим для задачи, которая выполняется в течение 5 минут?
Нужно ли нам также учитывать retry_delay при указании SLA?
We can specify SLA for whole DAG or only for tasks individually?
Я считаю, что соглашения об уровне обслуживания предоставляются только для для индивидуальных задач и не для ДАГ в целом. Но я думаю, что такой же эффект достижим (хотя и не могу сказать наверняка) для всей DAG, создав задачу в конце (DummyOperator
), которая зависит от всех других задач вашей DAG, и установив SLA для этой закрывающей задачи.
What would be appropriate SLA time for the DAG that is running for 30 minutes?
Это будет полностью зависеть от таких факторов, как критичность вашей задачи, частота ее отказов и т. д. Но я бы посоветовал вам начать с «достаточно строгой» временной дельты (например, 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?
Судя по документы, я бы сказал да
: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.