Актуаторы в Spring Boot 2.x

Spring Boot

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автоматическая конфигурация. Мы можем даже позвонитьMeterRegistrySpring Bean для регистрации пользовательской метрики. мы можем пройти/actuator/metricsКонечная точка получает все метрики. также через/actuator/metrics/{metricName}чтобы получить метаданные для конкретной метрики.

Micrometer — это фасадная библиотека метрик приложения, похожая на SLF4. Я напишу специальную статью, чтобы представить эту точку знаний позже. Пожалуйста, обратите внимание на мою публичную учетную запись: Felordcn, чтобы в первый раз получить соответствующие знания.

4. Резюме

В этой статье мы представили компонент Actuator в Spring Boot 2.x. Этот компонент может помочь нам получить некоторую метаинформацию о системе и некоторые показатели мониторинга. Очень важно для приложений Spring Boot. Этот компонент является инструментом производственного уровня, и мы не должны его игнорировать.

关注公众号:码农小胖哥,获取更多资讯