Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

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/health
HTTP/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).

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.