엑추에이터의 기능에는 무엇이 있을까요?
'액추에이터' 설정으로 볼 수 있는 기능에 대해 알아보겠습니다.
애플리케이션 기본 정보(/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
- always : 모든 사용자에게 세부 상태를 표시
- when-authorized : 승인된 사용자에게만 세부 상태 표시 (확인 권한은 management.endpoint.health.roles 속성 부여)
- 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 객체에서 해당 값을 삭제하는 작업을 수행하게 된다.
반응형
'Book > 스프링부트 핵심가이드' 카테고리의 다른 글
스프링부트를 이용한 서버 간의 통신(of. RestTemplate) (0) | 2023.12.01 |
---|---|
스프링부트 액추에이터의 기본 개념 (0) | 2023.11.28 |
스프링부트에서 커스텀 예외 설정하기 (1) | 2023.11.25 |
댓글