Статьи

Учебник по приводу Spring Boot

Здравствуйте, друзья! В этом уроке мы узнаем о приводе Spring и о том, чем он нам поможет.

1. Что такое пружинный привод?

2. Как добавить привод Spring в проект Maven или Gradle?

3. Создайте проект Spring Boot с зависимостью Spring Actuator.

4. Мониторинг приложения с помощью конечных точек пружинного привода.

Пружинный привод

Что такое пружинный привод?

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

Традиционно, до Spring Actuator нам нужно было написать код для проверки работоспособности приложения, но с Spring Actuator нам не нужно писать код для проверки работоспособности, но Spring Actuator предоставляет некоторые готовые конечные точки, которые могут быть очень полезно для здоровья Проверка приложения.

Как добавить привод Spring в проект Maven или Gradle?

специалист

1
2
3
4
5
6
<dependencies>
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
 </dependency>
</dependencies>

Gradle

1
2
3
dependencies {
 compile("org.springframework.boot:spring-boot-starter-actuator")
}

Создать проект Spring Boot с зависимостью Spring Actuator

Давайте продолжим и создадим проект Spring Boot с зависимостью Spring Actuator (наряду с Web и DevTools), используя Spring Initializer https://start.spring.io/

Обратите внимание, что на момент написания этого руководства версия Spring Boot была 2.1.0.

Пружинный привод

Импортируйте проект в Eclipse или любую другую IDE по вашему выбору и запустите SpringActuatorApplication.java.

В консоли Eclipse вы увидите следующее:

Пружинный привод

Это показывает, что встроенный Tomcat запущен на порте 8080, а SpringActuatorApplication запущен на Tomcat. Также в журналах консоли вы можете видеть, что конечные точки привода открыты через URI привода / привода.

018-11-09 20: 00: 29.346 INFO 8338 — [restartedMain] osbwembedded.tomcat.TomcatWebServer: Tomcat запущен на портах: 8080 (http) с контекстным путем »

2018-11-09 20: 00: 29.354 ИНФОРМАЦИЯ 8338 — [restartedMain] nbjsSpringActuatorApplication: запуск приложения SpringActuatorApplication через 9,273 секунды (JVM работает для 11,823)

2018-11-09 20: 00: 29.190INFO 8338 — [restartedMain] osbaeweb.EndpointLinksResolver: Выставление 2 конечных точек под базовой линией «/ привод».

Мониторинг приложения с помощью конечных точек Spring Actuator

Как мы уже говорили выше, Spring Actator предоставляет некоторые готовые конечные точки, которые мы можем использовать для мониторинга работоспособности приложения.

МНЕ БЫ Описание
auditevents Предоставляет информацию о событиях аудита для текущего приложения.
фасоль Отображает полный список всех компонентов Spring в вашем приложении.
кэши Выставляет доступные тайники.
условия Показывает условия, которые были оценены для классов конфигурации и автоконфигурации, и причины, по которым они соответствовали или не совпадали.
configprops Отображает сопоставленный список всех @ConfigurationProperties.
окр Выставляет свойства из Spring’s ConfigurableEnvironment.
пролетный путь Показывает любые миграции базы данных Flyway, которые были применены.
здоровье Показывает информацию о здоровье приложения.
httptrace Отображает информацию трассировки HTTP (по умолчанию последние 100 обменов запрос-ответ HTTP).
Информация Отображает произвольную информацию о приложении.
integrationgraph Показывает график интеграции Spring.
лесорубы Показывает и изменяет конфигурацию регистраторов в приложении.
LiquiBase Показывает любые миграции базы данных Liquibase, которые были применены.
метрика Показывает информацию о метриках для текущего приложения.
отображения Отображает объединенный список всех путей @RequestMapping.
дела по расписанию Отображает запланированные задачи в вашем приложении.
сессий Позволяет извлекать и удалять пользовательские сеансы из хранилища сеансов, поддерживаемых Spring Session. Недоступно при использовании поддержки Spring Session для реактивных веб-приложений.
неисправность Позволяет приложению корректно завершить работу.
threaddump Выполняет дамп потока.

Включить конечные точки

По умолчанию все конечные точки, кроме выключения, включены. Чтобы включить конечную точку, используйте следующее свойство в файле application.properties.

1
management.endpoint.<id>.enabled

Пример:

Чтобы включить конечную точку выключения , нам нужно сделать следующую запись в файле application.properties:

1
management.endpoint.shutdown.enabled=true

Кроме того, мы можем отключить все конечные точки, а затем выборочно включить ту, которая нам нужна. При следующей конфигурации все конечные точки, кроме информации, будут отключены.

1
2
3
management.endpoints.enabled-by-default=false
 
management.endpoint.info.enabled=true

Привод конечной точки

Давайте перейдем по URL-адресу http: // localhost: 8080 / activator и увидим конечные точки.

Примечание : я использую Postman для тестирования конечных точек, поскольку он показывает JSON в хорошо структурированном формате. Вы можете использовать любой другой такой инструмент или просто браузер.

Пружинный привод

Выставление конечных точек в Spring Actuator

Как вы уже заметили, здесь видны только конечные точки здоровья и информации. Это потому, что это единственные конечные точки, которые выставляются по умолчанию. Все конечные точки не предоставляются по умолчанию из соображений безопасности, поскольку они могут содержать некоторую конфиденциальную информацию и, следовательно, могут быть скомпрометированы.

Выставление конкретных конечных точек

Если мы хотим выставить другие конечные точки через Интернет (Http), нам нужно сделать следующие записи в файле application.properties.

1
management.endpoints.web.exposure.include= <Comma separated list of Ids of endpoints which we want to expose>

пример

1
management.endpoints.web.exposure.include= health,info,env

Теперь, после добавления указанной выше записи в application.properties, давайте снова нажмем на URL http: // localhost: 8080 / activator.

Как мы можем видеть на скриншоте ниже, конечная точка env также включена.

Пружинный привод

Выставление всех конечных точек

Если мы хотим включить все конечные точки, мы можем использовать подстановочный знак *, как показано в application.properties.

1
management.endpoints.web.exposure.include=*

Пружинный привод

Выставление всех конечных точек, кроме нескольких конкретных

Ниже две записи активируют все конечные точки, но отключают только конечную точку env.

1
2
3
management.endpoints.web.exposure.include=*
 
management.endpoints.web.exposure.exclude=env

Пружинный привод

Пружинный привод

Отключение конечных точек HTTP

Если вы не хотите предоставлять конечные точки через HTTP, это можно сделать, настроив в файле application.properties следующее:

1
management.server.port=-1

или в качестве альтернативы, вы можете настроить следующее в application.properties:

1
management.endpoints.web.exposure.exclude=*

Настройка URL привода для доступа к различным конечным точкам

По умолчанию все веб-конечные точки доступны в каталоге / activator с URL-адресами формы / actator / {id}.

Однако можно настроить базовый путь / привод, настроив следующее свойство в application.properties.

1
management.endpoints.web.base-path

Например, если вы хотите сделать базовый URL-адрес как / monitor вместо / actator, вы
можно настроить в application.properties следующим образом:

1
management.endpoints.web.base-path=/monitor

Пружинный привод

При этом все конечные точки могут быть доступны как / monitor / {id} вместо / actator / {id}

Пружинный привод

Конечные точки исполнительного механизма Spring Boot

Давайте обсудим некоторые из наиболее важных конечных точек.

/здоровье

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

Информация о здоровье

Объем информации, предоставленной конечной точке работоспособности, зависит от конфигурации свойства management.endpoint.health.show-details в файле application.properties.

если management.endpoint.health.show-details = never, то детали никогда не показываются. В этом случае вы увидите только следующую информацию. Это поведение по умолчанию.

Пружинный привод

если management.endpoint.health.show-details = всегда, детали показываются всем пользователям. Как мы видим в ответе ниже, у нас также есть информация о дисковом пространстве. Если ваше приложение подключено к базе данных, у вас также будет информация о состоянии базы данных.

Пружинный привод

если management.endpoint.health.show-details = при авторизации , подробности показываются только авторизованным пользователям. Авторизованные роли можно настроить с помощью свойства management.endpoint.health.roles.

Автоконфигурированные индикаторы состояния

Spring Boot Actuator имеет множество автоматически настраиваемых HeathIndicators для проверки работоспособности различных частей приложения. Например, Spring Boot Actuator предоставляет DiskspaceHealthIndicator, который предоставляет информацию о работоспособности дискового пространства, используемого приложением. Аналогичным образом, если вы используете MongoDB, MongoHealthIndicator проверит работоспособность БД Mongo (есть ли значение UP) и отобразится соответствующая информация. По умолчанию окончательный статус приложения определяется HealthAggregator, который в основном сортирует статусы из каждого HealthIndicator на основе упорядоченного списка статусов. Первый статус в отсортированном списке используется как окончательный статус приложения.

Отключение всех автоматически настроенных индикаторов состояния

Эти показатели работоспособности включены по умолчанию, однако их можно отключить с помощью следующего свойства:

1
management.health.defaults.enabled=false

Отключение отдельных автоматически настроенных индикаторов состояния

Или, в качестве альтернативы, можно также отключить отдельный HealthIndicator, как показано ниже, например, для отключения проверки работоспособности дискового пространства:

1
management.health.diskspace.enabled=false

Примечание . Идентификатором любого HealthIndicator будет имя компонента без суффикса HealthIndicator.
Например :

1
2
3
4
DiskSpaceHealthIndicator       diskspace
MongoHealthIndicator             mongo
CassandraHealthIndicator        cassandra
DataSourceHealthIndicator      datasource

и так далее…

Пользовательские показатели здоровья

Наряду со встроенными HealthIndicators, предоставляемыми Spring Boot Actuator, мы также можем создавать собственные пользовательские индикаторы состояния. Для этого вам нужно создать класс, который реализует интерфейс HealthIndicator и реализует его метод health () и возвращает Health в качестве ответа с соответствующей информацией, как показано ниже:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;
 
@Component
public class CustomHealthIndicator implements HealthIndicator {
 
 @Override
 public Health health() {
  int errorCode = 0;
  // In the above line,I am simple assigning zero,but you can call Health check related code like below commented line and that method can return the appropriate code.
  // int errorCode = performHealthCheck();
  if (errorCode != 0) {
   return Health.down().withDetail("Error Code", errorCode).build();
  }
  return Health.up().build();
 }
 
}

Давайте снова доберемся до конечной точки здоровья и посмотрим, отражается ли наш пользовательский индикатор здоровья или нет.

Пружинный привод

Как мы можем видеть на скриншоте выше, эта проверка работоспособности включена.

Состояние работоспособности по компонентам

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

В случае, если мы хотим видеть только состояние работоспособности диска, мы можем сделать следующее:

HTTP: // локальный: 8080 / привод / здоровье / DISKSPACE

Пружинный привод

/Информация

Конечная точка info предоставляет общую информацию о приложении, которую она получает из файлов, таких как build-info.properties или git.properties, или из любого свойства, указанного в ключевой информации в application.properties.

Как и в нашем проекте, такого файла нет, поэтому, если мы попадем в конечную точку информации, он покажет просто пустой ответ, как показано ниже:

Пружинный привод

Spring Boot Actuator отображает информацию, связанную со сборкой, если присутствуют файлы META-INF / build-info.properties. Цель build-info генерирует такой файл с координатами проекта и временем сборки. Это также позволяет добавлять произвольное количество дополнительных свойств.

Давайте добавим цель build-info в pom.xml нашего проекта, как показано ниже в плагине spring-boot-maven-plugin.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
<plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.1.0.RELEASE</version>
        <executions>
          <execution>
            <goals>
              <goal>build-info</goal>
            </goals>
            <configuration>
              <additionalProperties>
                <encoding.source>UTF-8</encoding.source>
                <encoding.reporting>UTF-8</encoding.reporting>
                <java.source>${maven.compiler.source}</java.source>
                <java.target>${maven.compiler.target}</java.target>
              </additionalProperties>
            </configuration>
          </execution>
        </executions>
 </plugin>

Теперь давайте снова нажмем на конечную точку информации и увидим информацию о сборке, как показано ниже:

Пружинный привод

Кроме того, мы можем добавить информацию о приложении под ключом информации в application.properties, как показано ниже, и то же самое будет отображаться в конечной точке / info.

1
2
3
info.application.name=spring-actuator
info.application.description=spring boot actuator application
info.application.version=0.0.1-SNAPSHOT

Пружинный привод

/фасоль

Конечная точка bean-компонента дает все bean-компоненты, определенные в контейнере bean-компонента Spring, со следующей информацией о каждом bean-компоненте:

1
2
3
4
5
aliases  : Names of any aliases
Scope   : Scope of bean
type      : Fully qualified type of a bean.
resource : Resource(class) in which bean is defined.
dependencies :names of dependent beans.

Например, я создал RestController с именем TestController.java и внедрил компонент с именем TestService.java

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RestController
public class TestController {
  
 @Autowired
 private TestService testService;
  
 @GetMapping("/messages")
 public String getMessage() {
  return "Hello";
 }
}
1
2
3
4
5
6
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class TestService {
 
}

и вы можете увидеть, как это отражено на скриншоте ниже с идентификатором testController.

Пружинный привод

/ configprops

Конечная точка configProps дает вам все компоненты, которые аннотированы @ConfigurationProperties.

Пружинный привод

На приведенном выше снимке экрана мы видим два bean-компонента, которые предопределены в самой среде Spring и снабжены аннотацией @ConfigurationProperties и, следовательно, отображаются под этой конечной точкой.

На скриншоте ниже показан исходный код HttpTraceProperties, аннотированный @ConfigurationProperties.

Пружинный привод

/ окр

Конечная точка env предоставляет вам всю информацию, относящуюся к окружающей среде, в следующем порядке:

1
2
3
System Properties                     - JVM specific(Platform Independent)
System Env. or Env. Variables  - Operating System specific(Platform Dependent)
application level configuration - Defined in application.properties

Пружинный привод

/ heapdump

Конечная точка heapdump дает дамп кучи из JVM приложения. Эта конечная точка возвращает двоичные данные в формате HPROF. Поскольку возвращаемые данные обычно огромны, вы должны сохранить их и проанализировать.

/ регистраторы

конечная точка loggers предоставляет регистраторам приложения и их настроенный уровень, эффективный уровень (если для этого регистратора настроен нулевой уровень, а также для его родителей, эффективным уровнем будет уровень регистратора корневого регистратора).

Свойство level сообщает, какие все уровни поддерживаются каркасом ведения журнала.

Пружинный привод

информация регистратора для конкретного регистратора

Чтобы получить информацию регистратора для конкретного регистратора, передайте имя / идентификатор регистратора в URL-адресе после конечной точки / loggers, как показано ниже:

HTTP: // локальный: 8080 / привод / Регистраторы / nl.blogpsot.javasolutionsguide.springactuator.SpringActuatorApplication

Пружинный привод

/ метрики

Конечная точка метрик дает вам все метрики, которые вы можете отслеживать для своего приложения.

Пружинный привод

Проверка индивидуальной метрики

Вы можете отследить отдельную метрику, передав определенную метрику URL-адресу после / метрики конечной точки, как показано ниже:

HTTP: // локальный: 8080 / привод / метрики / jvm.memory.used

Пружинный привод

Это все о Spring Actuator. Спасибо за чтение. Пожалуйста, поделитесь этим с кем-то, вы думаете, это может быть полезно.

Опубликовано на Java Code Geeks с разрешения Гаурава Бхардваджа, партнера нашей программы JCG . Смотрите оригинальную статью здесь: Учебник по Spring Boot Actuator

Мнения, высказанные участниками Java Code Geeks, являются их собственными.