Encodera

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

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

Оглавление

Служебные эндпоинты и /health

Когда приложение работает на сервере, за ним следят другие программы: балансировщик нагрузки, Kubernetes, система мониторинга. Им нужно быстро узнать, живо ли приложение и доступна ли база данных. Для этого Micronaut предлагает служебные эндпоинты (management endpoints) — готовые адреса вроде /health и /info. Их не нужно писать: достаточно подключить модуль.

Подключение

Возможность генератора называется management. В pom.xml достаточно одной зависимости:

<!-- pom.xml -->
<dependency>
  <groupId>io.micronaut</groupId>
  <artifactId>micronaut-management</artifactId>
  <scope>compile</scope>
</dependency>

Обработчик аннотаций для неё не нужен.

Проверка здоровья

curl -i http://localhost:8080/health
HTTP/1.1 200 Ok
content-type: application/json
 
{"status":"UP"}

UP — всё в порядке. Если какая-то проверка не проходит, статус станет DOWN, а код ответа — 503: так балансировщик поймёт, что на этот экземпляр нельзя слать запросы. Анонимный клиент видит только итог. Вошедший пользователь видит подробности:

curl -u anna:changeme http://localhost:8080/health
{"name":"blog","status":"UP","details":{"diskSpace":{"name":"blog","status":"UP","details":{"total":161750183936,"free":8383062016,"threshold":10485760}},"jdbc":{"name":"blog","status":"UP","details":{"jdbc:h2:mem:devDb":{"name":"blog","status":"UP","details":{"database":"H2","version":"2.5.250 (2026-08-29)"}}}},...}}

Ответ сокращён. Micronaut сам проверяет место на диске, подключение к базе через jdbc, зависшие потоки. Кому показывать подробности, задаёт настройка endpoints.health.details-visible (ANONYMOUS, AUTHENTICATED или NEVER).

Сведения о приложении

/info выдаёт то, что вы сами положите в настройки с префиксом info:

# src/main/resources/application.properties
endpoints.info.sensitive=false
info.blog.name=Java blog
info.blog.version=1.0
curl http://localhost:8080/info
{"blog":{"version":"1.0","name":"Java blog"}}

Строка endpoints.info.sensitive=false делает /info открытым без входа.

Встроенные эндпоинты

АдресЧто показываетЧувствительный
/healthСостояние приложениянет
/infoСведения из настроек info.*да
/beansВсе бины контекстада
/routesВсе маршрутыда
/loggersУровни журналов, можно менятьда
/threaddumpПотоки JVMда

Чувствительные эндпоинты могут раскрыть устройство приложения, поэтому без настройки они закрыты.

Частая ошибка

С подключённым Micronaut Security даже администратор получает на /beans или /routes ответ 500, а в журнале:

ERROR i.m.http.server.RouteExecutor - Unexpected error occurred: For security purposes, sensitive endpoints are disabled
until you supply your own replacement for SensitiveEndpointRule::checkSensitiveAuthenticated

Это не поломка, а защита: Micronaut не знает, каким пользователям можно доверить чувствительные данные. Либо оставьте эти эндпоинты выключенными, либо сделайте нужный открытым через endpoints.<имя>.sensitive=false, либо напишите бин с @Replaces(SensitiveEndpointRule.class) — пример такого класса Micronaut печатает прямо в журнале.

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

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