JavaRush /Курсы /Модуль 5. Spring /Лекция 258: Практика: настройка мониторинга метрик с помо...

Лекция 258: Практика: настройка мониторинга метрик с помощью Prometheus

Модуль 5. Spring
26 уровень , 7 лекция
Открыта

В предыдущих лекциях мы познакомились с понятием Observability (наблюдаемости) в микросервисных системах, узнали, насколько важна способность наблюдать систему для её стабильной работы и масштабируемости. Разобрались, что распределённая трассировка и централизованное логирование являются ключевыми инструментами для анализа поведения системы. Мы рассмотрели Spring Cloud Sleuth и Zipkin для трассировки запросов через микросервисы, а также изучили ELK-стек для логирования. Теперь настало время перейти к сбору и мониторингу метрик системы с использованием популярного инструмента Prometheus.

Представьте себе сервер как спортсмена. Метрики — это его пульс, давление и уровень кислорода. Если вы не отслеживаете эти показатели, как вы узнаете, что он близок к "бегу на износ"? Мониторинг метрик позволяет:

  • Узнать, как приложение работает в реальном времени.
  • Заблаговременно обнаружить сбои, пока пользователи ещё не начали жаловаться.
  • Найти узкие места в производительности.
  • Увеличить общую стабильность системы.

Prometheus — это "врач", который собирает метрики вашего приложения и помогает вам сохранять его "здоровье".


Практическая настройка Prometheus

Шаг 1: Установка Prometheus

Prometheus — это сервис, который собирает данные через HTTP-интерфейс. Метрики публикуются микросервисами в формате, который Prometheus "понимает". Для установки Prometheus используем локальную машину или контейнер Docker.

Установка через Docker

  1. Убедитесь, что у вас установлен Docker.
  2. Запустите Prometheus с помощью команды:
    docker run --name prometheus -d -p 9090:9090 prom/prometheus
    
  3. Откройте браузер и перейдите по адресу http://localhost:9090, чтобы проверить, работает ли Prometheus.

Настройка конфигурации Prometheus

Prometheus использует файл prometheus.yml для настройки. Мы укажем Prometheus, где искать наши микросервисы (или другие источники метрик).

Создайте файл prometheus.yml со следующим содержанием:


global:
  scrape_interval: 15s  # Как часто собирать данные

scrape_configs:
  - job_name: 'spring-boot-app'
    static_configs:
      - targets: ['localhost:8080']  # Адрес вашего приложения

Если вы запускаете Prometheus через Docker, монтируйте конфигурацию:

docker run --name prometheus -d -p 9090:9090 \
  -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

Шаг 2: Настройка Spring Boot приложения

Подключение зависимости Actuator

Spring Boot Actuator позволяет вашему приложению публиковать метрики, совместимые с Prometheus. Добавьте зависимость в pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

Также добавим зависимость для интеграции с Prometheus:


<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

Настройка Actuator в application.yml

Включите Actuator и настройте его для публикации метрик:


management:
  endpoints:
    web:
      exposure:
        include: '*'  # Включить все эндпоинты Actuator
  endpoint:
    metrics:
      enabled: true  # Включить метрики
  metrics:
    export:
      prometheus:
        enabled: true  # Включить экспорт для Prometheus

После этого в вашем приложении появится эндпоинт /actuator/prometheus, который будет выдавать метрики в формате Prometheus.

Проверка подключения

Запустите приложение Spring Boot (например, на порту 8080), затем откройте http://localhost:8080/actuator/prometheus. Вы должны увидеть список метрик примерно такого вида:


# HELP jvm_memory_used_bytes Used bytes of a given JVM memory area.
# TYPE jvm_memory_used_bytes gauge
jvm_memory_used_bytes{area="heap",id="G1 Eden Space",} 1.23456E7
jvm_memory_used_bytes{area="heap",id="G1 Old Gen",} 6.789E7
...

Если вы видите вывод метрик, значит всё работает корректно!

Шаг 3: Интеграция Prometheus и Spring Boot

Теперь нужно объяснить Prometheus, где находить наше приложение. Откройте файл prometheus.yml и добавьте следующую конфигурацию:


scrape_configs:
  - job_name: 'spring-boot-app'
    static_configs:
      - targets: ['host.docker.internal:8080']  # Или просто 'localhost:8080' вне Docker

После сохранения изменений перезапустите контейнер Prometheus:

docker restart prometheus

В интерфейсе Prometheus (http://localhost:9090) вы сможете увидеть job spring-boot-app и начать запрашивать метрики.

Шаг 4: Визуализация метрик (немного магии)

Хотя Prometheus — прекрасный инструмент для сбора данных, для анализа и визуализации лучше использовать Grafana. Настройка Grafana — это тема следующей лекции, но давайте кратко взглянем, как метрики из Prometheus выглядят в Grafana.

  1. Установите Grafana:
    docker run -d --name=grafana -p 3000:3000 grafana/grafana
    
  2. Откройте интерфейс Grafana на http://localhost:3000 и подключите Prometheus как источник данных.
  3. Создайте дашборд и добавьте графики метрик, таких как http_server_requests_seconds_count (количество HTTP-запросов) или jvm_memory_used_bytes.

Что делать, если что-то пошло не так?

Иногда вы можете столкнуться с проблемами. Например:

  • Prometheus не отображает метрики. Проверьте файл prometheus.yml и убедитесь, что указанный адрес (например, localhost:8080) доступен.
  • Эндпоинт /actuator/prometheus не генерирует метрики. Убедитесь, что зависимости Actuator и Micrometer добавлены в проект, а настройки в application.yml корректны.
  • Prometheus не запустился. Убедитесь, что порт 9090 свободен, или измените порт в конфигурации Docker.

Реальное применение в работе

Эта техника мониторинга широко используется в продакшене. Например:

  • Вы можете отслеживать количество HTTP-запросов и время их обработки, чтобы находить узкие места в производительности.
  • Отслеживание памяти и потоков JVM позволяет предотвратить аварийные ситуации наподобие OutOfMemoryError.
  • Prometheus и Grafana могут быть использованы для настройки "алертов" (уведомлений), чтобы мгновенно реагировать на проблемы.

Теперь вы знаете, как интегрировать Prometheus с приложениями Spring Boot и начнете понимать, почему логирование и метрики — это глаза и уши вашей системы!

Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ