Сегодня мы узнаем, как с помощью 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();
}
Теперь ваше приложение не только функционально, но и наблюдаемо! Вы можете анализировать метрики, логировать события и быть уверенными в том, что приложение работает стабильно.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ