Перейти к содержанию

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()