Spring Boot Actuator 엔드포인트를 통해 애플리케이션을 모니터링하고 상호 작용할 수 있습니다. Spring Actuator는 Spring Boot의 하위 모듈로, 애플리케이션에 대해 활성화하거나 비활성화할 수 있는 내장된 엔드포인트를 제공합니다.
Spring Boot Actuator 엔드포인트
Spring Boot Actuator 엔드포인트는 JMX와 HTTP를 통해 노출됩니다. 대부분의 경우 브라우저, CURL 명령, 셸 스크립트 등을 통해 쉽게 접근할 수 있는 HTTP 기반 Actuator 엔드포인트를 사용합니다. 유용한 일부 액추에이터 엔드포인트는 다음과 같습니다:
- beans: 이 엔드포인트는 애플리케이션에서 구성된 모든 빈의 목록을 반환합니다.
- env: Spring 환경 속성에 대한 정보를 제공합니다.
- health: 애플리케이션 상태를 표시합니다.
- info: 애플리케이션 정보를 표시합니다. Spring 환경 속성에서 이를 구성할 수 있습니다.
- mappings: 모든 @RequestMapping 경로의 목록을 표시합니다.
- shutdown: 애플리케이션을 우아하게 종료할 수 있게 합니다.
- threaddump: 애플리케이션의 스레드 덤프를 제공합니다.
당신은 여기에서 spring 액추에이터 엔드포인트의 완전한 목록을 얻을 수 있습니다.
Spring Actuator Endpoints Security
“health”와 “info” 엔드포인트만 보안 없이 노출되며, 다른 모든 엔드포인트에 접근하려면 애플리케이션을 스프링 시큐리티로 구성해야 합니다. 이것은 매우 쉽게 달성할 수 있습니다. 튜토리얼의 후반부에서 다룰 것입니다.
Spring Actuator 엔드포인트 활성화
우리의 스프링 부트 프로젝트에 Spring Actuator 종속성을 추가하면 자동으로 액추에이터 엔드포인트가 활성화됩니다. 스프링 애플리케이션에 아래 종속성을 추가하여 스프링 부트 액추에이터 엔드포인트를 활성화하세요.
<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=*
특정 액추에이터 엔드포인트만 활성화하려면 엔드포인트 ID 목록을 제공하십시오.
management.endpoints.web.exposure.include=health,info,beans,env
액추에이터 엔드포인트용 스프링 시큐리티
다른 모든 엔드포인트는 적어도 기본 인증이 필요하므로 추가 엔드포인트를 활성화하려면 애플리케이션에 스프링 시큐리티를 추가해야 합니다. 애플리케이션에 다음 종속성을 추가하십시오.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
또한, 애플리케이션 속성 파일에 스프링 시큐리티 사용자 이름과 비밀번호를 추가하십시오.
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 Framework의 훌륭한 기능은 확장이 매우 쉽다는 것입니다. 우리는 클래스에 @Endpoint
어노테이션을 사용하여 사용자 정의 액추에이터 엔드포인트를 만들 수 있습니다. 그런 다음 메서드에 @ReadOperation
, @WriteOperation
, 또는 @DeleteOperation
어노테이션을 사용하여 해당 메서드를 액추에이터 엔드포인트 빈으로 노출해야 합니다. 우리는 @JmxEndpoint
및 @WebEndpoint
어노테이션을 사용하여 기술별 엔드포인트를 만들 수 있습니다. 여기 우리 자체의 사용자 정의 스프링 액추에이터 엔드포인트의 예제가 있습니다.
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";
}
}
엔드포인트 ID에 주목했나요? 이것을 활성화할 액추에이터 엔드포인트 목록에 구성해야 합니다. 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 저장소에서 다운로드할 수 있습니다.
Source:
https://www.digitalocean.com/community/tutorials/spring-boot-actuator-endpoints