Как настроить Prometheus и Grafana для мониторинга Prometheus | Библиотека джависта | Java, Spring, Maven, Hibernate

Как настроить Prometheus и Grafana для мониторинга

Prometheus + Grafana — индустриальный стандарт для мониторинга и визуализации метрик. Time-series база данных, pull-based сбор метрик, powerful query язык (PromQL), оповещения.

Мониторинг JVM, HTTP requests, кастомных метрик, cache hit rates в реальном времени с историей и алертами.

Добавляем зависимости

Для экспорта метрик в Prometheus нужны spring-boot-starter-actuator и micrometer-registry-prometheus. Micrometer автоматически собирает JVM и application метрики.

Критически важно включить prometheus endpoint через management.endpoints.web.exposure.include=prometheus в application.yml. Без этого /actuator/prometheus не будет доступен.

Устанавливаем и настраиваем Prometheus

Скачайте Prometheus или запустите через Docker. Создайте prometheus.yml конфиг файл с определением targets для scraping.

Добавьте job для вашего приложения: job_name: 'spring-boot-app', targets: ['localhost:8080']. Укажите metrics_path: '/actuator/prometheus' и scrape_interval: 15s. Prometheus начнёт периодически собирать метрики.

Настраиваем кастомные метрики

Inject MeterRegistry в сервисы для регистрации метрик. Используйте Counter для монотонно растущих значений: registry.counter("orders.created", "region", "EU").increment().

Для текущих значений используйте Gauge: registry.gauge("queue.size", queue, Queue::size). Для измерения времени операций используйте Timer с tags для группировки: Timer.builder("api.request.duration").tags("endpoint", "/users").register(registry).

Устанавливаем и подключаем Grafana

Установите Grafana или запустите через Docker. При первом входе (admin/admin) добавьте Prometheus как data source через Configuration → Data Sources.

Укажите URL Prometheus (http://localhost:9090), настройте scrape interval. Grafana автоматически проверит подключение через Test кнопку. После успешного подключения можно создавать дашборды.

Создаём дашборды в Grafana

Импортируйте готовый дашборд для Spring Boot: используйте ID 4701 или 6756 из Grafana Marketplace. Они содержат панели для JVM memory, GC, HTTP metrics, database pool.

Создайте кастомные панели для бизнес метрик. Используйте PromQL для запросов: rate(http_server_requests_seconds_count[5m]) для requests per second, sum by (status)(http_server_requests_seconds_count) для группировки по HTTP статусам.

Настраиваем алерты

В Grafana создайте alert rules через Alerting → Alert rules. Определите условия: например, high error rate — rate(http_server_requests_seconds_count{status="500"}[5m]) > 10.

Настройте каналы оповещения (Slack, email, PagerDuty, webhook) для получения алертов. Укажите threshold values, evaluation interval и for duration (как долго условие должно быть true перед отправкой алерта).

Best practices и оптимизация

Используйте tags (labels) для всех метрик — это позволяет фильтровать и группировать
Не создавайте метрики с high cardinality tags (например, user_id) — это убьёт Prometheus
Настройте retention policy в Prometheus для баланса между историей и хранилищем
Используйте recording rules в Prometheus для предагрегации часто используемых запросы
Используйте @Timed(percentiles = {0.5, 0.95, 0.99}) для SLA трекинга

Что происходит под капотом

Micrometer собирает метрики во время работы приложения: подсчитывает request rate, измеряет latency, собирает JVM статистику. Метрики хранятся в памяти в формате Prometheus.

Prometheus периодически делает HTTP GET запрос к /actuator/prometheus, получает все метрики в текстовом формате. Сохраняет их в time-series БД с timestamp. Grafana запрашивает данные у Prometheus через PromQL, строит графики и проверяет условия алёртов.

Курс «Алгоритмы и структуры данных»
Получить консультацию менеджера
Сайт Академии Сайт Proglib

Библиотека джависта

#Enterprise
Библиотека джависта | Java, Spring, Maven, Hibernate

Библиотека джависта | Java, Spring, Maven, Hibernate

@javaproglib
23.11K Подписчиков
Технологии Категория
Все самое полезное для Java-разработчика в одном канале. Список наших каналов: https://t.me/proglibrary/9197. Для обратной св...