- Зачем: - нужен постоянный поток данных для демонстрации работы стека - текущий batch-загрузчик не позволяет показать streaming-сценарии - Что: - добавлен сервис generator с режимом steady (Poisson-интенсивность) - генератор публикует в 4 топика: browser/location/device/geo_events - сохраняются связи event_id и click_id между событиями - сборка через uv для скорости и компактности образа - добавлены команды generator-* в Makefile - комплексные тесты: валидация, статистика, формат сообщений - Проверка: - `docker run --rm -v $(pwd)/..:/workspace -w /workspace/generator generator:test python test_comprehensive.py` — 8/8 тестов - `make generator-up` — 3 тика без ошибок, отправлено 2904 сообщения
109 lines
4.5 KiB
Makefile
109 lines
4.5 KiB
Makefile
.PHONY: up down clean ddl data transform logs \
|
|
reload-monitoring recover-monitoring \
|
|
superset-init superset-dashboard superset-ui superset-restart \
|
|
generator-up generator-down generator-logs generator-restart
|
|
|
|
COMPOSE ?= docker compose
|
|
|
|
# ============================================================================
|
|
# Основные команды
|
|
# ============================================================================
|
|
|
|
up:
|
|
$(COMPOSE) up -d
|
|
|
|
# Остановить и удалить контейнеры/сети текущего проекта
|
|
down:
|
|
$(COMPOSE) down
|
|
|
|
# Полная очистка окружения проекта (включая volumes)
|
|
clean:
|
|
$(COMPOSE) down -v --remove-orphans
|
|
|
|
logs:
|
|
$(COMPOSE) logs -f --tail=200 $(service)
|
|
|
|
# ============================================================================
|
|
# ETL Pipeline
|
|
# ============================================================================
|
|
|
|
ddl:
|
|
bash ./scripts/apply_clickhouse_ddl.sh
|
|
|
|
data:
|
|
bash ./scripts/load_kafka_data.sh
|
|
|
|
transform:
|
|
bash ./scripts/run_batch.sh
|
|
|
|
# Перезагрузка конфигурации мониторинга (после изменений в provisioning)
|
|
reload-monitoring:
|
|
@echo "=== Перезагрузка сервисов мониторинга ==="
|
|
$(COMPOSE) up -d prometheus grafana kafka-exporter statsd-exporter
|
|
$(COMPOSE) restart prometheus statsd-exporter
|
|
@echo "=== Перезагрузка provisioning Grafana ==="
|
|
@sleep 2
|
|
@curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/datasources/reload && echo " [datasources]"
|
|
@curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/dashboards/reload && echo " [dashboards]"
|
|
@curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/alerting/reload && echo " [alerting]"
|
|
@echo "=== Проверка ==="
|
|
@curl -s http://localhost:9090/api/v1/targets | grep -o '"job":"[^"]*"' | sort | uniq
|
|
|
|
# Восстановление мониторинга после сбоев (например, out of bounds / пустые дашборды)
|
|
recover-monitoring:
|
|
@echo "=== Восстановление мониторинга (жесткий режим) ==="
|
|
$(COMPOSE) rm -sf prometheus statsd-exporter
|
|
$(COMPOSE) up -d prometheus grafana kafka-exporter statsd-exporter
|
|
$(COMPOSE) restart airflow-scheduler airflow-webserver
|
|
@echo "=== Перезагрузка provisioning Grafana ==="
|
|
@sleep 2
|
|
@curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/datasources/reload && echo " [datasources]"
|
|
@curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/dashboards/reload && echo " [dashboards]"
|
|
@curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/alerting/reload && echo " [alerting]"
|
|
@echo "=== Проверка targets ==="
|
|
@curl -s http://localhost:9090/api/v1/targets | grep -o '"job":"[^"]*"' | sort | uniq
|
|
@curl -s http://localhost:9090/api/v1/targets | grep -o '"health":"[^"]*"' | sort | uniq -c
|
|
|
|
# ============================================================================
|
|
# Superset команды
|
|
# ============================================================================
|
|
|
|
# Инициализация Superset (подключение к ClickHouse + датасеты)
|
|
superset-init:
|
|
$(COMPOSE) up -d postgres-metadata clickhouse
|
|
$(COMPOSE) up --abort-on-container-exit --exit-code-from superset-init superset-init
|
|
$(COMPOSE) up -d --no-deps superset
|
|
|
|
# Создание дашборда с чартами
|
|
superset-dashboard:
|
|
$(COMPOSE) exec -T superset bash -c "python /app/superset_init/create_dashboard.py"
|
|
|
|
# Открыть Superset UI
|
|
superset-ui:
|
|
@echo "Superset доступен по адресу: http://localhost:8088"
|
|
@echo "Логин: admin / Пароль: admin"
|
|
|
|
# Перезапуск Superset
|
|
superset-restart:
|
|
$(COMPOSE) restart superset
|
|
|
|
# ============================================================================
|
|
# Генератор событий (автономный стриминг)
|
|
# ============================================================================
|
|
|
|
# Запустить только генератор (полезно для отладки)
|
|
generator-up:
|
|
$(COMPOSE) up -d --build generator
|
|
|
|
# Остановить генератор
|
|
generator-down:
|
|
$(COMPOSE) stop generator
|
|
|
|
# Логи генератора
|
|
generator-logs:
|
|
$(COMPOSE) logs -f --tail=100 generator
|
|
|
|
# Перезапуск генератора с пересборкой
|
|
generator-restart:
|
|
$(COMPOSE) up -d --build --force-recreate generator
|