Observability — Prometheus + Grafana¶
Что даёт¶
- Каждый микросервис автоматически отдаёт
/metricsв формате Prometheus (черезarkhyz_shared.metrics) - Prometheus scrape'ит все 8 сервисов каждые 15 сек
- Grafana дашборд: RPS / response time / status codes / uptime per service
- Auto-provision: дашборды и datasource подгружаются при первом старте
Запуск¶
docker compose -f docker-compose.yml \
-f infra/compose/docker-compose.observability.yml \
up -d
Доступ¶
| URL | Что | Логин |
|---|---|---|
| http://localhost:9090 | Prometheus UI | — |
| http://localhost:9091 | Grafana | admin / admin (или $GRAFANA_ADMIN_PASSWORD) |
В Grafana уже есть готовый дашборд Arkhyz Microservices.
Метрики в каждом сервисе¶
curl http://localhost:9101/metrics # auth-svc
curl http://localhost:9103/metrics # catalog-svc
# ...
Возвращает:
- arkhyz_uptime_seconds{service="..."} — аптайм
- http_requests_total{service,method,route,status} — счётчик запросов
- http_request_duration_ms_avg{service,method,route} — среднее время ответа
Запуск на проде¶
Добавь -f infra/compose/docker-compose.observability.yml в строку всех команд:
ssh root@arkhyz
cd /root/arkhyz-admin-main
docker compose -f docker-compose.yml \
-f docker-compose.prod.yml \
-f infra/compose/docker-compose.services.yml \
-f infra/compose/docker-compose.observability.yml \
up -d prometheus grafana
Затем доступ через Caddy (добавить блок monitoring.arkhyz-club.ru если нужно публичный):
monitoring.arkhyz-club.ru {
handle /grafana/* {
reverse_proxy grafana:3000
}
handle /prometheus/* {
reverse_proxy prometheus:9090
}
}
Безопаснее — закрыть basic-auth или IP-whitelist.
Расширение¶
- Loki для логов:
loki + promtailв тот же compose - Sentry для exception tracking: env
SENTRY_DSNв каждом сервисе - Custom метрики в коде:
from prometheus_client import Counter; Counter("my_metric", "...").inc()