Сохранение логов airflow между перезапусками

This commit is contained in:
2026-01-09 13:37:14 +03:00
parent c3b2050cc4
commit 272013774b
4 changed files with 19 additions and 8 deletions
+3 -2
View File
@@ -22,9 +22,10 @@ stop:
docker compose -f docker-compose.yml stop docker compose -f docker-compose.yml stop
down: down:
docker compose -f docker-compose.yml down -v docker compose -f docker-compose.yml down
clean: down clean:
docker compose -f docker-compose.yml down -v
airflow-init: airflow-init:
docker compose -f docker-compose.yml run --rm airflow-init docker compose -f docker-compose.yml run --rm airflow-init
+8 -4
View File
@@ -82,11 +82,12 @@ CSV-файлы после выполнения DAG остаются в дире
Если после изменений что‑то «сломалось»: Если после изменений что‑то «сломалось»:
```bash ```bash
make down # Остановить и стереть данные в контейнерах make down # Остановить и удалить контейнеры/сети (volumes сохраняются)
make up make up
``` ```
Это помогает, когда Greenplum не стартует из‑за «грязной» остановки и внутренних файлов. Если проблема связана с «грязной» остановкой и данными в томах (например, Greenplum не стартует),
используйте полный reset: `make clean && make up` (данные в Docker-томах будут потеряны).
--- ---
@@ -240,6 +241,9 @@ make bookings-psql # Подключиться к демобазе bookings
# Проверка данных # Проверка данных
make logs # Следить за логами Airflow make logs # Следить за логами Airflow
# Логи задач Airflow сохраняются в Docker-томе `airflow_logs`
# и переживают `docker compose down`/`up` (удаляются при `docker compose down -v` / `make clean`).
# Контроль генерации bookings # Контроль генерации bookings
docker compose -f docker-compose.yml exec bookings-db bash -lc 'PGPASSWORD="$POSTGRES_PASSWORD" psql -U "$POSTGRES_USER" -d demo -c "SELECT busy();"' docker compose -f docker-compose.yml exec bookings-db bash -lc 'PGPASSWORD="$POSTGRES_PASSWORD" psql -U "$POSTGRES_USER" -d demo -c "SELECT busy();"'
# busy() = t — генерация ещё идёт; f — завершена. При необходимости можно вызвать CALL abort(); и запустить генерацию заново. # busy() = t — генерация ещё идёт; f — завершена. При необходимости можно вызвать CALL abort(); и запустить генерацию заново.
@@ -409,12 +413,12 @@ load_bookings_to_stg = PostgresOperator(
| Проблема | Решение | | Проблема | Решение |
|----------|---------| |----------|---------|
| Airflow UI не открывается | Дождитесь сообщения `Listening at: http://0.0.0.0:8080` в логах (`make logs`) | | Airflow UI не открывается | Дождитесь сообщения `Listening at: http://0.0.0.0:8080` в логах (`make logs`) |
| После `docker compose stop/start` Airflow UI не отвечает, а `airflow-webserver` в `Exited (1)` | Это обычно stale PID-файл Gunicorn (`/opt/airflow/airflow-webserver.pid`). Пересоздайте webserver: `docker compose up -d --force-recreate airflow-webserver` (или просто `make up`). | | `database "demo" does not exist` в bookings‑DAG | Вы сделали полный reset с удалением томов (`docker compose down -v` / `make clean`), поэтому демобаза bookings не установлена. Запустите `make bookings-init` и повторите DAG. |
| Ошибка подключения к Greenplum | Убедитесь, что контейнер `greenplum` стал статусом `healthy` (проверьте `docker compose ps`) | | Ошибка подключения к Greenplum | Убедитесь, что контейнер `greenplum` стал статусом `healthy` (проверьте `docker compose ps`) |
| Не открывается порт 8080/5433/5434/5435 | Проверьте, что эти порты не заняты локальными сервисами; при необходимости остановите их или измените порты в `.env`/`docker-compose.yml` | | Не открывается порт 8080/5433/5434/5435 | Проверьте, что эти порты не заняты локальными сервисами; при необходимости остановите их или измените порты в `.env`/`docker-compose.yml` |
| Нет файла в `./data` после запуска DAG | Проверьте логи задачи `generate_csv`, убедитесь, что `CSV_DIR` смонтирован в docker-compose | | Нет файла в `./data` после запуска DAG | Проверьте логи задачи `generate_csv`, убедитесь, что `CSV_DIR` смонтирован в docker-compose |
| Команда `make` не найдена | Используйте полные команды `docker compose` или установите make | | Команда `make` не найдена | Используйте полные команды `docker compose` или установите make |
| Greenplum не стартует/падает при старте | Выполните `make down`, затем `make up` (очищает тома и поднимает заново, включая авто‑инициализацию Airflow) | | Greenplum не стартует/падает при старте | Попробуйте `make down && make up`. Если не помогло — полный reset: `make clean && make up` (удалит тома). |
| `protocol "pxf" does not exist` | Перезапустите `greenplum` и повторите `bookings_stg_ddl`/`make ddl-gp` — расширение `pxf` создаётся автоматически при старте контейнера. | | `protocol "pxf" does not exist` | Перезапустите `greenplum` и повторите `bookings_stg_ddl`/`make ddl-gp` — расширение `pxf` создаётся автоматически при старте контейнера. |
| PXF не отвечает (Connection refused к порту 5888) | Проверьте `pxf cluster status` в контейнере `greenplum` и перезапустите сервис `greenplum`. | | PXF не отвечает (Connection refused к порту 5888) | Проверьте `pxf cluster status` в контейнере `greenplum` и перезапустите сервис `greenplum`. |
| PXF не подхватывает изменения конфигов | Пересоберите образ (`make build`) и перезапустите `greenplum`. Для принудительной перезаписи файлов задайте `PXF_SEED_OVERWRITE=1`. | | PXF не подхватывает изменения конфигов | Пересоберите образ (`make build`) и перезапустите `greenplum`. Для принудительной перезаписи файлов задайте `PXF_SEED_OVERWRITE=1`. |
+2 -1
View File
@@ -37,7 +37,8 @@
- Проверить, что все 5 задач Success и логи содержат `Проверка пройдена`. - Проверить, что все 5 задач Success и логи содержат `Проверка пройдена`.
- DAG `bookings_to_gp_stage` (полная проверка цепочки bookings → Greenplum STG): - DAG `bookings_to_gp_stage` (полная проверка цепочки bookings → Greenplum STG):
- предварительно выполнить один раз: `make bookings-init` (инициализация демо‑БД bookings) и `make ddl-gp` (создаёт `stg.bookings_ext` и `stg.bookings` в Greenplum); - предварительно выполнить один раз: `make bookings-init` (установка демобазы `demo` в контейнере `bookings-db`) и `make ddl-gp` (создаёт `stg.bookings_ext` и `stg.bookings` в Greenplum);
- важно: DAG `bookings_stg_ddl` **не** создаёт базу `demo` в `bookings-db`; если вы делали `docker compose down -v` / `make clean`, `make bookings-init` обязателен;
- включить DAG `bookings_to_gp_stage` и запустить `Trigger DAG`; - включить DAG `bookings_to_gp_stage` и запустить `Trigger DAG`;
- убедиться, что все задачи (`generate_bookings_day`, `load_bookings_to_stg`, `check_row_counts`, `finish_summary`) завершились со статусом Success; - убедиться, что все задачи (`generate_bookings_day`, `load_bookings_to_stg`, `check_row_counts`, `finish_summary`) завершились со статусом Success;
- при желании проверить данные: в `bookings-db` появился новый день, а в Greenplum в `stg.bookings` — строки с актуальным `batch_id` (см. пример запросов в разделе 5). - при желании проверить данные: в `bookings-db` появился новый день, а в Greenplum в `stg.bookings` — строки с актуальным `batch_id` (см. пример запросов в разделе 5).
+6 -1
View File
@@ -10,6 +10,7 @@ x-airflow-common-volumes: &airflow-volumes
- ./airflow/dags:/opt/airflow/dags - ./airflow/dags:/opt/airflow/dags
- ./sql:/sql:ro - ./sql:/sql:ro
- airflow_data:/opt/airflow/data - airflow_data:/opt/airflow/data
- airflow_logs:/opt/airflow/logs
x-airflow-common-depends: &airflow-depends x-airflow-common-depends: &airflow-depends
pgmeta: pgmeta:
@@ -108,6 +109,7 @@ services:
- ./airflow/dags:/opt/airflow/dags - ./airflow/dags:/opt/airflow/dags
- ./sql:/sql:ro - ./sql:/sql:ro
- airflow_data:/opt/airflow/data - airflow_data:/opt/airflow/data
- airflow_logs:/opt/airflow/logs
- ./airflow/requirements.txt:/opt/airflow/requirements.txt - ./airflow/requirements.txt:/opt/airflow/requirements.txt
healthcheck: healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/health"] test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
@@ -132,6 +134,7 @@ services:
- ./airflow/dags:/opt/airflow/dags - ./airflow/dags:/opt/airflow/dags
- ./sql:/sql:ro - ./sql:/sql:ro
- airflow_data:/opt/airflow/data - airflow_data:/opt/airflow/data
- airflow_logs:/opt/airflow/logs
- ./airflow/requirements.txt:/opt/airflow/requirements.txt - ./airflow/requirements.txt:/opt/airflow/requirements.txt
depends_on: depends_on:
<<: *airflow-depends <<: *airflow-depends
@@ -150,10 +153,11 @@ services:
- ./airflow/dags:/opt/airflow/dags - ./airflow/dags:/opt/airflow/dags
- ./sql:/sql:ro - ./sql:/sql:ro
- airflow_data:/opt/airflow/data - airflow_data:/opt/airflow/data
- airflow_logs:/opt/airflow/logs
command: > command: >
bash -lc " bash -lc "
set -e; set -e;
mkdir -p /opt/airflow/data && chown -R airflow:root /opt/airflow/data; mkdir -p /opt/airflow/data /opt/airflow/logs && chown -R airflow:root /opt/airflow/data /opt/airflow/logs;
# Дожидаемся готовности БД ретрая миграции # Дожидаемся готовности БД ретрая миграции
for i in {1..30}; do for i in {1..30}; do
su -s /bin/bash airflow -c \"PATH='/home/airflow/.local/bin:$${PATH}' airflow db migrate\" && break || echo 'waiting for pgmeta' && sleep 3; su -s /bin/bash airflow -c \"PATH='/home/airflow/.local/bin:$${PATH}' airflow db migrate\" && break || echo 'waiting for pgmeta' && sleep 3;
@@ -170,3 +174,4 @@ volumes:
bookings_data: bookings_data:
greenplum_data: greenplum_data:
airflow_data: airflow_data:
airflow_logs: