Ожидается, что «Подробное объяснение и подробное применение Spring Boot Actuator» будет включать три статьи. Первая статья посвящена приложению и пользовательским конечным точкам Spring Boot Actuator 1.x, а вторая статья посвящена сравнению различий между Spring Boot Actuator 2. x и 1.x. Помимо применения и настройки конечных точек 2.x, в третьей статье будут представлены метрики Actuator в сочетании с использованием Prometheus и Grafana. Эта часть контента является очень распространенной и относительно вводной, и каждый может обратить на нее внимание.
что такое актуатор
Spring Boot Actuator предоставляет функции, которые часто используются в рабочей среде (такие как проверка работоспособности, аудит, сбор метрик, отслеживание HTTP и т. д.), которые помогают нам отслеживать приложения Spring Boot и управлять ими. Все эти функции доступны через конечные точки JMX или HTTP.
Внедряя соответствующие зависимости, мы можем отслеживать наше приложение, собирать метрики, понимать состояние трафика или баз данных и становиться проще. Основное преимущество этой библиотеки заключается в том, что мы можем получить инструменты производственного уровня, фактически не реализуя эти функции самостоятельно. Как и большинство модулей Spring, мы можем легко настроить или расширить его несколькими способами.
Actuator также может интегрироваться с внешними системами мониторинга приложений, такими как Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic и многими другими. Эти системы предоставляют вам отличные информационные панели, графики, аналитику и оповещения, которые помогают нам отслеживать службы приложений и управлять ими в едином унифицированном интерфейсе.
В этой статье будет представлен Spring Boot Actuator 1.x, включая его конечные точки (конечные точки HTTP), управление конфигурацией, а также расширения и настраиваемые конечные точки.
быстрый старт
Введите следующие зависимости:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Spring Boot Actuator 1.x
В версии 1.x Actuator следует модели чтения-записи, что означает, что мы можем читать из него информацию или записывать из нее информацию. Мы можем получить метрики или состояние нашего приложения, и, конечно же, мы можем корректно завершить работу нашего приложения или изменить конфигурацию ведения журнала. Actuator предоставляет свои конечные точки HTTP через Spring MVC.
конечная точка
Когда версия введенного актуатора 1.x, запустите службу приложения, и консоль может вывести следующую информацию о конечной точке:
Давайте представим часто используемые конечные точки:
- /health: отображает информацию о работоспособности приложения (простой «статус» при доступе через соединение без проверки подлинности или полные сведения о сообщении при проверке подлинности), по умолчанию он нечувствителен.
- /info: Показать информацию о приложении, по умолчанию нечувствительно
- /metrics: отображает информацию о «метриках» для текущего приложения, по умолчанию она также конфиденциальна.
- /trace: отображение информации о трассировке (по умолчанию несколько последних HTTP-запросов).
Некоторые конечные точки не включены по умолчанию, например /shutdown.
Настройка конечных точек
Мы можем настроить свойства каждой конечной точки в следующем формате:
endpoints.[endpoint name].[property to customize]
Есть три свойства, которые можно настроить:
- id, открытый адрес конечной точки http
- включено, следует ли включить
- чувствительный, когда true, требует аутентификации перед получением конфиденциальной информации через http
Мы добавляем следующую конфигурацию в файл конфигурации, которая будет настраивать конечную точку /beans.
endpoints.beans.id=springbeans
endpoints.beans.sensitive=false
endpoints.beans.enabled=true
/конечная точка здоровья
Конечная точка /health используется для мониторинга состояния работающего экземпляра службы.Когда экземпляр службы отключается или становится ненормальным по другим причинам (например, невозможно подключиться к базе данных, на диске не хватает места), персонал по эксплуатации и обслуживанию вовремя уведомить.
В случае несанкционированной авторизации по умолчанию через HTTP будет возвращена только следующая простая информация:
{
"status": "UP"
}
Получить подробную информацию о здоровье
Настраиваем следующим образом:
endpoints:
health:
id: chealth
sensitive: false
management.security.enabled: false
Как упоминалось в предыдущем разделе, мы изменили путь доступа к конечной точке /health на /chealth и отключили авторизацию безопасности. доступhttp://localhost:8005/chealth
Будут получены следующие результаты.
{
"status": "UP",
"healthCheck": {
"status": "UP"
},
"diskSpace": {
"status": "UP",
"total": 999995129856,
"free": 762513104896,
"threshold": 10485760
}
}
Настроить информацию о здоровье
Мы также можем настроить индикатор работоспособности. Он может собирать любые настраиваемые данные о работоспособности, характерные для приложения, и получать доступ к определенной информации через конечную точку /health.
@Component
public class HealthCheck implements HealthIndicator {
@Override
public Health health() {
int errorCode = check(); // perform some specific health check
if (errorCode != 0) {
return Health.down()
.withDetail("Error Code", errorCode).build();
}
return Health.up().build();
}
public int check() {
// Our logic to check health
return 0;
}
}
выполнитьHealthIndicator
интерфейс и переопределитьhealth()
метод для настройки нашей конечной точки /health.
/Информация о конечной точке
Через конечную точку /info мы можем определить некоторую базовую информацию для службы приложения:
info.app.name=Spring Sample Application
info.app.description=This is my first spring boot application
info.app.version=1.0.0
Мы определяем имя службы, описание и номер версии службы в приведенной выше конфигурации.
/метрики конечной точки
Конечная точка /metrics отображает информацию о метриках ОС, JVM и приложений. Когда он включен, мы можем получить такую информацию, как память, куча, поток, пул потоков, загрузка классов и HTTP.
{
"mem": 417304,
"mem.free": 231678,
"processors": 4,
"instance.uptime": 248325,
"uptime": 250921,
"systemload.average": 1.9541015625,
"heap.committed": 375296,
"heap.init": 393216,
"heap.used": 143617,
"heap": 5592576,
"nonheap.committed": 43104,
"nonheap.init": 2496,
"nonheap.used": 42010,
"nonheap": 0,
"threads.peak": 30,
"threads.daemon": 18,
"threads.totalStarted": 46,
"threads": 20,
"classes": 6020,
"classes.loaded": 6020,
"classes.unloaded": 0,
"gc.ps_scavenge.count": 3,
"gc.ps_scavenge.time": 35,
"gc.ps_marksweep.count": 1,
"gc.ps_marksweep.time": 29,
"httpsessions.max": -1,
"httpsessions.active": 0,
"gauge.response.info": 38.0,
"counter.status.200.info": 1
}
Пользовательская конечная точка метрик
Для сбора пользовательских метрик Actuator поддерживает функции регистрации с одним значением, простые функции увеличения/уменьшения счетчика. В следующей реализации мы записываем количество успешных и неудачных входов в систему в качестве пользовательских индикаторов.
@Service
public class LoginServiceImpl implements LoginService {
private final CounterService counterService;
@Autowired
public LoginServiceImpl(CounterService counterService) {
this.counterService = counterService;
}
@Override
public Boolean login(String userName, char[] password) {
boolean success;
if (userName.equals("admin") && "secret".toCharArray().equals(password)) {
counterService.increment("counter.login.success");
success = true;
} else {
counterService.increment("counter.login.failure");
success = false;
}
return success;
}
}
Снова посетите /metrics и найдите следующую информацию о метриках. Попытки входа в систему и другие события, связанные с безопасностью, доступны в Actuator как события аудита.
{
"gauge.response.metrics": 2.0,
"gauge.response.test": 3.0,
"gauge.response.star-star.favicon.ico": 1.0,
"counter.status.200.star-star.favicon.ico": 10,
"counter.status.200.test": 6,
"counter.login.failure": 6,
"counter.status.200.metrics": 4
}
пользовательская конечная точка
Помимо использования конечной точки, предоставляемой Spring Boot Actuator, мы также можем определить совершенно новую конечную точку.
Во-первых, нам нужно реализоватьEndpoint
интерфейс:
@Component
public class CustomEndpoint implements Endpoint<List<String>> {
@Override
public String getId() {
return "custom";
}
@Override
public boolean isEnabled() {
return true;
}
@Override
public boolean isSensitive() {
return false;
}
@Override
public List<String> invoke() {
// Custom logic to build the output
List<String> messages = new ArrayList<String>();
messages.add("This is message 1");
messages.add("This is message 2");
return messages;
}
}
getId()
Метод используется для сопоставления доступа к этой конечной точке, когда мы получаем доступ к /custom, он будет вызыватьсяinvoke()
Наша стандартная логика.
Два других метода используются для установки того, включена ли она и является ли она конфиденциальной конечной точкой.
[ "This is message 1", "This is message 2" ]
дальнейшая настройка
Из соображений безопасности мы можем выбрать доступ к конечной точке Actuator через нестандартный порт. Он настраивается через свойство management.port.
Также, как мы уже упоминали, в 1.x Actuator настраивает собственную модель безопасности на основе Spring Security, но независимую от остального приложения.
Поэтому мы можем изменить свойство management.address, чтобы ограничить доступ к конечной точке по сети:
#port used to expose actuator
management.port=8081
#CIDR allowed to hit actuator
management.address=127.0.0.1
Кроме того, за исключением конечной точки /info, все остальные конечные точки по умолчанию являются конфиденциальными.Если вводится Spring Security, мы обеспечиваем безопасность встроенных конечных точек, определяя эти свойства безопасности (имя пользователя, пароль, роль) в файле конфигурации. .
Суммировать
Spring Boot Actuator предоставляет множество готовых функций для наших сервисов приложений в производственной среде. В этой статье в основном объясняется подробное использование Spring Boot Actuator 1.x. Мы можем использовать встроенные конечные точки (такие как /health, /info и т. д.), расширять и настраивать их на основе этих конечных точек, а также настраивать совершенно новые конечные точки, которые очень гибки в использовании.Исходный код этой статьи:GitHub.com/Доступный ETS2012/S…