У попередніх лекціях ми познайомилися з поняттям Observability (спостережуваності) в мікросервісних системах, дізналися, наскільки важлива здатність спостерігати систему для її стабільної роботи та масштабованості. Розібралися, що розподілена трасування і централізоване логування є ключовими інструментами для аналізу поведінки системи. Ми розглянули Spring Cloud Sleuth і Zipkin для трасування запитів через мікросервіси, а також вивчили ELK-стек для логування. Тепер настав час перейти до збору та моніторингу метрик системи з використанням популярного інструмента Prometheus.
Уявіть собі сервер як спортсмена. Метрики — це його пульс, тиск і рівень кисню. Якщо ви не відстежуєте ці показники, як ви дізнаєтесь, що він близький до «бігу на знос»? Моніторинг метрик дозволяє:
- Дізнатися, як застосунок працює в реальному часі.
- Заблаговременно виявити збої, поки користувачі ще не почали скаржитись.
- Знайти вузькі місця в продуктивності.
- Підвищити загальну стабільність системи.
Prometheus — це «лікар», який збирає метрики вашого застосунку і допомагає зберегти його «здоров'я».
Практичне налаштування Prometheus
Крок 1: Встановлення Prometheus
Prometheus — це сервіс, який збирає дані через HTTP-інтерфейс. Метрики публікуються мікросервісами в форматі, який Prometheus «розуміє». Для встановлення Prometheus використовуємо локальну машину або контейнер Docker.
Встановлення через Docker
- Переконайтеся, що у вас встановлений Docker.
- Запустіть Prometheus за допомогою команди:
docker run --name prometheus -d -p 9090:9090 prom/prometheus - Відкрийте браузер і перейдіть за адресою 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.
- Встановіть Grafana:
docker run -d --name=grafana -p 3000:3000 grafana/grafana - Відкрийте інтерфейс Grafana на http://localhost:3000 і підключіть Prometheus як джерело даних.
- Створіть дашборд і додайте графіки метрик, таких як
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 і почнете розуміти, чому логування і метрики — це очі та вуха вашої системи!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ