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

Лекція 258: Практика: налаштування моніторингу метрик за допомогою Prometheus

Модуль 5. Spring
Рівень 20 , Лекція 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: '*'  # Увімкнути всі endpoints Actuator
  endpoint:
    metrics:
      enabled: true  # Увімкнути метрики
  metrics:
    export:
      prometheus:
        enabled: true  # Увімкнути експорт для Prometheus

Після цього у вашому застосунку з'явиться endpoint /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) доступна.
  • Endpoint /actuator/prometheus не генерує метрики. Переконайтеся, що залежності Actuator і Micrometer додані в проект, а налаштування у application.yml коректні.
  • Prometheus не запустився. Переконайтеся, що порт 9090 вільний, або змініть порт у конфігурації Docker.

Реальне застосування в роботі

Цю техніку моніторингу широко використовують у продакшені. Наприклад:

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

Тепер ви знаєте, як інтегрувати Prometheus з застосунками Spring Boot і почнете розуміти, чому логування і метрики — це очі та вуха вашої системи!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ