fix(monitoring): add recover flow for stuck monitoring stack

- Why:
  - during intensive development monitoring can get stuck (No data, out of bounds)
  - regular reload is not always enough to recover Prometheus + StatsD pipeline
- What:
  - add make target recover-monitoring for hard recovery path
  - recreate prometheus and statsd-exporter, restart airflow scheduler/webserver
  - keep Grafana provisioning reload and target checks in one command
  - document when to use recover-monitoring in OPERATIONS runbook
- Check:
  - run make recover-monitoring
  - verify Prometheus targets for airflow/clickhouse/kafka are up
This commit is contained in:
2026-02-09 09:28:13 +03:00
parent df173c00f7
commit e851ef9788
2 changed files with 24 additions and 3 deletions
+16 -1
View File
@@ -1,4 +1,4 @@
.PHONY: up ddl data transform reload-monitoring .PHONY: up ddl data transform reload-monitoring recover-monitoring
COMPOSE ?= docker compose COMPOSE ?= docker compose
@@ -26,3 +26,18 @@ reload-monitoring:
@curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/alerting/reload && echo " [alerting]" @curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/alerting/reload && echo " [alerting]"
@echo "=== Проверка ===" @echo "=== Проверка ==="
@curl -s http://localhost:9090/api/v1/targets | grep -o '"job":"[^"]*"' | sort | uniq @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
+8 -2
View File
@@ -95,6 +95,8 @@ docker compose exec -T clickhouse clickhouse-client --user=default --password=12
```bash ```bash
# Быстрый вариант (make) # Быстрый вариант (make)
make reload-monitoring make reload-monitoring
# Если мониторинг "залип" (No data/out of bounds) — жесткое восстановление:
make recover-monitoring
# Или вручную: # Или вручную:
docker compose up -d prometheus grafana kafka-exporter statsd-exporter docker compose up -d prometheus grafana kafka-exporter statsd-exporter
@@ -136,10 +138,13 @@ curl -s http://localhost:9090/api/v1/targets | grep -o '"health":"[^"]*"'
```bash ```bash
# Рекомендуемый способ (через make) # Рекомендуемый способ (через make)
make reload-monitoring make reload-monitoring
# Если метрики пропали/залипли:
make recover-monitoring
# Или вручную: # Или вручную:
docker compose up -d prometheus grafana kafka-exporter docker compose rm -sf prometheus statsd-exporter
docker compose restart prometheus docker compose up -d prometheus grafana kafka-exporter statsd-exporter
docker compose restart airflow-scheduler airflow-webserver
curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/datasources/reload curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/datasources/reload
curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/dashboards/reload curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/dashboards/reload
curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/alerting/reload curl -s -u admin:admin -X POST http://localhost:3000/api/admin/provisioning/alerting/reload
@@ -248,6 +253,7 @@ curl -s -X POST -u admin:admin http://localhost:3000/api/admin/provisioning/aler
**Общие проблемы:** **Общие проблемы:**
- **"No data" в Grafana**: проверить, что Prometheus видит target (`Status -> Targets` в UI) - **"No data" в Grafana**: проверить, что Prometheus видит target (`Status -> Targets` в UI)
- **Dashboard не загрузился**: проверить логи Grafana — provisioning работает при первом старте контейнера - **Dashboard не загрузился**: проверить логи Grafana — provisioning работает при первом старте контейнера
- **Prometheus spam `out of bounds` и дашборды пустые**: выполнить `make recover-monitoring`
**ClickHouse:** **ClickHouse:**
- **Метрики не обновляются**: ClickHouse экспортирует метрики на `0.0.0.0:9126` внутри сети Docker - **Метрики не обновляются**: ClickHouse экспортирует метрики на `0.0.0.0:9126` внутри сети Docker