diff --git a/04 - Знакомство с интерфейсом Airflow для начинающих.md b/04 - Знакомство с интерфейсом Airflow для начинающих.md index f5ae369..e82e54c 100644 --- a/04 - Знакомство с интерфейсом Airflow для начинающих.md +++ b/04 - Знакомство с интерфейсом Airflow для начинающих.md @@ -1,114 +1,88 @@ # Знакомство с интерфейсом Airflow для начинающих -Когда вы создаете ETL-процессы для автоматической обработки данных, важно иметь удобный способ отслеживать их работу, находить ошибки и управлять выполнением. Именно для этого в Apache Airflow предусмотрен веб-интерфейс — ваш главный помощник в повседневной работе с пайплайнами. +В предыдущих главах вы познакомились с основными понятиями Apache Airflow и поняли, из каких компонентов он состоит внутри. Теперь самое время открыть веб‑интерфейс — главный инструмент для ежедневной работы с пайплайнами. -В этом материале мы подробно разберем, как устроен интерфейс Airflow версии 2.5 и какие возможности он предоставляет для мониторинга и управления вашими процессами обработки данных. +Через UI вы будете: -# Домашняя страница Airflow +- смотреть список DAG-ов и их статусы; +- запускать пайплайны вручную и останавливать их; +- разбираться, почему задачи упали, и перезапускать их; +- анализировать время выполнения и находить узкие места. -После входа в систему вы попадете на главную страницу — центральную панель управления, где собрана вся ключевая информация о ваших пайплайнах. Не пугайтесь обилия элементов и цветов — все устроено логично и интуитивно понятно. +В этой главе мы сосредоточимся на ключевых экранах интерфейса Airflow 2.9.x и будем опираться на стенд из папки `airflow-docker` в этом репозитории. -По сути, это обычная таблица, где каждая строка представляет собой один DAG (Directed Acyclic Graph) — ваш пайплайн обработки данных, а столбцы содержат различную информацию о нем. +## Главная страница: список DAG-ов (DAGs View) -## Основные элементы главной страницы +После авторизации в Airflow вы попадаете на главную страницу — список всех DAG-ов. Это экран, откуда начинается почти любая работа. -**Название DAG** — в первом столбце отображается список всех зарегистрированных в системе пайплайнов. По умолчанию Airflow включает демонстрационные примеры различных операторов. Список отсортирован по алфавиту для удобства поиска. +Здесь полезно знать несколько ключевых колонок (названия — как в англоязычном UI): -![](_attachments/dag_list_status_indicators.png) +- **DAG / DAG ID** — идентификатор пайплайна; клик по нему открывает страницу конкретного DAG-а. +- **Owner** — владелец пайплайна (на кого «вешать» вопросы и инциденты). +- **Schedule** — расписание запуска в виде cron-выражения или пресета. +- **Last Run / Next Run** — когда DAG запускался в последний раз и когда запустится по расписанию. +- **Recent Tasks** — короткая сводка по результатам последних запусков (сколько задач `success` / `failed` / `running` и т.п.). +- **Actions** — быстрые действия: переключатель **Pause / Unpause** (включить/выключить выполнение по расписанию), кнопка **Trigger DAG** (ручной запуск), ссылки на детальные представления: **Grid**, **Graph**, иногда **Code**. -**Переключатели активности** — напротив каждого DAG находится кнопка-выключатель, позволяющая мгновенно активировать или деактивировать пайплайн прямо из веб-интерфейса без изменения кода. +На этом экране вы решаете простой вопрос: +«С моими DAG-ами всё более-менее нормально или где-то горит?» -![](_attachments/dag_toggle_switches.png) +## Страница DAG: главное рабочее место -**Владелец процесса** — каждый пайплайн имеет ответственного владельца. Это особенно полезно в командной работе, когда несколько инженеров создают и поддерживают различные ETL-процессы. Владелец отвечает за мониторинг и корректную работу своего DAG. +Когда на главной странице (**DAGs View**) вы нажимаете на `DAG ID`, открывается страница конкретного пайплайна. -![](_attachments/dag_owner_field.png) +Верхняя часть страницы DAG: -**Статус выполнения** — цветные индикаторы с цифрами показывают количество и состояние последних запусков DAG: -- 🔴 Красный — завершено с ошибкой (failed) -- 🟡 Желтый — ожидает повторного запуска (retry) -- 🟢 Зеленый — выполняется в данный момент (running) -- 🟢 Тёмно-зеленый — успешно завершено (success) +* переключатель **Pause / Unpause**; +* кнопка **Trigger DAG** (ручной запуск); +* фильтр по дате, типу и состоянию запусков (**Run Type**, **Run State**, период по календарю); +* небольшой индикатор статусов задач (цветные ярлыки `running`, `failed`, `success` и т.п.). -![](_attachments/dag_status_colors.png) +> Для экспериментов удобно использовать стенд из папки `airflow-docker` в этом репозитории — там Airflow 2.9.2, и интерфейс будет выглядеть так же, как в учебнике. -**Расписание** — указывает, когда и с какой периодичностью запускается пайплайн. Используется формат cron, который может показаться сложным на первый взгляд. Для перевода cron-выражений в понятный формат рекомендуем использовать сервис [Crontab.guru](https://crontab.guru/). +Чуть ниже — горизонтальное меню вкладок: -![](_attachments/dag_schedule_field.png) +* **Details** + Краткое резюме DAG: количество задач, типы операторов, расписание, теги, статистика по запускам. Это удобная точка входа: «что это за DAG и как он в целом живёт». -**Последний запуск** — показывает дату и время самого свежего выполнения DAG, будь то автоматический запуск по расписанию или ручной запуск. +* **Graph** + Граф зависимостей задач. Здесь хорошо видно, какие задачи идут последовательно, какие — параллельно, где ветвления. + Клик по задаче открывает панель с действиями: **View Log**, **Clear**, **Mark Success / Mark Failed**, **Run** и др. -![](_attachments/dag_last_run_field.png) +* **Gantt** + Диаграмма Ганта для выбранного запуска DAG. Показывает, сколько времени заняла каждая задача и где они выполнялись параллельно. По ней удобно искать «бутылочные горлышки» — самые долгие шаги пайплайна. -**Статус задач** — детальная информация о последнем запуске: сколько задач находится в каждом статусе. Это помогает быстро оценить общее состояние пайплайна без необходимости погружаться в детали. +* **Run Duration** + История длительности запусков DAG. Помогает увидеть, не стали ли запуски в целом работать заметно дольше, и отследить, после какого изменения время выполнения выросло. -![](_attachments/dag_task_status_field.png) +* **Calendar** + Календарный вид истории запусков: по дням и месяцам видно, когда DAG запускался и как часто были ошибки. -**Быстрые действия** — в последнем столбце расположены кнопки для немедленного выполнения операций: запуск, обновление и удаление DAG. На практике этими кнопками пользуются редко. +* **Code** + Исходный код DAG, который сейчас задеплоен в Airflow. Быстрый способ проверить, что в среде действительно лежит та версия DAG, которую вы ждёте (и что изменения из Git уже подхватились). -Главная страница дает вам общее представление о состоянии всех ваших процессов. Но для детальной работы с конкретным пайплайном нужно перейти внутрь — просто кликните по названию интересующего DAG. +* **Audit Log** + Журнал действий по DAG: кто запускал, очищал задачи, менял состояние и т.д. Полезен, когда нужно понять, «кто и что нажал» перед тем, как всё сломалось. -![](_attachments/dag_click_to_open.png) +### Как работать с задачами (Tasks) -# Страница конкретного DAG +Независимо от вкладки (чаще всего — **Graph** или **Gantt**), логика одна: -После перехода внутрь DAG вы увидите набор вкладок с различной информацией: от визуального представления структуры пайплайна до детальных логов выполнения и исходного кода. +1. Находите нужную задачу. +2. Кликаете по ней — справа (или во всплывающем окне) появляется панель **Task Instance**. +3. В этой панели доступны: -## Древовидное представление (Tree View) + * **View Log** — открыть логи; + * **Clear** — очистить состояние для повторного запуска; + * **Mark Success / Mark Failed** — вручную выставить статус; + * **Run** — запустить задачу сейчас. -По умолчанию открывается вкладка с древовидной структурой задач. Здесь отображаются все запуски DAG с указанием статуса каждой задачи, времени выполнения и других метрик мониторинга. +Через дополнительные опции **Clear** можно захватывать **upstream** / **downstream** задачи и несколько запусков сразу — это основной инструмент «перезапуска кусочка» DAG. -Вы можете увидеть: -- Состав DAG и последовательность выполнения задач -- Тип оператора для каждой задачи -- Историю запусков в виде цветных квадратов напротив каждой задачи +Подробное описание всех экранов Airflow (с актуальными скриншотами) есть в официальной документации: [UI / Screenshots (Apache Airflow 2.9.3)][1]. -![](_attachments/tree_view_example.png) -![](_attachments/tree_view_zoomed.png) +Там же описаны **DAGs View**, **Grid View**, **Graph View**, **Gantt Chart**, **Task Duration**, **Landing Times**, **Code View**, **Audit Log** и другие разделы UI. -## Графическое представление (Graph View) +--- -Когда DAG содержит много задач, древовидное представление может быть неудобным. В таких случаях используйте вкладку Graph View — она показывает пайплайн в виде наглядного графа с четкими связями между задачами. - -![](_attachments/graph_view_example.png) -![](_attachments/graph_view_detailed.png) - -При клике на любую задачу открывается подробное окно с двумя основными разделами: - -### Информация о задаче -- **Просмотр логов** — переход к странице с полным выводом выполнения задачи (одна из самых часто используемых функций) -- **Детали выполнения** — подробная информация о конкретном запуске задачи - -### Управление задачей -Доступны четыре основных действия: -- **Запустить** — выполнить задачу немедленно -- **Очистить состояние** — сбросить статус задачи для повторного выполнения -- **Отметить как неудачную** — вручную установить статус ошибки -- **Отметить как успешную** — вручную установить статус успеха - -Каждое действие можно комбинировать с дополнительными опциями: -- **Игнорировать зависимости** — запуск без проверки зависимостей от других задач -- **Работать с прошлыми/будущими запусками** — применить действие ко всем запускам в определенном временном диапазоне -- **Влиять на связанные задачи** — применить действие к предыдущим (upstream) или последующим (downstream) задачам - -Наиболее популярная комбинация — **Downstream + Recursive + Clear**, которая сбрасывает текущую задачу и все зависящие от нее задачи в рамках одного запуска. - -## Анализ времени выполнения (Task Duration) - -Вкладка Task Duration автоматически строит графики на основе истории выполнения, показывая, сколько времени занимает каждая задача при каждом запуске. Это помогает выявлять узкие места и отслеживать изменения производительности. - -![](_attachments/task_duration_chart.png) - -## Диаграмма Ганта (Gantt) - -Диаграмма Ганта визуализирует распределение времени выполнения задач в рамках одного запуска DAG. Это отличный инструмент для определения самых ресурсоемких операций и планирования оптимизации. - -![](_attachments/gantt_chart_example.png) - -## Исходный код (Code) - -Вкладка Code отображает актуальный код DAG, который Airflow использует для выполнения. Это особенно полезно для проверки, что изменения из вашего Git-репозитория успешно загружены в систему и готовы к выполнению. - -![](_attachments/dag_code_view.png) - -Теперь вы знакомы с основными возможностями веб-интерфейса Airflow для мониторинга и управления вашими процессами обработки данных. Эти знания помогут вам эффективно работать с пайплайнами и быстро решать возникающие проблемы. \ No newline at end of file +[1]: https://airflow.apache.org/docs/apache-airflow/2.9.3/ui.html "UI / Screenshots — Airflow Documentation" diff --git a/_attachments/dag_click_to_open.png b/_attachments/dag_click_to_open.png deleted file mode 100644 index 99675b7..0000000 Binary files a/_attachments/dag_click_to_open.png and /dev/null differ diff --git a/_attachments/dag_code_view.png b/_attachments/dag_code_view.png deleted file mode 100644 index 47d965b..0000000 Binary files a/_attachments/dag_code_view.png and /dev/null differ diff --git a/_attachments/dag_last_run_field.png b/_attachments/dag_last_run_field.png deleted file mode 100644 index 8124565..0000000 Binary files a/_attachments/dag_last_run_field.png and /dev/null differ diff --git a/_attachments/dag_list_status_indicators.png b/_attachments/dag_list_status_indicators.png deleted file mode 100644 index 702f2cc..0000000 Binary files a/_attachments/dag_list_status_indicators.png and /dev/null differ diff --git a/_attachments/dag_owner_field.png b/_attachments/dag_owner_field.png deleted file mode 100644 index ec7d3a6..0000000 Binary files a/_attachments/dag_owner_field.png and /dev/null differ diff --git a/_attachments/dag_schedule_field.png b/_attachments/dag_schedule_field.png deleted file mode 100644 index 2b1fe3f..0000000 Binary files a/_attachments/dag_schedule_field.png and /dev/null differ diff --git a/_attachments/dag_status_colors.png b/_attachments/dag_status_colors.png deleted file mode 100644 index 7e08c14..0000000 Binary files a/_attachments/dag_status_colors.png and /dev/null differ diff --git a/_attachments/dag_task_status_field.png b/_attachments/dag_task_status_field.png deleted file mode 100644 index de6f828..0000000 Binary files a/_attachments/dag_task_status_field.png and /dev/null differ diff --git a/_attachments/dag_toggle_switches.png b/_attachments/dag_toggle_switches.png deleted file mode 100644 index 40971bb..0000000 Binary files a/_attachments/dag_toggle_switches.png and /dev/null differ diff --git a/_attachments/gantt_chart_example.png b/_attachments/gantt_chart_example.png deleted file mode 100644 index ea713b4..0000000 Binary files a/_attachments/gantt_chart_example.png and /dev/null differ diff --git a/_attachments/graph_view_detailed.png b/_attachments/graph_view_detailed.png deleted file mode 100644 index b323b49..0000000 Binary files a/_attachments/graph_view_detailed.png and /dev/null differ diff --git a/_attachments/graph_view_example.png b/_attachments/graph_view_example.png deleted file mode 100644 index fc94612..0000000 Binary files a/_attachments/graph_view_example.png and /dev/null differ diff --git a/_attachments/task_duration_chart.png b/_attachments/task_duration_chart.png deleted file mode 100644 index 4f7888c..0000000 Binary files a/_attachments/task_duration_chart.png and /dev/null differ diff --git a/_attachments/tree_view_example.png b/_attachments/tree_view_example.png deleted file mode 100644 index 3a3bc03..0000000 Binary files a/_attachments/tree_view_example.png and /dev/null differ diff --git a/_attachments/tree_view_zoomed.png b/_attachments/tree_view_zoomed.png deleted file mode 100644 index a50655a..0000000 Binary files a/_attachments/tree_view_zoomed.png and /dev/null differ diff --git a/airflow-docker/data/.gitkeep b/airflow-docker/data/.gitkeep old mode 100644 new mode 100755 diff --git a/airflow-docker/data/input/.gitkeep b/airflow-docker/data/input/.gitkeep old mode 100644 new mode 100755 diff --git a/airflow-docker/data/output/.gitkeep b/airflow-docker/data/output/.gitkeep old mode 100644 new mode 100755