Book/스프링부트 핵심가이드

스프링부트 액추에이터 기능

블로그 주인장 2023. 11. 30.

엑추에이터의 기능에는 무엇이 있을까요?

 '액추에이터'  설정으로 볼 수 있는 기능에 대해 알아보겠습니다.


애플리케이션 기본 정보(/info)


액추에이터의 /info 엔드포인트를 활요하면 가동중인 애플리케이션의 정보를 확인할 수 있다.

제공하는 정보의 범위는 application.properties 파일에 'info.' 로 시작하는 속성값들을 정의하는 것이 가장 쉽다.

 

액추에이터 /info 설정 [application.properties]

info.organization.name=test
info.contact.email=test@gmail.com
info.contact.phoneNumber=010-1234-5678

 

액추에이터 /info 출력 결과

{
    "organization":
    {
    	"name":"test"
    }
    "contact":
    {
    	"email":"test@gmail.com"
        "phoneNumber":"010-1234-5678"
    }
}

 

애플리케이션 상태(/health)


/health 엔드포인트를 활용하면 애플리케이션의 상태를 확인 할 수 있다.

 

[예시] 호출 URL

http://localhost:8080/actuator/health

 

[예시] 호출 결과

{"status":"UP"}

 

[예시] 상세 상태 확인을 위한 속성 추가 [application.properties]

management.endpoint.health.show-details=always
  1. always :  모든 사용자에게 세부 상태를 표시
  2. when-authorized : 승인된 사용자에게만 세부 상태 표시 (확인 권한은 management.endpoint.health.roles 속성 부여)
  3. never(기본값) : 세부 사항 미표시

 

빈 정보 확인(/beans)


액추에이터의 /beans 엔드포인트를 사용하면 스프링 컨테이너에 등록된 스프링 빈의 전체 목록을 표시할 수 있다.

해당 엔드포인트는 JSON 형식으로 빈의 정보를 반환한다.

 

애플리케이션 빈 정보 확인

{
    "contexts":{
        "application":{
            "beans":
        {
            "endpointCachingOperation Invoker Advisor":
        {
            "aliases":[],
        "scope":"singleton",
        "type":"org.springframework.boot.actuate.endpoint.invoker.cache. CachingOperationInvokerAdvisor"
        },
        "parentId":null
        }
        }
    }
}

 

그 외 액추에이터 기능


스프링부트 자동설정 내역 확인(/conditions)

  • 스프링부트의 자동설정(AutoConfiguration) 조건 내역을 확인할 수 있다.
  • 출력내용은 positiveMatches / negativeMatches 속성으로 구분되는데, 자동설정의 @Conditional에 따라 평가된 내용을 표시한다.
http://localhost:8080/actuator/conditions

 

스프링부트 환경변수 정보(/env)

  • 스프링의 환경변수 정보를 확인하는 데 사용
  • 기본적으로 application.properties 파일의 변수들이 표시되며, OS / JVM의 환경변수도 함께 표시된다.
  • 일부 민감한 정보를 가리려면 management.endpoint.env.keys-to-santize 속성을 사용한다.
http://localhost:8080/actuator/env

 

스프링부트 로깅 레벨 확인(/loggers)

  • 애플리케이션의 로깅 레벨 수준이 어떻게 설정되어있는지 확인
http://localhost:8080/actuator/loggers

 

커스텀 액추에이터


정보 제공 인터페이스 구현체 생성

  • 커스터마이징하는 가장 간단한 방법은 /info 엔드포인트의 내용을 추가한 것처럼 application.properties 파일 내에 내용을 추가하는 것이다.
  • 액추에이터에서는 InfoContributor 인터페이스를 제공하는데, 해당 인터페이스를 구현하는 클래스를 생성하면 된다.
@Component
public class CustomInfoContributor implements InfoContributor {

    @Override
    public void contribute(Info.Builder builder) {
        Map<String, Object> content = new HashMap<>();
        content.put("code-info", "InfoContributor 구현체에서 정의한 정보입니다.");
        builder.withDetail("custom-info-contributor", content);
    }
}
  • InfoContributor 인터페이스를 구현체로 설정하면 contribute 메서드를 오버라이딩 할 수 있게 된다.
  • 파라미터로 받는 Builder 객체는 액추에이터 패키지의 Info 클래스 안에 정의되어 있는 클래스로 Info 엔드포인트에서 보여줄 내용을 담는 역할을 수행한다.
  • 콘텐츠를 담아 builder에 포함하면 엔드포인트 출력 결과에서 확인할 수 있다.

 

커스텀 엔드포인트 생성

  • @Endpoint 어노테이션으로 빈에 추가한 객체들은 @ReadOperation, @WriteOperation, @DeleteOperation 어노테이션을 이용하여 JMX 나 HTTP를 통해 커스텀 엔드포인트를 노출시킬 수 있다.
  • JMX에서만 사용하거나 HTTP 에서만 사용하는 것으로 제한하려면 @JmxEndpoint, @WebEndpoint 어노테이션을 사용하면 된다.
@Component
@Endpoint(id = "note")
public class NoteEndpoint {
    private Map<String, Object> noteContent = new HashMap<>();

    @ReadOperation
    public Map<String, Object> getNoteContent() {
        return noteContent;
    }

    @WriteOperation
    public Map<String, Object> writeNote(String key, Object value) {
        noteContent.put(key, value);
        return noteContent;
    }

    @DeleteOperation
    public Map<String, Object> deleteNote(String key, Object value) {
        noteContent.remove(key);
        return noteContent;
    }
}
  • @Endpoint
    • 액추에이터에 엔드포인트로 자동 등록되며 id 속성값으로 경로를 정의할 수 있다.
    • enableByDefault 속성으로 현재 생성하는 엔드포인트의 기본 활성화 여부도 설정이 가능하다.
    • enableByDefault 속성의 기본값은 true 로써, 값을 별도로 지정하지 않으면 활성화가 된다.
  • @ReadOperation
    • HTTP GET 요청에 반응하는 매서드이다.
    • noteContent라는 Map 타입의 객체를 전달한다.
  • @WriteOperation
    • 메서드에서 받고자하는 파라미터의 이름을 JSON 키 값으로 설정하고 그에 해당하는 값을 추가한다.
  • @DeleteOperation
    • DELETE 호출을 통해 사용이 가능하며 [Query Parameters]  값을 넣어 호출한다.
    • 현재 구성된 메서드에서는 key 값을 받아 Map 객체에서 해당 값을 삭제하는 작업을 수행하게 된다.
반응형

댓글