Мониторинг 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 в треде. Об устаревших метриках дежурный узнает по каждому проекту в течение дня, о зависших тасках и нехватке воркеров - раз в час.

Все проекты