1. Введение
Spring Boot предоставляет множество готовых стартеров, одним из которых является очень специальный стартёр-актуатор. Он используется для мониторинга, сбора и управления приложениями Spring Boot, а также для предоставления некоторых полезных конечных точек для достижения вышеуказанных функций. Это помогает нам отслеживать и управлять нашим приложением Spring Boot. В этой статье мы обсудим некоторые сведения об актуаторах в Spring Boot 2.x.
2. Интеграция
Как и другие стартеры, он работает «из коробки» с очень простой интеграцией зависимостей. Вводим в проект (в качестве примера возьмем maven):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
3. endpoints
Ядром Actuator является конечная точка.Мы используем конечную точку для получения некоторой информации о мониторинге приложения или для изменения некоторого состояния системы через конечную точку. В Actuator встроено множество конечных точек:
id | описывать | Он включен по умолчанию |
---|---|---|
auditevents | Отображает информацию о событиях аудита для текущего приложения. | Yes |
beans | Отображает полный список примененных Spring Bean-компонентов. | Yes |
caches | Показать доступную информацию о кеше | Yes |
conditions | Отображение состояния и информации о приложении класса автосборки | Yes |
configprops | Показать список всех @ConfigurationProperties | Yes |
env | Показать свойства в ConfigurableEnvironment | Yes |
flyway | Отображение информации о миграции базы данных Flyway | Yes |
health | Отображать информацию о работоспособности приложения (для неаутентифицированных отображается только статус, а для аутентификации отображаются все сведения) | Yes |
info | Отображение произвольной информации о приложении | Yes |
liquibase | Демонстрация миграции базы данных Liquibase | Yes |
metrics | Отображение информации о метриках текущего приложения | Yes |
mappings | Показать список всех наборов путей @RequestMapping | Yes |
scheduledtasks | Показывать запланированные задачи в приложении | Yes |
sessions | Позволяет извлекать и удалять пользовательские сеансы из хранилищ сеансов, поддерживаемых сеансом Spring. | Yes |
shutdown | Позволяет приложениям отключаться изящно (не включено по умолчанию) | No |
threaddump | выполнить дамп потока | Yes |
httptrace | Показать информацию о трассировке HTTP (по умолчанию отображаются последние 100 обменов HTTP-запросами и ответами) | Yes |
heapdump | Возвращает сжатый GZip файл дампа кучи hprof | Yes |
prometheus | Отображение информации о метриках в формате, полученном сервером Prometheus | Yes |
3.1 Включить и отключить
По умолчанию в дополнение кshutdown
Все другие закрытые конечные точки включены. Включение отдельных конечных точек зависит от других компонентов, таких как Prometheus, о котором мы говорили в прошлой статье. Мы можем настроить его в файле конфигурации Spring Boot (идентификатор см. в таблице выше)management.endpoint.<id>.enabled
чтобы настроить, включена ли конечная точка.
Кроме того, мы можем пройтиmanagement.endpoints.enabled-by-default
Чтобы изменить конфигурацию глобального порта по умолчанию, в следующем примере включается информационная конечная точка и отключаются все остальные конечные точки:
# 先设置所有的端点默认为关闭
management.endpoints.enabled-by-default=false
# 然后开启info 端点
management.endpoint.info.enabled=true
3.2 Открытый и закрытый
На что нам нужно обратить особое внимание, так это на то, что вышеперечисленное — это только функции конечной точки, которые мы включили, и это не означает, что мы предоставляем эти конечные точки среде вне приложения. Открытые правила конфигурации:management.endpoints.<web|jmx>.exposure.<include|exclude>
Давайте возьмем Интернет в качестве примера и предоставим веб-конечные точки следующими способами:
# * 为暴露所有web端点,如果暴露的是一个列表请使用端点 id 并以逗号隔开
management.endpoints.web.exposure.include='*'
Также, если мы хотим исключить некоторые веб-конечные точки, используйтеmanagement.endpoints.web.exposure.exclude
настроить. мы можем пройти/actuator
для перечисления открытых конечных точек. Конечно, этот путь зависит от нашегоmanagement.endpoints.web.basePath
Конфигурация.
3.3 Безопасность
Конечные точки чувствительны к производственным средам. Нам определенно не нужен незаконный доступ к конечным точкам, особенно если/shutdown
эта конечная точка. Мы можем закрывать и закрывать операции через 3.1 и 3.2 выше. Также можно настроить напрямуюmanagement.server.port=-1
чтобы закрыть конечную точку управления. Или убедитесь, что он находится под контролем внешней системы безопасности, такой как Spring security. гарантияEndpointRequest.toAnyEndpoint()
безопасность.
3.4 Пользовательские конечные точки
Начиная с Spring Boot 2.x, Actuator поддерживает модель CRUD вместо старой модели RW (чтение/запись). Мы можем настроить в соответствии с двумя стратегиями:
- @Endpoint поддерживает как JMX, так и http
- @JmxEndpoint поддерживает только технологию JMX.
- @WebEndpoint поддерживает только http
Укажите, что класс конечной точки (должен быть Spring Bean) является классом конечной точки, добавив один из вышеперечисленных элементов. Используйте @ReadOperation, @WriteOperation или @DeleteOperation в методах класса, которые будут отображаться в GET, POST, DELETE (для http) в Http соответственно. Вот одна из наших пользовательских конечных точек:
@Component
@Endpoint(id = "features")
public class FeaturesEndpoint {
private Map<String, Feature> features = new ConcurrentHashMap<>();
@ReadOperation
public Map<String, Feature> features() {
return features;
}
@ReadOperation
public Feature feature(@Selector String name) {
return features.get(name);
}
@WriteOperation
public void configureFeature(@Selector String name, Feature feature) {
features.put(name, feature);
}
@DeleteOperation
public void deleteFeature(@Selector String name) {
features.remove(name);
}
public static class Feature {
private Boolean enabled;
// [...] getters and setters
}
}
Обратите внимание, что важно убедиться, что идентификатор конечной точки уникален в приложении.
3.5 Расширение конечной точки
Предположим, мы хотим убедиться, что производственный экземпляр нашего приложения никогда не будет версией SNAPSHOT. Мы решили сделать это, изменив конечную точку Actuator (/info), которая возвращает эту информацию. Если наше приложение окажется SNAPSHOT. Мы получим разные коды состояния HTTP.
мы можем использовать@EndpointExtension
или более конкретно@EndpointWebExtension
,@EndpointJmxExtension
Легко расширяйте поведение предопределенных конечных точек:
@Component
@EndpointWebExtension(endpoint = InfoEndpoint.class)
public class InfoWebEndpointExtension {
private InfoEndpoint delegate;
// standard constructor
@ReadOperation
public WebEndpointResponse<Map> info() {
Map<String, Object> info = this.delegate.info();
Integer status = getStatus(info);
return new WebEndpointResponse<>(info, status);
}
private Integer getStatus(Map<String, Object> info) {
// return 5xx if this is a snapshot
return 200;
}
}
3.6 Spring Boot metrics
Оперативный мониторинг приложений основан на извлечении метрик приложений. Пары актуаторов в Spring Boot 2.xMicrometerавтоматическая конфигурация. Мы можем даже позвонитьMeterRegistry
Spring Bean для регистрации пользовательской метрики. мы можем пройти/actuator/metrics
Конечная точка получает все метрики. также через/actuator/metrics/{metricName}
чтобы получить метаданные для конкретной метрики.
Micrometer — это фасадная библиотека метрик приложения, похожая на SLF4. Я напишу специальную статью, чтобы представить эту точку знаний позже. Пожалуйста, обратите внимание на мою публичную учетную запись: Felordcn, чтобы в первый раз получить соответствующие знания.
4. Резюме
В этой статье мы представили компонент Actuator в Spring Boot 2.x. Этот компонент может помочь нам получить некоторую метаинформацию о системе и некоторые показатели мониторинга. Очень важно для приложений Spring Boot. Этот компонент является инструментом производственного уровня, и мы не должны его игнорировать.
关注公众号:码农小胖哥,获取更多资讯