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
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
# ClickHouse Mini DWH для кликстрима
|
# ClickHouse Mini DWH для кликстрима
|
||||||
|
|
||||||
[](./docker-compose.yml)
|
[](./docker-compose.yml)
|
||||||
[](./docs/ARCHITECTURE.md)
|
[](./docs/ARCHITECTURE.md)
|
||||||
[]()
|
[]()
|
||||||
|
|
||||||
@@ -228,6 +228,23 @@ flowchart LR
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Мониторинг инфраструктуры (Grafana + Prometheus)
|
||||||
|
|
||||||
|
Для оценки состояния ClickHouse доступен дашборд мониторинга:
|
||||||
|
|
||||||
|
1. Открыть Grafana: `http://localhost:3000` (admin/admin)
|
||||||
|
2. Дашборд "ClickHouse Overview" загружается автоматически
|
||||||
|
3. Проверить метрики Prometheus: `http://localhost:9090` → Status → Targets
|
||||||
|
|
||||||
|
Что отслеживается:
|
||||||
|
- System Health: CPU, Memory (Resident/Code)
|
||||||
|
- Query Performance: queries/sec, active queries, failed queries
|
||||||
|
- MergeTree Storage: parts count, merge rate
|
||||||
|
|
||||||
|
Конфигурация provisioning находится в [`configs/grafana/provisioning/`](configs/grafana/provisioning/). Подробнее в [`docs/OPERATIONS.md`](docs/OPERATIONS.md#мониторинг).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Частые проблемы
|
## Частые проблемы
|
||||||
|
|
||||||
- `etl_pipeline` падает с сообщением про схему: сначала запустите `ddl_init`.
|
- `etl_pipeline` падает с сообщением про схему: сначала запустите `ddl_init`.
|
||||||
@@ -241,14 +258,17 @@ flowchart LR
|
|||||||
## Статус проекта
|
## Статус проекта
|
||||||
|
|
||||||
Реализовано:
|
Реализовано:
|
||||||
- DAG `ddl_init`: последовательное применение DDL + проверка схемы.
|
- **Инфраструктура**: Kafka + ClickHouse + Airflow + Superset + Prometheus/Grafana
|
||||||
- DAG `kafka_load`: ingest из `.jsonl` в Kafka через `kafka-python` (параметры `limit`, `reset_topics`).
|
- **Ingest**: DAG `ddl_init` (DDL + проверка схемы), DAG `kafka_load` (параметры `limit`, `reset_topics`)
|
||||||
- DAG `etl_pipeline`: precheck, ожидание данных в STG, batch-пересчёт ODS/DDS/DM, базовые проверки.
|
- **Трансформации**: DAG `etl_pipeline` (pre-check, batch STG→ODS→DDS→DM, валидация)
|
||||||
- Устойчивость к "грязным" данным: ошибки парсинга сохраняются в ODS, а не валят ingest.
|
- **Витрины**: VIEW в DM для бизнес-дашбордов (трафик, UTM, качество данных)
|
||||||
|
- **Надёжность**: ошибки парсинга сохраняются в ODS, пайплайн не падает на "грязных" данных
|
||||||
|
- **Мониторинг**: Prometheus скрейпит ClickHouse метрики, Grafana дашборд для визуализации
|
||||||
|
|
||||||
В планах (не требуется для MVP задания):
|
В планах (не требуется для MVP задания):
|
||||||
- Инкрементальный batch (watermark вместо `full_refresh`).
|
- Инкрементальный batch (watermark вместо `full_refresh`)
|
||||||
- DQ мониторинг по расписанию.
|
- DQ мониторинг по расписанию
|
||||||
|
- Алерты в Grafana
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,16 @@
|
|||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# Dashboard Provider: автоматическая загрузка дашбордов из файлов
|
||||||
|
# Назначение: Grafana автоматически импортирует дашборды из указанной папки
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
apiVersion: 1
|
||||||
|
|
||||||
|
providers:
|
||||||
|
- name: "default"
|
||||||
|
orgId: 1
|
||||||
|
folder: ""
|
||||||
|
type: file
|
||||||
|
disableDeletion: false
|
||||||
|
editable: true
|
||||||
|
options:
|
||||||
|
path: /etc/grafana/provisioning/dashboards
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# DataSource: Prometheus для Grafana
|
||||||
|
# Назначение: автоматическая настройка подключения к Prometheus
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
apiVersion: 1
|
||||||
|
|
||||||
|
datasources:
|
||||||
|
- name: Prometheus
|
||||||
|
type: prometheus
|
||||||
|
access: proxy
|
||||||
|
url: http://prometheus:9090
|
||||||
|
isDefault: true
|
||||||
|
editable: false
|
||||||
|
jsonData:
|
||||||
|
timeInterval: "15s"
|
||||||
|
httpMethod: POST
|
||||||
+50
-1
@@ -83,10 +83,59 @@ docker compose exec -T clickhouse clickhouse-client --user=default --password=12
|
|||||||
## Быстрые проверки
|
## Быстрые проверки
|
||||||
|
|
||||||
- Kafka ingest: наличие данных в `stg.*` и типизированных строк в `ods.*`.
|
- Kafka ingest: наличие данных в `stg.*` и типизированных строк в `ods.*`.
|
||||||
- Мониторинг: доступность `/metrics` у ClickHouse и скрейп в Prometheus.
|
|
||||||
- Airflow UI: `http://localhost:8080` показывает DAG `ddl_init`, `kafka_load`, `etl_pipeline`.
|
- Airflow UI: `http://localhost:8080` показывает DAG `ddl_init`, `kafka_load`, `etl_pipeline`.
|
||||||
- BI: витрина `dm.v_events_enriched` отвечает за разумное время при фильтре по дате.
|
- 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
|
## Troubleshooting
|
||||||
|
|
||||||
- `etl_pipeline` падает с ошибкой схемы: сначала запустить `ddl_init`.
|
- `etl_pipeline` падает с ошибкой схемы: сначала запустить `ddl_init`.
|
||||||
|
|||||||
Reference in New Issue
Block a user