мелкое — крупно,
в глубоком разговоре
мудрость приходит
по вопросам сюда: @aigul_sea
Post #471
2.05K

Как мониторить подвисшие сенсоры?
Начнем с того, что в Airflow есть несколько состояний для таски:
⭐️none - пока отдыхает
⭐️scheduled - должна быть запущена, все зависимости выполнены
⭐️queued - ждет свободный воркер
⭐️running - работает
⭐️success - успешно завершилась
⭐️restarting - перезапустили
⭐️failed - упала
⭐️skipped - пропущена
⭐️upstream_failed - упала предыдущая таска, которая нам нужна
⭐️up_for_retry - упала, но будет перезапущена
⭐️up_for_reschedule - сенсор будет перезапущен
⭐️deferred - отложена и ждет триггер
⭐️removed - удалена из дага после запуска
Подвисшие сенсоры уходят в статус deferred. У нас они имеют такой нейминг - mytask_awaiting_somedag. Я написала себе запрос, который выводит:
⭕️название дага, на который смотрит сенсор
⭕️количество сенсоров, которые ждут этот даг
⭕️общее количество подвисших сенсоров
И так можно сразу понять, на какой даг смотрит наибольшее количество сенсоров, и посмотреть причину
Начнем с того, что в Airflow есть несколько состояний для таски:
⭐️none - пока отдыхает
⭐️scheduled - должна быть запущена, все зависимости выполнены
⭐️queued - ждет свободный воркер
⭐️running - работает
⭐️success - успешно завершилась
⭐️restarting - перезапустили
⭐️failed - упала
⭐️skipped - пропущена
⭐️upstream_failed - упала предыдущая таска, которая нам нужна
⭐️up_for_retry - упала, но будет перезапущена
⭐️up_for_reschedule - сенсор будет перезапущен
⭐️deferred - отложена и ждет триггер
⭐️removed - удалена из дага после запуска
Подвисшие сенсоры уходят в статус deferred. У нас они имеют такой нейминг - mytask_awaiting_somedag. Я написала себе запрос, который выводит:
⭕️название дага, на который смотрит сенсор
⭕️количество сенсоров, которые ждут этот даг
⭕️общее количество подвисших сенсоров
И так можно сразу понять, на какой даг смотрит наибольшее количество сенсоров, и посмотреть причину
with sensored as (
SELECT
substr(
task_id,
strpos(task_id, 'awaiting_') + length('awaiting_')
) as sensor,
dag_id
FROM airflow.public.task_instance
WHERE state = 'deferred'
)
select
sensor,
count(1) over(partition by sensor) as sensor_cnt,
count(1) over() as total_cnt,
dag_id
from sensored
order by 2 desc, sensor, dag_id;
- 👍 23
- 🔥 7
- ❤ 5























