Салют, хабровчане! Уже через неделю стартуют занятия в новой группе курса «Разработчик на Spring Framework». В связи с этим делимся с вами полезным материалом в котором рассказано о том, что такое Spring Actuator и чем он может быть полезен.
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
dependencies {
compile("org.springframework.boot:spring-boot-starter-actuator")
}
SpringActuatorApplication.java
.SpringActuatorApplication
запущен в Tomcat. Также вы можете увидеть, что конечные точки actuator’а доступны по адресу /actuator.
018-11-09 20:00:29.346 INFO 8338 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2018-11-09 20:00:29.354 INFO 8338 --- [ restartedMain] n.b.j.s.SpringActuatorApplication : Started SpringActuatorApplication in 9.273 seconds (JVM running for 11.823)
2018-11-09 20:00:29.190 INFO 8338 --- [ restartedMain] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator'.
ID | Описание |
---|---|
auditevents |
Предоставляет информацию о событиях аудита для текущего приложения. |
beans | Отображает полный список всех Spring-бинов в приложении. |
caches | Информация о кэше. |
conditions | Показывает условия (Condition), которые были вычислены для классов конфигурации и автоконфигурации, и причины, по которым они соответствовали или не соответствовали. |
configprops | Отображает список всех @ConfigurationProperties |
env | Отображает свойства из ConfigurableEnvironment. |
flyway | Показывает миграции баз данных Flyway, которые были применены. |
health | Показывает сведения о работоспособности приложения. |
httptrace | Отображает информацию трассировки HTTP (по умолчанию последние 100 HTTP запросов-ответов). |
info | Отображает дополнительную информацию о приложении. |
integrationgraph | Граф Spring Integration. |
loggers | Отображает и позволяет изменить конфигурацию логгеров в приложении. |
liquibase | Показывает примененные миграции базы данных Liquibase. |
metrics | Показывает информацию о метриках для текущего приложения. |
mappings | Отображает список всех путей @RequestMapping. |
scheduledtasks | Отображает запланированные задачи (scheduled tasks). |
sessions | Позволяет извлекать и удалять пользовательские сессии из хранилищ, поддерживаемых Spring Session. Недоступно при использовании Spring Session для реактивных веб-приложений. |
shutdown | Позволяет приложению корректно завершить работу. |
threaddump | Отображает информацию о потоках. |
shutdown
. Чтобы включить конечную точку, используйте следующее свойство в файле application.properties
.management.endpoint.<code><</code>id<code>></code>.enabled
Примечание переводчика: по умолчанию доступ ко всем конечным точкам есть только через JMX, доступа через HTTP ко всем конечным точкам нет (см. ниже).
shutdown
, нам нужно сделать следующую запись в файле application.properties
:management.endpoint.shutdown.enabled=true
info
, будут отключены.management.endpoints.enabled-by-default=false
management.endpoint.info.enabled=true
health
и info
. Потому что это единственные конечные точки, которые по умолчанию доступны через http. Доступ через http к другим конечным точкам закрыт по умолчанию из соображений безопасности, поскольку они могут содержать конфиденциальную информацию и, следовательно, могут быть скомпрометированы.application.properties
.management.endpoints.web.exposure.include=<список конечных точек через запятую><a href="http://localhost:8080/actuator"></a>
management.endpoints.web.exposure.include= health,info,env
application.properties
указанной выше записи, давайте снова перейдем по http://localhost:8080/actuator env
также включена.*
, как показано ниже.management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env
application.properties
следующее:management.server.port=-1
management.endpoints.web.exposure.exclude=*
/actuator
по адресам вида /actuator/{id}
. Однако можно изменить базовый путь /actuator
, используя следующее свойство в application.properties
.management.endpoints.web.base-path
/monitor
вместо /actuator
это можно сделать следующим образом:management.endpoints.web.base-path=/monitor
/monitor/{id}
вместо /actuator/{id}
health
даёт общий статус приложения: запущено и работает или нет. Это очень важно для мониторинга состояния приложения, когда оно находится в продакшене. Эта конечная точка может быть интегрирована с приложениями мониторинга и будет очень полезна для определения работоспособности приложений в реальном времени.health
, зависит от свойства management.endpoint.health.show-details
в файле application.properties
.management.endpoint.health.show-details=never
, то никакая дополнительная информация не отображается. В этом случае вы увидите только следующее (это поведение по умолчанию).management.endpoint.health.show-details=always
, то дополнительная информация показывается всем пользователям. Как мы видим в ответе ниже, у нас появилась информация о дисковом пространстве (diskSpace). Если ваше приложение подключено к базе данных, то у вас также будет отображаться информация о состоянии базы данных.management.endpoint.health.show-details=when-authorized
, то дополнительная информация будет показана только авторизованным пользователям. Авторизацию можно настроить с помощью свойства management.endpoint.health.roles
.DiskspaceHealthIndicator
предоставляет информацию о дисковом пространстве. Если вы используете MongoDB, то MongoHealthIndicator
проверит работоспособность БД Mongo (запущен сервер или нет) и отобразит соответствующую информацию. По умолчанию окончательный статус приложения определяет HealthAggregator
, который просто сортирует список статусов, предоставленных каждым HealthIndicator
. Первый статус в отсортированном списке используется как окончательный статус приложения.management.health.defaults.enabled=false
HealthIndicator
, как показано ниже, например, для отключения проверки дискового пространства:management.health.diskspace.enabled=false
HealthIndicator
будет имя бина без суффикса HealthIndicator
.DiskSpaceHealthIndicator diskspace
MongoHealthIndicator mongo
CassandraHealthIndicator cassandra
DataSourceHealthIndicator datasource
HealthIndicator
, предоставляемыми Spring Boot Actuator, мы можем создавать собственные индикаторы состояния. Для этого вам нужно создать класс, который реализует интерфейс HealthIndicator
, реализовать его метод health()
и вернуть Health
в качестве ответа с соответствующей информацией, как показано ниже: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();
}
}
info
предоставляет общую информацию о приложении, которую она получает из файлов, таких как build-info.properties
или git.properties
, или из свойств, указанных в application.properties
.META-INF/build-info.properties
. Этот файл с информацией о проекте создается время сборки целью build-info
. Здесь также можно добавить произвольное количество дополнительных свойств.pom.xm
l цель build-info
для плагина spring-boot-maven-plugin
.<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>
info
и увидим информацию о сборке, как показано ниже:info
в application.properties
, как показано ниже, и она будет отображаться в конечной точке /info
.info.application.name=spring-actuator
info.application.description=spring boot actuator application
info.application.version=0.0.1-SNAPSHOT
beans
показывает все бины, определенные в Spring-контейнере со следующей информацией о каждом бине:aliases : названия всех псевдонимов
scope : область видимости
type : полное имя бина
resource : ресурс (класс), в котором определён бин
dependencies : имена зависимых бинов
TestController
и заинжектил компонент с именем TestService
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";
}
}
import org.springframework.context.annotation.Configuration;
@Configuration
public class TestService {
}
configProps
показывает все бины, аннотированные @ConfigurationProperties
.@ConfigurationProperties
и, следовательно, отображаются в этой конечной точке.HttpTraceProperties
, аннотированный @ConfigurationProperties
.env
предоставляет всю информацию, относящуюся к окружению, в следующем порядке:Свойства системы |
зависит от JVM (не зависит от платформы) |
---|---|
Системное окружение или переменные окружения |
зависит от операционной системы (зависит от платформы) |
Настройки уровня приложения |
определены в application.properties |
loggers
предоставляет логгеры приложения с информацией об их настроенном уровне логирования (configuredLevel) и эффективном уровне (effectiveLevel). Если для логера и его родителя настроенный уровень не указан (null), то эффективным уровнем будет уровень корневого логера.level
указывает, какие уровни логирования поддерживаются фреймворком логирования./loggers
, как показано ниже:metrics
показывает все метрики, которые вы можете отслеживать для вашего приложения./metrics
, как показано ниже:К сожалению, не доступен сервер mySQL