Actuator и проверка здоровья
Когда приложение работает на сервере, за ним следят программы: балансировщик нагрузки, Docker, Kubernetes, система мониторинга. Им нужен простой способ спросить «ты жив?». Модуль Actuator добавляет служебные адреса: состояние приложения, сведения о версии, метрики. Писать для этого код не нужно.
Подключение
<!-- pom.xml -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>Проверка здоровья
curl -i http://localhost:8080/actuator/healthHTTP/1.1 200
Content-Type: application/vnd.spring-boot.actuator.v3+json
{"groups":["liveness","readiness"],"status":"UP"}UP значит, что приложение работает. Actuator сам проверяет то, что подключено: например, доступна ли база данных. Если база упадёт, статус станет DOWN, а код ответа — 503. liveness и readiness — отдельные проверки «процесс жив» и «готов принимать запросы» для Kubernetes; они доступны по адресам /actuator/health/liveness и /actuator/health/readiness.
Что открыто наружу
Адресов у Actuator много, но по HTTP по умолчанию открыт только health. Остальные включают явно:
# src/main/resources/application.yaml
management:
endpoints:
web:
exposure:
include: health,info
info:
env:
enabled: true
info:
app:
name: Blog
version: "1.0"management.info.env.enabled разрешает показывать в /actuator/info всё, что записано под ключом info:
curl http://localhost:8080/actuator/info{"app":{"name":"Blog","version":"1.0"}}Полезные адреса
| Адрес | Что показывает |
|---|---|
/actuator/health | Состояние приложения и его зависимостей |
/actuator/info | Сведения о приложении |
/actuator/metrics | Метрики: память, потоки, время ответов |
/actuator/loggers | Уровни журнала; их можно менять на лету |
/actuator/env | Все настройки — опасно показывать наружу |
Доступ при включённой безопасности
Цепочка сайта из главы о безопасности закрывает всё, что не разрешено явно. Мониторинг должен видеть состояние без пароля, поэтому откроем два адреса:
// src/main/java/com/example/blog/SecurityConfig.java
.requestMatchers("/error", "/actuator/health", "/actuator/info").permitAll()Остальные адреса Actuator, если вы их включите, останутся доступны только после входа.
Частая ошибка
Соблазнительно написать include: "*" и открыть всё сразу. Но /actuator/env и /actuator/configprops покажут настройки приложения, а /actuator/heapdump отдаст снимок памяти с данными пользователей. Открывайте наружу только health и info, а остальное — за паролем или на отдельном внутреннем порту (настройка management.server.port).