Files
clickstream-ch-kafka-supers…/docs/OPERATIONS.md
T
ddadmin fdeb48fdb2 feat(monitoring): add Grafana dashboard for ClickHouse
- Add Prometheus datasource provisioning config
- Add Grafana dashboard provider configuration
- Add ClickHouse Overview dashboard (JSON)
- Update README.md with monitoring section and updated stack badge
- Update docs/OPERATIONS.md with monitoring runbook

Dashboard includes:
- System Health: CPU, Memory Resident, Memory Code
- Query Performance: queries/sec, active queries, failed queries
- MergeTree Storage: parts count, merge rate

Verified via Context7: ClickHouse Prometheus metrics use ClickHouseAsyncMetrics_*,
ClickHouseMetrics_*, ClickHouseProfileEvents_* prefixes in v25.1.

Access:
- Grafana: http://localhost:3000 (admin/admin)
- Prometheus: http://localhost:9090
2026-02-08 20:29:43 +03:00

144 lines
5.9 KiB
Markdown

# Operations Runbook
Операционный runbook для локального запуска и проверки пайплайна.
## Локальный запуск
Базовые команды:
- `make up` (или `docker compose up -d`)
- `make ddl` (применяет SQL из `sql/ddl/00_databases.sql` и `sql/ddl/*/*.sql` в ClickHouse)
- `make data` (пересоздаёт топики и заливает небольшой срез данных в Kafka; полный режим — `FULL=1 make data`)
- `make transform` (запускает batch-процесс ODS -> DDS -> DM)
- `docker compose ps`
- `docker compose logs -f --tail=200 <service>`
- `docker compose down` (сохраняет named volumes, включая `clickhouse-data`)
- `docker compose down -v` (удаляет named volumes, использовать осознанно)
## Порты
Порты задаются в `docker-compose.yml`:
- ClickHouse native: `localhost:8002`
- ClickHouse HTTP: `localhost:9123`
- Kafka: `localhost:9092`
- Kafka UI: `http://localhost:8082`
- Airflow: `http://localhost:8080` (`admin/admin`)
- Prometheus: `http://localhost:9090`
- Grafana: `http://localhost:3000`
## Airflow DAGs
### `ddl_init`
- Запуск: ручной (`Trigger DAG`)
- Параметр: `verify_only` (`bool`, default `false`)
- Назначение: создаёт БД и таблицы в ClickHouse от `00_databases` до `40_dm`
### `kafka_load`
- Запуск: ручной (`Trigger DAG with config`)
- Параметры:
- `limit` (`int`, default `0`) — количество строк (`0` = все)
- `reset_topics` (`bool`, default `true`) — пересоздать топики
- Примеры:
```json
{}
```
```json
{"limit": 100}
```
### `etl_pipeline`
- Запуск: ручной (`Trigger DAG with config`)
- Параметр: `full_refresh` (`bool`, default `true`) — очистить DDS перед загрузкой
- Зависимость: требует наличия данных в STG (от `kafka_load` или `make data`)
## Рекомендуемый сценарий (фаза 2)
```bash
# 1. Запуск инфраструктуры
make up
# 2. Инициализация схемы (один раз)
# Airflow UI -> DAGs -> ddl_init -> Trigger DAG
# 3. Загрузка данных через Airflow
# Airflow UI -> DAGs -> kafka_load -> Trigger DAG with config
# Параметры по умолчанию: limit=0, reset_topics=true
# 4. Запуск ETL
# Airflow UI -> DAGs -> etl_pipeline -> Trigger DAG with config
# {"full_refresh": true}
# 5. Проверка результатов
docker compose exec -T clickhouse clickhouse-client --user=default --password=123456 --query "SELECT count() FROM ods.browser_event"
docker compose exec -T clickhouse clickhouse-client --user=default --password=123456 --query "SELECT count() FROM dds.event"
docker compose exec -T clickhouse clickhouse-client --user=default --password=123456 --query "SELECT * FROM dm.dq_summary"
```
## Быстрые проверки
- Kafka ingest: наличие данных в `stg.*` и типизированных строк в `ods.*`.
- Airflow UI: `http://localhost:8080` показывает DAG `ddl_init`, `kafka_load`, `etl_pipeline`.
- BI: витрина `dm.v_events_enriched` отвечает за разумное время при фильтре по дате.
---
## Мониторинг
### Prometheus + Grafana для ClickHouse
Стек мониторинга поднимается вместе с остальной инфраструктурой:
```bash
# Проверить статус сервисов мониторинга
docker compose ps prometheus grafana
# Проверить скрейп ClickHouse в Prometheus
curl -s http://localhost:9090/api/v1/targets | grep -o '"health":"[^"]*"'
```
### Конфигурация
- **Prometheus** (`configs/prometheus.yml`): скрейп ClickHouse на порту `9126/metrics`
- **ClickHouse** (`configs/prometheus_ch.xml`): включён экспорт метрик в формате Prometheus
- **Grafana provisioning** (`configs/grafana/provisioning/`):
- Datasource Prometheus автоматически настроен
- Dashboard "ClickHouse Overview" загружается при старте
### Дашборд ClickHouse Overview
URL: `http://localhost:3000/d/clickhouse-overview/clickhouse-overview`
| Раздел | Метрики |
|--------|---------|
| System Health | CPU Usage, Memory Resident, Memory Code |
| Query Performance | Queries/sec, Active Queries, Failed Queries, Total Queries, Inserted Rows/sec |
| MergeTree Storage | Total Parts, Parts by Table, Total Merges, Merges/sec |
### Проверка метрик
```bash
# Проверить, что Prometheus собирает метрики
curl -s "http://localhost:9090/api/v1/query?query=ClickHouseAsyncMetrics_MemoryResident"
# Проверить счётчик запросов
curl -s "http://localhost:9090/api/v1/query?query=ClickHouseProfileEvents_Query"
```
### Troubleshooting мониторинга
- **"No data" в Grafana**: проверить, что Prometheus видит target (`Status -> Targets` в UI)
- **Метрики не обновляются**: ClickHouse экспортирует метрики на `0.0.0.0:9126` внутри сети Docker
- **Dashboard не загрузился**: проверить логи Grafana — provisioning работает при первом старте контейнера
## Troubleshooting
- `etl_pipeline` падает с ошибкой схемы: сначала запустить `ddl_init`.
- После `docker compose down -v` нужно повторно прогнать: `ddl_init` -> `kafka_load` -> `etl_pipeline`.
- Для демо по умолчанию использовать малый срез данных; полный прогон делать осознанно.