ddadminandDmitry Dementiev d97be5fa56 feat(monitoring): добавлен дашборд Grafana для мониторинга generator
- Зачем:
  - нужна визуализация метрик generator в реальном времени
  - Prometheus job уже настроен, не хватает Grafana dashboard
- Что:
  - добавлен provisioning-файл dashboards/generator-overview.json
  - 6 разделов: Overview, Events by Topic, Errors, Tick Statistics, Status, Info
  - Overview: Total Events/min (все 4 топика), Tick Duration (p50/p99)
  - Events by Topic: bar chart Events per Hour, Events Rate, Total Events
  - Errors: Total Errors, Error Rate, Errors by Topic (с 'or on() vector(0)')
  - Tick Statistics: Duration Distribution, Hour Factor (text), Tick Interval (text)
  - Status: Generator Status (threshold 120s), Generator Health (heartbeat), Time Since Last Tick
  - Info: команды и предупреждения о хардкоде GEN_TICK_SECONDS=5s
  - исправлены панели ошибок с 'or on() vector(0)' для корректного отображения 0
  - заменен heatmap на bar chart для стабильности
  - добавлены пояснения про Events/min = сумма 4 связанных топиков
  - Hour Factor синхронизирован с кодом генератора (00-05/09-18)
  - Generator Health: переименовано из State Management с value mappings
  - обновлены docs/OPERATIONS.md и generator/README.md
  - удален устаревший plans/generator-monitoring-plan.md
- Проверка:
  - дашборд открывается на http://localhost:3000/d/generator-overview
  - все панели отображают данные корректно (протестировано через Playwright)
  - ошибки показывают 0 вместо No data
  - Events/min корректно отображает сумму всех 4 топиков (~800-1000/min)
2026-06-09 17:27:17 +03:00

Учебный стенд DWH кликстрима

Stack Layers

Живой стек для работы с кликстримом: Kafka, ClickHouse, Airflow, Superset и мониторинг (Prometheus с Grafana) поднимаются в Docker одной командой. На этом стенде можно учиться по курсу или просто поднять его у себя и поэкспериментировать с потоковой загрузкой и витринами.

Поток данных коротко:

  • bootstrap: data/*.jsonl → Airflow (kafka_load) → Kafka → ClickHouse (слой STG) → Airflow (etl_pipeline: STG → ODS → DDS → DM) → Superset.
  • steady-stream: generator-service → Kafka → ClickHouse (STG) → Airflow (etl_pipeline) → Superset.

Куда дальше

Быстрый старт

Стенд управляется через Airflow — это основной рабочий способ. Отдельные shell-скрипты в scripts/ оставлены как запасной вариант для локальных прогонов (см. OPERATIONS).

# 1. Поднять весь стек
make up
docker compose ps   # убедиться, что контейнеры запустились

Дальше — три шага в Airflow (веб-интерфейс http://localhost:8080, логин и пароль admin/admin). Сними каждый DAG с паузы (кнопка Unpause) и запусти по очереди:

  1. ddl_init — создаёт базы, таблицы и представления в ClickHouse.
  2. kafka_load — заливает события из data/*.jsonl в Kafka.
  3. etl_pipeline — прогоняет цепочку STG → ODS → DDS → DM.

Те же шаги можно запускать из командной строки — это удобно для скриптов:

docker compose exec -T airflow-webserver airflow dags trigger ddl_init

# Загрузить первые 100 строк каждого файла (limit=0 — загрузить всё)
docker compose exec -T airflow-webserver airflow dags trigger kafka_load \
  --conf '{"limit": 100, "reset_topics": true}'

docker compose exec -T airflow-webserver airflow dags trigger etl_pipeline \
  --conf '{"full_refresh": true}'

Проверить, что данные дошли до витрин:

docker compose exec -T clickhouse clickhouse-client --user=default --password=123456 \
  --query "SELECT count() FROM dm.v_events_enriched"

Подробный сценарий запуска, параметры DAG-ов и разбор частых проблем — в OPERATIONS.

Сервисы и доступы

Сервис Адрес Назначение Логин/пароль
Airflow http://localhost:8080 оркестрация ETL admin/admin
ClickHouse http://localhost:9123/play SQL-запросы default/123456
Kafka UI http://localhost:8082 просмотр топиков
Superset http://localhost:8088 дашборды admin/admin
Prometheus http://localhost:9090 метрики
Grafana http://localhost:3000 графики метрик admin/admin

Готовый дашборд в Superset: http://localhost:8088/superset/dashboard/ecommerce-analytics/ — он создаётся автоматически через минуту-две после make up. Состав и настройка дашборда описаны в SUPERSET_DASHBOARD.

Как устроен поток данных

flowchart LR
    subgraph AF["Airflow"]
        D1["ddl_init"]
        D2["kafka_load"]
        D3["etl_pipeline"]
    end

    subgraph Kafka["Kafka"]
        Topics[4 топика]
    end

    subgraph CH["ClickHouse"]
        STG["STG: сырые данные"]
        ODS["ODS: типизация + DQ"]
        DDS["DDS: сущности"]
        DM["DM: витрины VIEW"]
    end

    D2 -->|загрузка JSONL| Kafka -->|Kafka MV| STG
    STG -->|batch| ODS -->|batch| DDS -->|VIEW| DM

    D1 -.->|DDL| CH
    D3 -.->|batch| ODS & DDS

«Грязные» записи не роняют пайплайн: ошибки разбора складываются в ods.*_errors и в поле parse_errors, а обработка продолжается.

Подробное описание слоёв STG/ODS/DDS/DM, диаграммы и обоснование решений — в ARCHITECTURE.

Документация

S
Description
No description provided
Readme
34 MiB
Languages
Python 85.3%
Shell 13.1%
Makefile 1.5%
Dockerfile 0.1%