Мониторинг DWH для дежурных
Дашборды и алерты для дежурного инженера: упавшие и зависшие запуски DAG, DAG, которые идут дольше обычного, и устаревшие метрики в продуктовых дашбордах.
attributes
- role
- lead engineer
- source
- рабочий проект, код закрыт
Задача
Хранилище данных на Airflow 1.10 выполняет около 190 DAG, которые наполняют продуктовые дашборды 25 проектов. Дежурному нужно видеть упавшие и зависшие запуски, DAG, которые идут дольше обычного, и метрики, которые не пришли вовремя, а о падениях узнавать из рабочего чата.
Решение
Мониторинг состоит из дашбордов Grafana, алертов о падениях из Airflow в корпоративный мессенджер и проверок по расписанию, которые работают как DAG.
- Дашборды: обзор для дежурного на 17 панелей с обновлением раз в 5 минут и дашборд DAG, которые идут дольше обычного, на 41 панель с обновлением раз в минуту. Данные берутся из метабазы Airflow, таблицы продуктовых метрик в PostgreSQL и метрик statsd в VictoriaMetrics
- Длительность DAG: квантили statsd_exporter были NaN в 1329 из 1362 значений, поэтому длительность считается по рядам _sum и _count
- Алерты о падении: on_failure_callback в 118 DAG отправляет сообщение со ссылкой на запуск, а в треде под ним упоминает дежурного и прикладывает traceback
- Ежечасная проверка: упавшие запуски, таски, оставшиеся в состоянии running с прошлых дат, и предупреждение, если активных воркеров меньше трех
- Проверка свежести: каждые 15 минут в течение дня метрики 25 проектов сравниваются с порогами, которые учитывают ожидаемую задержку метрики и проекта. Отчет приходит сообщением с тредом по каждому проекту и индикатором прогресса
- График дежурств хранится в Airflow, из него алерты берут, кого упомянуть
Стек
Airflow 1.10 (callbacks, PythonOperator, модели SQLAlchemy для метабазы), PostgreSQL, statsd_exporter, VictoriaMetrics, Grafana, Bot API мессенджера, Python: requests, pandas, Jinja2.
Моя роль
Lead engineer: спроектировал мониторинг для дежурных: дашборды, формат алертов и проверки по расписанию.
Результат
Падения 118 DAG приходят в рабочий чат с упоминанием дежурного и traceback в треде. Об устаревших метриках дежурный узнает по каждому проекту в течение дня, о зависших тасках и нехватке воркеров - раз в час.