Сохранение логов airflow между перезапусками
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user