В приложениях корпоративного уровня недостаточно научиться разрабатывать приложения SpringBoot и писать модульные тесты и интеграционные тесты. Также необходим в реальной разработке программного обеспечения: мониторинг и управление приложениями. Модуль Actuator SpringBoot реализует мониторинг и управление приложениями.
Введение в привод
В производственных системах часто необходимо отслеживать и поддерживать фактическую работу системы (например, процессор, ввод-вывод, диск, базу данных, бизнес-функции и другие показатели). В проекте SpringBoot модуль Actuator предоставляет несколько конечных точек интерфейса HTTP (Endpoint) для предоставления информации о внутреннем состоянии во время работы приложения.
Модуль Actuator предоставляет модуль для мониторинга и управления производственной средой и может использовать http, jmx, ssh, telnet и т. д. для управления и мониторинга приложений. Включая аудит приложений (аудит), информацию о состоянии работоспособности (работоспособности), сбор данных (сбор метрик), статистику и другие функции мониторинга эксплуатации и обслуживания. В то же время он предоставляет настраиваемые индикаторы мониторинга, которые могут расширять конечную точку Actuator (конечную точку). Эти показатели представлены в виде данных интерфейса JSON.
Использование привода
Чтобы использовать Spring Boot Actuator, вам необходимо добавить следующие зависимости:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Привод по умолчанию не интегрирован в автоконфигурацию, а представлен как отдельный проект. Когда вводятся вышеуказанные зависимости, по умолчанию вводятся два проекта, связанных с актуатором:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator-autoconfigure</artifactId>
</dependency>
Среди них spring-boot-actuator — реализация функции, а spring-boot-actuator-autoconfigure — автоматическая конфигурация.
Примечание. Поскольку SpringBoot Actuator будет раскрывать сведения о службе, для обеспечения безопасности рекомендуется добавить соответствующую зависимость spring-boot-starter-security для контроля безопасности, чтобы при доступе к конечной точке мониторинга приложений вам необходимо было введите данные аутентификации. Требуемые зависимости следующие:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
Что касается использования безопасности, то мы не будем здесь ее расширять, вы можете настроить соответствующий пароль доступа в файле приложения:
spring:
security:
user:
name: admin
password: admin
В следующем содержании для удобства мы пока не вводим безопасность.
После вышеперечисленных шагов запустите проект SpringBoot, и привод автоматически интегрируется и настраивается, доступ к которому можно получить через: http://localhost:8080/actuator, и результаты следующие:
{
"_links": {
"self": {
"href": "http://localhost:8080/actuator",
"templated": false
},
"health": {
"href": "http://localhost:8080/actuator/health",
"templated": false
},
"health-component": {
"href": "http://localhost:8080/actuator/health/{component}",
"templated": true
},
"health-component-instance": {
"href": "http://localhost:8080/actuator/health/{component}/{instance}",
"templated": true
},
"info": {
"href": "http://localhost:8080/actuator/info",
"templated": false
}
}
}
Поддерживаемые ссылки по умолчанию:
/actuator
/actuator/health
/health/{component}/{instance}
/health/{component}
/actuator/info
Вы можете настроить дополнительную информацию для мониторинга в файле конфигурации приложения:
management:
endpoints:
web:
exposure:
include: '*'
# base-path: /monitor
endpoint:
health:
show-details: always
shutdown:
enabled: true
- management.endpoints.web.exposure.include='*', что означает включить весь мониторинг или настроить только тот мониторинг, который необходимо включить, например: management.endpoints.web.exposure.include=beans,trace.
- management.endpoint.health.show-details=always, конечная точка работоспособности включена для отображения всех сведений. По умолчанию /actuator/health общедоступен, но не показывает подробности.
- management.endpoints.web.base-path=/monitor, включите указанный URL-адрес для доступа к корневому пути, путь по умолчанию — /actuator/*, а путь доступа становится /monitor/* при включении.
- management.endpoint.shutdown.enabled=true, разрешить интерфейсу завершать работу SpringBoot.
Если информация мониторинга должна передаваться между вызовами, ее можно поддерживать с помощью конфигурации CORS, которая по умолчанию отключена. Он включается после установки свойства management.endpoints.web.cors.allowed-origins.
Например, чтобы разрешить вызовы GET и POST из домена https://www.choupangxia.com:
management:
endpoints:
web:
cors:
allowed-origins: https://www.choupangxia.com
allowed-methods: GET,POST
REST-интерфейс
Spring Boot Actuator предоставляет очень богатый интерфейс мониторинга, с помощью которого вы можете понять внутреннее состояние среды выполнения приложения. Actuator также поддерживает определяемое пользователем добавление конечных точек и может определять некоторые дополнительные индикаторы в соответствии с фактическими приложениями и отслеживать их во время выполнения.
HTTP-метод | дорожка | описывать |
---|---|---|
GET | /auditevents | Отображает информацию о событиях аудита для текущего приложения. |
GET | /beans | Отображает полный список всех Spring Bean-компонентов в приложении. |
GET |
/conditions | Отображает состояние классов конфигурации и автоконфигурации и почему они применяются или не применяются. |
GET |
/configprops |
Отображает список всех @ConfigurationProperties |
GET |
/env |
Отображает свойства из Spring ConfigurableEnvironment. |
GET |
/flyway | Отображает путь миграции базы данных, если он есть. |
GET |
/health |
Отображает информацию о работоспособности приложения (простой «статус» при доступе с использованием соединения без проверки подлинности, полная информация при доступе с использованием соединения с проверкой подлинности) |
GET |
/info |
Отображение произвольной информации о приложении |
GET |
/liquibase |
Показать любые пути миграции базы данных Liquibase, если таковые имеются |
GET |
/metrics |
Отображение информации о метриках текущего приложения |
GET |
/mappings |
Отображает список всех путей @RequestMapping. |
GET |
/scheduledtasks |
Показывать запланированные задачи в приложении |
GET |
/sessions |
Позволяет извлекать и удалять пользовательские сеансы из хранилища сеансов, поддерживаемого сеансом Spring. Недоступно при использовании поддержки Spring Session для реактивных веб-приложений. |
POST |
/shutdown |
Позволяет приложениям корректно завершать работу (не включено по умолчанию) |
GET |
/threaddump |
выполнить дамп потока |
При использовании веб-приложения (Spring MVC, Spring WebFlux или Jersey) вы также можете использовать следующие интерфейсы:
HTTP-метод | дорожка | описывать |
---|---|---|
GET | /heapdump | Возвращает сжатый GZip файл дампа кучи hprof |
GET | /jolokia | Предоставление JMX-бинов через HTTP (WebFlux недоступен, когда Jolokia находится в пути к классам) |
GET | /logfile | Возвращает содержимое файла журнала (если установлено свойство logging.file или logging.path), поддерживает использование заголовка диапазона HTTP для получения частичной информации о содержимом файла журнала. |
GET | /prometheus | Отображение информации о метриках в формате, который может быть очищен сервером Prometheus. |
Подробный интерфейс
Health в основном используется для проверки рабочего состояния приложения, которое является наиболее часто используемой точкой мониторинга. Этот интерфейс обычно используется для отображения рабочего состояния экземпляра приложения и причин, по которым приложение не является «работоспособным», таких как подключение к базе данных, недостаточно места на диске и т. д.
По умолчанию статус работоспособности открыт.Посетите: http://localhost:8080/actuator/health, чтобы увидеть статус приложения.
{
"status" : "UP"
}
Установите порядок кодов состояния: setStatusOrder(Status.DOWN,Status.OUTOFСЕРВИС, Статус.UP, Статус.НЕИЗВЕСТНО). Отфильтруйте нераспознанные коды состояния. Если код состояния отсутствует, состояние всего приложения SpringBoot — НЕИЗВЕСТНО. Отсортируйте все собранные коды состояния. Возвращает первый код состояния в упорядоченной последовательности кодов состояния как состояние всего приложения Spring Boot.
Health проверяет работоспособность приложения, объединяя несколько индексов работоспособности. SpringBoot Actuator автоматически настраивает следующее:
название | описывать |
---|---|
CassandraHealthIndicator | Убедитесь, что база данных Cassandra запущена. |
CouchbaseHealthIndicator | Убедитесь, что кластер Couchbase запущен. |
DiskSpaceHealthIndicator | Проверьте, недостаточно ли места на диске. |
DataSourceHealthIndicator | Проверьте, может ли быть установлено соединение с DataSource. |
ElasticsearchHealthIndicator | Убедитесь, что кластер Elasticsearch запущен. |
InfluxDbHealthIndicator | Убедитесь, что сервер InfluxDB работает. |
JmsHealthIndicator | Проверьте, запущен ли агент JMS. |
MailHealthIndicator | Убедитесь, что почтовый сервер запущен. |
MongoHealthIndicator | Проверьте, работает ли база данных Mongo. |
Neo4jHealthIndicator | Проверьте, запущен ли сервер Neo4j. |
RabbitHealthIndicator | Убедитесь, что сервер Rabbit запущен. |
RedisHealthIndicator | Проверьте, работает ли сервер Redis. |
SolrHealthIndicator | Убедитесь, что сервер Solr запущен. |
Все можно отключить, установив свойство management.health.defaults.enabled.
собственная конечная точка
Существует три основных категории собственных конечных точек:
- Класс конфигурации приложения: получите информацию о классе конфигурации, тесно связанную с приложениями Spring Boot, такую как конфигурация приложения, переменные среды и автоматические отчеты о конфигурации, загруженные в приложение.
- Класс метрик: Получите метрики, используемые для мониторинга во время работы приложения, такие как информация о памяти, информация о пуле потоков, статистика HTTP-запросов и т. д.
- Класс управления операциями: предоставляет функции класса операций, такие как закрытие приложения.
Класс конфигурации приложения
/conditions: эта конечная точка используется для получения отчета о конфигурации автоматизации для приложения, который включает все варианты конфигурации автоматизации. В нем также указано, выполнены ли отдельные предварительные условия для каждой потенциальной конфигурации автоматизации. Эта конечная точка может помочь нам легко найти конкретные причины, по которым некоторые автоматические конфигурации не вступают в силу.
Содержимое отчета делит конфигурацию автоматизации на две части: PositiveMatches возвращает конфигурацию автоматизации с успешным сопоставлением условий, а негативные соответствия возвращает конфигурацию автоматизации с неудачным сопоставлением условий.
Часть кода выглядит следующим образом:
"contexts": {
"application": {
"positiveMatches": {
"MsgAutoConfiguration": [
{
"condition": "OnClassCondition",
"message": "@ConditionalOnClass found required class 'com.secbro2.msg.MsgService'"
}
],
"MsgAutoConfiguration#msgService": [
{
"condition": "OnPropertyCondition",
"message": "@ConditionalOnProperty (msg.enabled=true) matched"
},
{
"condition": "OnBeanCondition",
"message": "@ConditionalOnMissingBean (types: com.secbro2.msg.MsgService; SearchStrategy: all) did not find any beans"
}
],
/info: это информация, настроенная в файле конфигурации, начинающаяся с info, например, конфигурация:
info:
app:
name: spring-boot-actuator
version: 1.0.0
Возвращаемый результат:
{
"app":{
"name":"spring-boot-actuator",
"version":"1.0.0"
}
}
Параметры, настроенные в информации, также могут поступать из узлов элементов в файле pom.xml через значения атрибутов, окруженные символами *@*. следующее:
info:
build:
artifact: @project.artifactId@
name: @project.name@
description: @project.description@
ersion: @project.version@
Возвращаемый результат:
{
"build": {
"artifact": "spring-learn",
"name": "spring-learn",
"description": "Demo project for Spring Boot",
"ersion": "0.0.1-SNAPSHOT"
}
}
/beans: эта конечная точка используется для получения всех bean-компонентов, созданных в контексте приложения.
{
"contexts": {
"application": {
"beans": {
"endpointCachingOperationInvokerAdvisor": {
"aliases": [],
"scope": "singleton",
"type": "org.springframework.boot.actuate.endpoint.invoker.cache.CachingOperationInvokerAdvisor",
"resource": "class path resource [org/springframework/boot/actuate/autoconfigure/endpoint/EndpointAutoConfiguration.class]",
"dependencies": ["environment"]
},
"defaultServletHandlerMapping": {
"aliases": [],
"scope": "singleton",
"type": "org.springframework.web.servlet.HandlerMapping",
"resource": "class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]",
"dependencies": []
},
},
"parentId": null
}
}
}
Интерфейс показывает псевдоним бина, тип, является ли он синглтоном, адрес класса, зависимости и другую информацию.
/configprops: эта конечная точка используется для получения отчета о свойствах, настроенного в приложении.
{
"spring.transaction-org.springframework.boot.autoconfigure.transaction.TransactionProperties": {
"prefix": "spring.transaction",
"properties": {}
}
}
Информация о конфигурации для свойства TransactionProperties показана выше.
/mappings: эта конечная точка используется для возврата всех отчетов о сопоставлении контроллеров SpringMVC.
{
"handler": "Actuator web endpoint 'beans'",
"predicate": "{GET /actuator/beans, produces [application/vnd.spring-boot.actuator.v2+json || application/json]}",
"details": {
"handlerMethod": {
"className": "org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping.OperationHandler",
"name": "handle",
"descriptor": "(Ljavax/servlet/http/HttpServletRequest;Ljava/util/Map;)Ljava/lang/Object;"
},
"requestMappingConditions": {
"consumes": [],
"headers": [],
"methods": ["GET"],
"params": [],
"patterns": ["/actuator/beans"],
"produces": [{
"mediaType": "application/vnd.spring-boot.actuator.v2+json",
"negated": false
}, {
"mediaType": "application/json",
"negated": false
}]
}
}
}
/env: эта конечная точка отличается от /configprops, она используется для получения отчета обо всех доступных свойствах среды для приложения. В том числе: переменные среды, свойства JVM, конфигурация конфигурации приложения, параметры в командной строке.
Метрический класс
Индикаторы, предоставляемые классом конфигурации приложения, являются статическими отчетами, в то время как содержимое отчетов, предоставляемое конечными точками класса метрик, является динамическим, предоставляя некоторую информацию о моментальных снимках приложения во время выполняемого процесса, например: использование памяти, статистика HTTP-запросов, индикаторы внешних ресурсов. , и т.д. Эти конечные точки очень полезны для создания систем мониторинга в микросервисной архитектуре.
/metrics: эта конечная точка используется для возврата различных важных показателей текущего приложения, таких как информация о памяти, информация о потоке, информация о сборке мусора и т. д.
{
"names": [
"jvm.memory.max",
"jvm.threads.states",
"http.server.requests",
"process.files.max",
"jvm.gc.memory.promoted",
"system.load.average.1m",
"jvm.memory.used",
"jvm.gc.max.data.size",
"jvm.gc.pause",
"jvm.memory.committed",
"system.cpu.count",
"logback.events",
"tomcat.global.sent",
"jvm.buffer.memory.used",
"tomcat.sessions.created",
"jvm.threads.daemon",
"system.cpu.usage",
"jvm.gc.memory.allocated",
"tomcat.global.request.max",
"tomcat.global.request",
"tomcat.sessions.expired",
"jvm.threads.live",
"jvm.threads.peak",
"tomcat.global.received",
"process.uptime",
"tomcat.sessions.rejected",
"process.cpu.usage",
"tomcat.threads.config.max",
"jvm.classes.loaded",
"jvm.classes.unloaded",
"tomcat.global.error",
"tomcat.sessions.active.current",
"tomcat.sessions.alive.max",
"jvm.gc.live.data.size",
"tomcat.threads.current",
"process.files.open",
"jvm.buffer.count",
"jvm.buffer.total.capacity",
"tomcat.sessions.active.max",
"tomcat.threads.busy",
"process.start.time"
]
}
Из приведенного выше примера есть следующие важные показатели:
- Системная информация: включая количество процессоров, время работы безотказной работы и instance.uptime, а также среднюю загрузку системы systemload.average.
- mem.*: сводная информация о памяти, включая общий объем памяти, выделенной приложению, и текущий объем свободной памяти. Эта информация поступает из java.lang.Runtime.
- heap.*: использование памяти кучи. Эта информация поступает из java.lang.management.MemoryUsage, полученного методом getHeapMemoryUsage в интерфейсе java.lang.management.MemoryMXBean.
- nonheap.*: Использование памяти без кучи. Эта информация поступает из java.lang.management.MemoryUsage, полученного методом getNonHeapMemoryUsage в интерфейсе java.lang.management.MemoryMXBean.
- threads.*: использование потоков, включая количество потоков, количество потоков демона (daemon), пик потока (peak) и т. д. Все эти данные взяты из java.lang.management.ThreadMXBean.
- классы.*: Статистика классов загружается и выгружается приложением. Эти данные взяты из java.lang.management.ClassLoadingMXBean.
- gc.*: Подробная информация о сборщике мусора, включая количество сборок мусора gc.ps_scavenge.count, время использования сборки мусора gc.ps_scavenge.time, количество алгоритмов маркировки-очистки gc.ps_marksweep.count и время использования алгоритмов маркировки-развертки gc.ps_marksweep.time. Эти данные взяты из java.lang.management.GarbageCollectorMXBean.
- httpssessions.*: Использование сеанса контейнера Tomcat. Включая максимальное количество сессий httpsessions.max и количество активных сессий httpsessions.active. Эта информация о метрике доступна только в том случае, если встроенный Tomcat представлен в качестве контейнера приложения.
- Gauge.*: один из показателей производительности HTTP-запросов, в основном используется для отображения абсолютного значения. Например, Gauge.response.hello: 5 в приведенном выше примере означает, что время задержки последнего приветственного запроса составляет 5 миллисекунд.
- counter.*: Один из показателей производительности HTTP-запросов, в основном используется как счетчик, фиксирующий увеличение и уменьшение. В приведенном выше примере counter.status.200.hello: 11 означает, что запрос hello возвращает статус 200 11 раз.
/threaddump: создает моментальный снимок активности текущего потока. Нам удобно просматривать ситуацию в потоке при ежедневном обнаружении проблем. В основном он отображает такую информацию, как имя потока, идентификатор потока, статус потока, следует ли ждать блокировки ресурсов и т. д.
{
"threads": [{
"threadName": "Reference Handler",
"threadId": 2,
"blockedTime": -1,
"blockedCount": 2,
"waitedTime": -1,
"waitedCount": 0,
"lockName": null,
"lockOwnerId": -1,
"lockOwnerName": null,
"daemon": true,
"inNative": false,
"suspended": false,
"threadState": "RUNNABLE",
"priority": 10,
"stackTrace": [{
"classLoaderName": null,
"moduleName": "java.base",
"moduleVersion": "11.0.4",
"methodName": "waitForReferencePendingList",
"fileName": "Reference.java",
"lineNumber": -2,
"className": "java.lang.ref.Reference",
"nativeMethod": true
}
...
"lockedMonitors": [],
"lockedSynchronizers": [{
"className": "java.util.concurrent.locks.ReentrantLock$NonfairSync",
"identityHashCode": 2060076420
}],
"lockInfo": null
...
{
"threadName": "DestroyJavaVM",
"threadId": 42,
"blockedTime": -1,
"blockedCount": 0,
"waitedTime": -1,
"waitedCount": 0,
"lockName": null,
"lockOwnerId": -1,
"lockOwnerName": null,
"daemon": false,
"inNative": false,
"suspended": false,
"threadState": "RUNNABLE",
"priority": 5,
"stackTrace": [],
"lockedMonitors": [],
"lockedSynchronizers": [],
"lockInfo": null
}]
}
/trace: эта конечная точка используется для возврата базовой информации о трассировке HTTP. По умолчанию информация об отслеживании хранится в формате .
Класс управления операциями
/shutdown: настройте эту функцию в файле конфигурации:
management.endpoint.shutdown.enabled=true
Используйте curl для имитации почтового запроса к этому интерфейсу:
curl -X POST "http://localhost:8080/actuator/shutdown"
Отображаемый результат:
{
"message": "Shutting down, bye..."
}
резюме
В этой статье представлены основные функции и подробные объяснения мониторинга SpringBoot Actuator, а в следующей статье будет показано, как эта функция реализована в Spring Boot. Добро пожаловать в паблик-аккаунт "Program New Vision".
Оригинальная ссылка: "Подробное объяснение использования мониторинга Spring Boot Actuator》