Здравствуйте, друзья! В этом уроке мы узнаем о приводе 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, являются их собственными. |