Сегодня мы поговорим об одном из самых полезных аспектов Spring Boot Actuator — метриках и здоровье приложения. Мониторинг состояния системы — это не только возможность почувствовать себя чуть-чуть "доктором" вашего приложения, но и незаменимый инструмент для анализа производительности и решения проблем.
Какие метрики доступны через Actuator?
Spring Boot Actuator предоставляет широкий спектр метрик по умолчанию. В отличие от ситуации, когда приходится самостоятельно копаться в коде, чтобы выяснить, почему ваш сервер вдруг начал "уходить на тихий час", Actuator делает это за вас, собирая и предоставляя вам данные о состоянии приложения.
Вот некоторые метрики, которые предоставляются Actuator по умолчанию (и немного юмора для нашего списка):
- Память JVM: сколько памяти активно используется, сколько свободно, и что вообще происходит в вашем "мусорном ведре".
- Потоки: текущая активность потоков. Это полезно, чтобы проверить, не пытается ли ваше приложение использовать всё, что ему доступно, как ребенок с конфетами.
- Загруженность CPU: помогает понять, сильно ли ваш процессор "потеет".
- Сессии HTTP: мониторинг количества активных сессий (да, клиенты иногда могут быть слишком любопытными).
- Время отклика запросов: как быстро ваше приложение реагирует (или не реагирует) на входящие запросы.
- Частота ошибок: спасение для тех, кто хочет найти, где система пошла наперекосяк.
Просмотр метрик
Эти метрики можно наблюдать через эндпоинт /actuator/metrics. Например, если открыть в браузере:
http://localhost:8080/actuator/metrics
Вы увидите список всех доступных метрик, таких как jvm.memory.used, system.cpu.usage, http.server.requests и другие.
Для просмотра детальной информации по конкретной метрике можно использовать запрос:
http://localhost:8080/actuator/metrics/{metricName}
Например, чтобы увидеть метрику, связанную с использованием памяти JVM:
http://localhost:8080/actuator/metrics/jvm.memory.used
Эндпоинт /health: проверка состояния приложения
Что, если вашему приложению стало неважно? Эндпоинт /actuator/health — это ваше окно в его состояние. Он позволяет проверить, работает ли приложение корректно, и отвечает "здорово" или "не очень".
Эндпоинт /health предоставляет информацию о состоянии приложения в виде JSON-ответа. Вот как может выглядеть базовый ответ, если с приложением всё в порядке:
{
"status": "UP"
}
Если в системе есть какая-либо проблема, например, не доступна база данных, статус изменится на DOWN, а в поле details появятся данные о том, что именно пошло не так.
Пример ответа, если база данных недоступна:
{
"status": "DOWN",
"components": {
"db": {
"status": "DOWN",
"details": {
"error": "java.sql.SQLException: Cannot connect to database"
}
}
}
}
Вывод дополнительных данных
По умолчанию, эндпоинт /health имеет ограниченный доступ и показывает только статус. Однако можно настроить его так, чтобы он раскрывал больше информации. Это делается через свойства в файле application.properties или application.yml. Например:
management.endpoint.health.show-details=always
Теперь эндпоинт /health будет показывать такие детали, как статус базы данных, сессий и т.д.
Настройка уровня видимости метрик
Spring Boot Actuator по умолчанию бережёт вашу информацию и не стремится открыть её всему миру. Однако, вы можете настроить доступ к метрикам и их видимость.
Если вы хотите контролировать видимость эндпоинтов Actuator, вы можете использовать следующее свойство:
management.endpoints.web.exposure.include=health, metrics
Здесь мы говорим, что для внешнего доступа будут доступны только эндпоинты health и metrics. Чтобы включить все стандартные эндпоинты, используйте значение *:
management.endpoints.web.exposure.include=*
Если, напротив, вы хотите исключить какие-то эндпоинты, можно сделать так:
management.endpoints.web.exposure.exclude=shutdown
Ограничение доступа на основе ролей
Для продакшн-среды важно защитить эндпоинты с помощью Spring Security, чтобы только авторизованные пользователи могли видеть метрики. Например, можно настроить доступ только для пользователей с ролью ADMIN.
Применение метрик в реальной жизни
Знание своих метрик помогает избежать сценариев, когда ваше приложение "сдает позиции" под нагрузкой, а вы узнаёте об этом последним. Вот как эти знания можно применить:
- Анализ производительности: метрики позволяют отслеживать, насколько быстро и эффективно работает ваше приложение. Это поможет выявить узкие места в производительности.
- Устранение ошибок: частота ошибок в запросах покажет, что что-то идет не так, прежде чем пользователи начнут массово жаловаться.
- Предотвращение сбоев: мониторинг состояния системы, таких как память и CPU, позволяет заранее заметить проблемы и принять меры.
Пример: использование метрики "Количество запросов"
Давайте представим, что вы хотите узнать, как часто к вашему приложению обращаются пользователи. Для этого можно использовать метрику http.server.requests. Вот как это сделать:
Открываем в браузере:
http://localhost:8080/actuator/metrics/http.server.requests
Ответ может выглядеть следующим образом:
{
"name": "http.server.requests",
"measurements": [
{
"statistic": "count",
"value": 150
},
{
"statistic": "totalTime",
"value": 123.45
}
],
"availableTags": [
{
"tag": "status",
"values": ["200", "404", "500"]
},
{
"tag": "method",
"values": ["GET", "POST"]
}
]
}
Здесь мы видим, что было обработано 150 запросов, а общее время выполнения составило 123,45 секунд. Данный подход помогает понять интенсивность использования вашего API.
Теперь, когда вы знаете, какие метрики доступны через Spring Boot Actuator и как проверить состояние вашего приложения, вам будет проще управлять своим приложением. В следующий раз, когда ваш сервер решит "немного приуныть", вы будете вооружены нужными инструментами. Ну, или хотя бы узнаете об этом раньше, чем пользователи начнут писать в чате технической поддержки.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ