Конечные точки Spring Boot Actuator

Spring Boot Actuator Endpoints позволяет нам мониторить и взаимодействовать с нашим приложением. Spring Actuator – это подмодуль Spring Boot, который предоставляет встроенные конечные точки, которые мы можем включить и отключить для нашего приложения.

Spring Boot Actuator Endpoints

Конечные точки Spring Boot Actuator доступны через JMX и HTTP, в большинстве случаев мы используем HTTP-конечные точки Actuator, потому что они легко доступны через браузер, команду CURL, оболочечные сценарии и т. д. Некоторые полезные конечные точки актуатора:

  1. beans: этот конечный пункт возвращает список всех настроенных бинов в нашем приложении.
  2. env: предоставляет информацию о свойствах среды Spring.
  3. health: отображает состояние здоровья приложения
  4. info: отображает информацию о приложении, которую мы можем настроить в свойствах среды Spring.
  5. mappings: отображает список всех путей @RequestMapping.
  6. shutdown: позволяет грациозно завершить работу приложения.
  7. threaddump: предоставляет дамп потоков приложения.

Вы можете получить полный список конечных точек приводов Spring Actuator здесь.

Безопасность конечных точек Spring Actuator

Только конечные точки “health” и “info” открыты без какой-либо защиты, для доступа ко всем остальным конечным точкам нам нужно настроить наше приложение на использование Spring Security. Это очень легко сделать, мы рассмотрим это в последней части урока.

Включение конечных точек Spring Actuator

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

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

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

2018-06-19 15:23:20.715  INFO 6493 --- [main] o.s.b.a.e.web.EndpointLinksResolver: Exposing 2 endpoint(s) beneath base path '/actuator'
2018-06-19 15:23:20.723  INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/health],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 15:23:20.724  INFO 6493 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/actuator/info],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)

Обратите внимание, что только два конечных точки – health и info – были сопоставлены. На изображении ниже показан вывод этих конечных точек актуатора. Заметили ли вы, что в /actuator/info нет данных? Это потому, что мы их не сконфигурировали. Просто добавьте следующие свойства в ваш файл application.properties.

info.app.name=Spring Actuator Example
info.app.java.version=10
info.app.type=Spring Boot

Перезапустите приложение, и вы получите следующий вывод:

Настройка базового пути конечных точек актуатора

По умолчанию базовый путь конечных точек актуатора – /actuator, мы можем изменить его на любое другое значение, установив management.endpoints.web.base-path в файле свойств приложения.

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

Разглашение других конечных точек актуатора

Мы можем включать и отключать другие конечные точки актуатора через файлы свойств. Если вы хотите включить все конечные точки актуатора, то добавьте следующее свойство.

management.endpoints.web.exposure.include=*

Для включения только определенных конечных точек привода, укажите список идентификаторов конечных точек.

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

Spring Security для конечных точек привода

Обратите внимание, что нам нужно добавить Spring Security в наше приложение для включения дополнительных конечных точек, поскольку для всех остальных конечных точек требуется как минимум базовая аутентификация. Добавьте следующую зависимость для spring security в ваше приложение.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>

Также добавьте имя пользователя и пароль spring security в файл свойств приложения.

spring.security.user.name=pankaj
spring.security.user.password=pankaj

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

2018-06-19 16:18:22.211  INFO 6627 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/beans],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212  INFO 6627 --- [           main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)
2018-06-19 16:18:22.212  INFO 6627 --- [           main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/env/{toMatch}],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)

Теперь, когда вы попытаетесь получить доступ к защищенным конечным точкам привода, вам придется предоставить учетные данные для входа. Ниже приведены изображения ответа конечных точек beans и env/java.home.

Пользовательские конечные точки Spring Actuator

Одна из великих особенностей Spring Framework заключается в том, что его очень легко расширять. Мы можем создавать собственные пользовательские конечные точки действия с помощью аннотации @Endpoint на классе. Затем мы должны использовать аннотации @ReadOperation, @WriteOperation или @DeleteOperation на методах, чтобы выставить их в качестве бина конечной точки действия. Мы можем создавать конечные точки, специфичные для технологии, с использованием аннотаций @JmxEndpoint и @WebEndpoint. Вот пример нашей собственной пользовательской конечной точки действия Spring.

package com.journaldev.spring;

import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Endpoint(id="myendpoint")
@Component
public class MyCustomEndpoints {

	@ReadOperation
	@Bean
	public String hi() {
		return "Hi from custom endpoint";
	}
}

Вы заметили идентификатор конечной точки? Нам также нужно настроить это в списке активных конечных точек, чтобы они были включены. Обновите следующие свойства в файле application.properties.

management.endpoints.web.exposure.include=health,info,beans,env,myendpoint

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

2018-06-19 17:06:59.743  INFO 6739 --- [main] s.b.a.e.w.s.WebMvcEndpointHandlerMapping : Mapped "{[/management/myendpoint],methods=[GET],produces=[application/vnd.spring-boot.actuator.v2+json || application/json]}" onto public java.lang.Object org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping$OperationHandler.handle(javax.servlet.http.HttpServletRequest,java.util.Map<java.lang.String, java.lang.String>)

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

Резюме

Spring Boot Actuator – это готовый к использованию модуль управления и информации. Мы можем легко расширить его, чтобы добавить свои собственные API и управлять нашим приложением.

Вы можете загрузить полный проект с нашего GitHub Repository.

Source:
https://www.digitalocean.com/community/tutorials/spring-boot-actuator-endpoints