feat(infra): стенд целиком — Kafka, Airflow 3, Superset и мониторинг одной командой #17

Merged
ddmitry merged 1 commits from feat/13-stand-full into main 2026-07-31 09:35:49 +03:00
Owner

Закрывает #13.

Зачем

Рядом с кластером ClickHouse не хватало остального стенда, а поднимать его по кускам — значит каждый раз вспоминать порядок. Теперь make up даёт стенд целиком, а make smoke честно отвечает, работает он или нет.

Что

  • Kafka в режиме KRaft (без ZooKeeper), Postgres под метаданные, Airflow 3.3 четырьмя сервисами (api-server, планировщик, обработчик DAG, разовая инициализация) и Superset 6.1 с драйверами ClickHouse и Postgres.
  • Мониторинг: Prometheus снимает метрики с обеих нод ClickHouse и keeper, Grafana получает подготовленный источник данных.
  • Подключение Airflow ведёт на ноду 1, подключение Superset — на ноду 2. Это осознанная ловушка правильных ошибок: забытый ON CLUSTER проявится в дашборде сам.
  • scripts/stand-smoke.sh — сквозная проверка из 24 пунктов. Не «контейнер запущен»: временный топик в Kafka создаётся, находится и удаляется; Prometheus видит ровно три цели ClickHouse со значением up=1; Airflow пускает по учётным данным и реально запускает пример DAG через API; Superset своим test-db проверяет подключение, вынутое из собственных метаданных; расход памяти сверяется с порогом 3,4 ГБ.
  • make config-test — статические ворота: Compose, синтаксис Bash и Python, стражи README. Стражи smoke проверяют, что отчёт краснеет на сломанном стенде и снова зеленеет после восстановления.
  • Решения записаны в docs/adr/0001-stand-services.md, состав стенда и порядок работы — в README.md.

Проверка

На чистых томах: make cleancp .env.example .envmake up (1 мин 51 с) → make smoke — 24 пройдено, 0 ошибок, 2171 MiB.
Перезапуск: make downmake up (1 мин 43 с) → make smoke — 24/0.
Также зелены make config-test (3/0 и 5/0, в том числе под окружением без ripgrep), make smoke-cluster (8/8) и make smoke-guards (3/0 и 3/0).

На что смотреть при ревью

  • Ловушка нод: compose.yaml — подключения Airflow и Superset смотрят в разные ноды намеренно.
  • Честность проверок: scripts/stand-smoke.sh ничего не чинит по дороге — проверка источника данных Grafana читает файл настройки и не перезагружает его, иначе она заверяла бы то, что сама только что починила.
  • infra/airflow/init.sh — разовая инициализация работает от root ровно затем, чтобы отдать свежий том airflow_auth пользователю airflow, и сразу сбрасывает права через runuser; все монтирования репозитория в этот контейнер — только на чтение. Обоснование в ADR.
Закрывает #13. ## Зачем Рядом с кластером ClickHouse не хватало остального стенда, а поднимать его по кускам — значит каждый раз вспоминать порядок. Теперь `make up` даёт стенд целиком, а `make smoke` честно отвечает, работает он или нет. ## Что - Kafka в режиме KRaft (без ZooKeeper), Postgres под метаданные, Airflow 3.3 четырьмя сервисами (api-server, планировщик, обработчик DAG, разовая инициализация) и Superset 6.1 с драйверами ClickHouse и Postgres. - Мониторинг: Prometheus снимает метрики с обеих нод ClickHouse и keeper, Grafana получает подготовленный источник данных. - Подключение Airflow ведёт на ноду 1, подключение Superset — на ноду 2. Это осознанная ловушка правильных ошибок: забытый `ON CLUSTER` проявится в дашборде сам. - `scripts/stand-smoke.sh` — сквозная проверка из 24 пунктов. Не «контейнер запущен»: временный топик в Kafka создаётся, находится и удаляется; Prometheus видит ровно три цели ClickHouse со значением `up=1`; Airflow пускает по учётным данным и реально запускает пример DAG через API; Superset своим `test-db` проверяет подключение, вынутое из собственных метаданных; расход памяти сверяется с порогом 3,4 ГБ. - `make config-test` — статические ворота: Compose, синтаксис Bash и Python, стражи README. Стражи smoke проверяют, что отчёт краснеет на сломанном стенде и снова зеленеет после восстановления. - Решения записаны в `docs/adr/0001-stand-services.md`, состав стенда и порядок работы — в `README.md`. ## Проверка На чистых томах: `make clean` → `cp .env.example .env` → `make up` (1 мин 51 с) → `make smoke` — 24 пройдено, 0 ошибок, 2171 MiB. Перезапуск: `make down` → `make up` (1 мин 43 с) → `make smoke` — 24/0. Также зелены `make config-test` (3/0 и 5/0, в том числе под окружением без ripgrep), `make smoke-cluster` (8/8) и `make smoke-guards` (3/0 и 3/0). ## На что смотреть при ревью - Ловушка нод: `compose.yaml` — подключения Airflow и Superset смотрят в разные ноды намеренно. - Честность проверок: `scripts/stand-smoke.sh` ничего не чинит по дороге — проверка источника данных Grafana читает файл настройки и не перезагружает его, иначе она заверяла бы то, что сама только что починила. - `infra/airflow/init.sh` — разовая инициализация работает от root ровно затем, чтобы отдать свежий том `airflow_auth` пользователю `airflow`, и сразу сбрасывает права через `runuser`; все монтирования репозитория в этот контейнер — только на чтение. Обоснование в ADR.
ddmitry added 1 commit 2026-07-31 09:12:43 +03:00
Зачем: рядом с кластером ClickHouse не хватало остальной платформы, а
поднимать её по кускам — значит каждый раз вспоминать порядок. Теперь
`make up` даёт стенд целиком, а `make smoke` честно отвечает, работает он
или нет.

Что:
- Kafka в режиме KRaft (без ZooKeeper), Postgres под метаданные, Airflow
  3.3 четырьмя сервисами и Superset 6.1 с драйверами ClickHouse;
- мониторинг: Prometheus снимает метрики с обеих нод ClickHouse и keeper,
  Grafana получает подготовленный источник данных;
- подключение Airflow ведёт на ноду 1, подключение Superset — на ноду 2:
  ловушка правильных ошибок, забытый `ON CLUSTER` виден в дашборде сам;
- `scripts/stand-smoke.sh` — сквозная проверка из 24 пунктов: топик в
  Kafka, цели Prometheus, запуск примера DAG через API Airflow, проверка
  подключения Superset и расход памяти против порога 3,4 ГБ;
- `make config-test` — статические ворота: Compose, синтаксис Bash и
  Python, стражи README; стражи smoke проверяют, что отчёт краснеет на
  сломанном стенде и зеленеет после восстановления;
- решения записаны в `docs/adr/0001-stand-services.md`, состав стенда и
  порядок работы — в README.

Проверка: на чистых томах `make clean` → `cp .env.example .env` →
`make up` (1 мин 51 с) → `make smoke` — 24 пройдено, 0 ошибок, 2171 MiB.
Перезапуск `make down` → `make up` → `make smoke` — 24/0. Также зелены
`make config-test` (3/0 и 5/0), `make smoke-cluster` (8/8) и
`make smoke-guards` (3/0 и 3/0).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
ddmitry merged commit 6c10f48c17 into main 2026-07-31 09:35:49 +03:00
ddmitry deleted branch feat/13-stand-full 2026-07-31 09:35:50 +03:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ddmitry/clickstream-data-platform#17