웹사이트 검색

스프링 부트 액추에이터 엔드포인트


Spring Boot Actuator Endpoints를 사용하면 애플리케이션을 모니터링하고 상호 작용할 수 있습니다. Spring Actuator는 Spring Boot 하위 모듈이며 애플리케이션에 대해 활성화 및 비활성화할 수 있는 내장 엔드포인트를 제공합니다.

스프링 부트 액추에이터 엔드포인트

Spring Boot Actuator 끝점은 JMX 및 HTTP를 통해 노출되며 브라우저, CURL 명령, 셸 스크립트 등을 통해 쉽게 액세스할 수 있기 때문에 대부분 HTTP 기반 Actuator 끝점을 사용합니다. 유용한 액추에이터 끝점 중 일부는 다음과 같습니다.

  1. beans: 이 엔드포인트는 애플리케이션에 구성된 모든 bean 목록을 반환합니다.
  2. env: Spring 환경 속성에 대한 정보를 제공합니다.
  3. 상태: 애플리케이션 상태 표시
  4. 정보: 애플리케이션 정보를 표시합니다. Spring 환경 속성에서 이를 구성할 수 있습니다.
  5. mappings: 모든 @RequestMapping 경로 목록을 표시합니다.
  6. shutdown: 애플리케이션을 정상적으로 종료할 수 있습니다.
  7. threaddump: 애플리케이션의 스레드 덤프를 제공합니다.

여기에서 스프링 액추에이터 끝점의 전체 목록을 얻을 수 있습니다.

스프링 액추에이터 엔드포인트 보안

스프링 보안을 위해 애플리케이션을 구성해야 하는 다른 모든 엔드포인트에 액세스하기 위해 "health\ 및 "info\ 엔드포인트만 보안 없이 노출됩니다. 이것은 달성하기 매우 쉽습니다. 자습서의 뒷부분에서 이에 대해 설명하겠습니다.

스프링 액추에이터 끝점 활성화

Spring Boot 프로젝트에 Spring Actuator Dependencies를 추가하면 액추에이터 끝점이 자동으로 활성화됩니다. 스프링 부트 액추에이터 엔드포인트를 활성화하려면 스프링 애플리케이션에 아래 종속성을 추가하세요.

<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>)
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

액추에이터 엔드포인트를 위한 스프링 보안

다른 모든 엔드포인트에는 최소한 기본 인증이 필요하기 때문에 추가 엔드포인트를 활성화하려면 애플리케이션에 Spring Security를 추가해야 합니다. 애플리케이션에서 스프링 보안을 위해 다음 종속성을 추가합니다.

<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>)

스프링 액츄에이터 커스텀 엔드포인트

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 리포지토리에서 전체 프로젝트를 다운로드할 수 있습니다.