Сьогодні дізнаємось, як за допомогою Spring Boot Actuator зробити ваш додаток більш спостережуваним. Зокрема, розглянемо:
- Підключення та налаштування Spring Boot Actuator.
- Використання вбудованих метрик та ендпоінтів для моніторингу.
- Логування та інтеграцію з зовнішніми системами, такими як Grafana, Prometheus і ELK (Elasticsearch, Logstash, Kibana).
- Налаштування кастомних метрик для вашого додатку.
Отже, готуйтесь, час зазирнути під капот вашого застосунку!
Підключення Spring Boot Actuator
Нагадаю, Spring Boot Actuator — це модуль, який додає спостережуваність і надає метрики, доступні через API або консоль. Це справжній інструмент джедая для розробника, що хоче слідкувати за своїм додатком.
Офіційна документація: Spring Boot Actuator
Почнемо з додавання залежності Actuator у проєкт. Переконайся, що у тебе встановлений Spring Boot (якщо раптом забув це зробити раніше).
Підключаємо залежність
Додай наступну залежність у свій pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Якщо використовуєш Gradle, додай:
implementation 'org.springframework.boot:spring-boot-starter-actuator'
Після цього виконай mvn install або gradle build, щоб підтягнути залежності у проєкт.
Основні можливості Actuator
Actuator надає набір готових ендпоінтів для моніторингу та керування додатком. Ось кілька з них:
| Ендпоінт | Призначення |
|---|---|
/actuator/health |
Показує статус додатку (UP/DOWN) |
/actuator/info |
Загальна інформація про додаток (налаштовується) |
/actuator/metrics| Метрики продуктивності додатку |
|
/actuator/env |
Змінні оточення та їхні значення |
/actuator/loggers| Управління рівнями логування |
|
/actuator/beans |
Інформація про всі Spring Beans, зареєстровані у додатку |
Налаштування і активація ендпоінтів
Крок 1: Дозвіл ендпоінтів
За замовчуванням не всі ендпоінти Actuator доступні. Давайте відкриємо їх у конфігурації:
# application.yml
management:
endpoints:
web:
exposure:
include: "*" # Відкриваємо всі ендпоінти
Або, якщо використовуєш application.properties:
management.endpoints.web.exposure.include=*
Відкрий браузер і перейди за адресою http://localhost:8080/actuator. Побачиш список доступних ендпоінтів.
Крок 2: Увімкнення метрик
Spring Boot Actuator інтегрований з Micrometer, інструментом для збору метрик продуктивності. На початку подивимось на кілька вбудованих метрик:
- Запусти додаток.
- Перейдіть на
/actuator/metrics. - Побачиш список усіх доступних метрик. Наприклад:
{
"names": [
"jvm.memory.used",
"jvm.memory.max",
"process.uptime",
"system.cpu.usage",
"http.server.requests"
]
}
Спробуй перейти на конкретну метрику, наприклад /actuator/metrics/system.cpu.usage. Отримаєш дані про завантаження процесора.
Інтеграція з Prometheus
Prometheus — система моніторингу, яка чудово працює в парі з Actuator. Налаштуємо її.
Крок 1: Додаємо залежність Prometheus
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
Крок 2: Увімкни ендпоінт /actuator/prometheus
management:
endpoints:
web:
exposure:
include: prometheus
Тепер Prometheus зможе збирати дані з твого додатку, відправляючи запити на /actuator/prometheus.
Логування через ELK-стек
З логами все просто: вони мають бути читабельними та централізованими. Для цього відмінно підходить комбінація Elasticsearch, Logstash та Kibana.
Крок 1: Налаштуй файл logback-spring.xml
Створи файл logback-spring.xml в директорії src/main/resources.
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>logs/spring-boot-app.log</file>
<encoder>
<pattern>%d [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</configuration>
Крок 2: Інтеграція з Logstash
Logstash буде збирати логи з файлу spring-boot-app.log. Налаштуй його на відправку даних в Elasticsearch для подальшого аналізу в Kibana.
Налаштування кастомних метрик
Припустимо, ти хочеш відстежувати, скільки разів викликається певний метод у твоєму додатку. Для створення власних метрик можна використати Micrometer.
Приклад: Кастомна метрика
Додай наступну конфігурацію:
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Service;
@Service
public class CustomMetricsService {
private final Counter customCounter;
public CustomMetricsService(MeterRegistry registry) {
this.customCounter = registry.counter("custom.metric.counter", "type", "custom_metric");
}
public void performAction() {
// Логіка методу
customCounter.increment(); // Збільшуємо лічильник
}
}
Тепер при кожному виклику performAction() твій кастомний лічильник буде зростати. Цю метрику можна побачити на ендпоінті /actuator/metrics/custom.metric.counter.
Забезпечення безпеки метрик
Не всі ендпоінти Actuator варто відкривати всім. Наприклад, /actuator/metrics та /actuator/beans містять важливу інформацію, яку можуть використати зловмисники. Використай Spring Security, щоб обмежити доступ:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/actuator/health").permitAll() // Доступно всім
.antMatchers("/actuator/**").authenticated() // Вимагає аутентифікації
.and()
.httpBasic();
}
Тепер твій додаток не лише функціональний, а й спостережуваний! Можеш аналізувати метрики, логувати події й бути впевненим, що додаток працює стабільно.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ