Spring Boot, Actuator 적용하여 애플리케이션 상태 모니터링하기

개요

  • Spirng Boot 기반의 웹 애플리케이션을 구동하다 보면 JVM의 상태라던가, 사용 가능한 디스크 용량 등의 정보를 실시간으로 확인할 필요가 있다. Spring Boot에서는 이런 요구사항을 충족시킬 수 있는 Spirng Boot Actuator 모듈을 제공한다.

build.gralde 추가

dependencies {
    ...
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-actuator'
}
  • 기존의 Spring Boot 프로젝트에 spring-boot-starter-actuator 아티팩트를 추가하면 별다른 추가 설정 없이 바로 Spirng Boot Actuator 기능이 활성화 된다.

애플리케이션 호출

  • Spirng Boot Actuator가 제공하는 각 EndPointHTTP, JMX 등 다양한 접근 방식을 지원한다. 아래는 애플리케이션의 내부 로직에서 각 Endpoint에 접근하는 방법을 간단히 설명한 예제이다.
@Component
public class SomeComponent {

    @Autowired
    private MetricsEndpoint metricsEndpoint;

    @Autowired
    private HealthEndpoint healthEndpoint;

    public void printMetrics() {

        Map<String, Object> metrics = metricsEndpoint.invoke();
        Health health = healthEndpoint.invoke();

        // JVM이 사용 중인 메모리 MB
        float memJvmUsedMb = Float.valueOf((long) metrics.get("mem")) / 1024;

        // JVM이 사용 가능한 메모리 MB
        float memJvmFreeMb = Float.valueOf((long) metrics.get("mem.free")) / 1024;

        // 전체 디스크 MB
        float diskSpaceTotalGb = Float.valueOf((long) ((Health) health.getDetails().get("diskSpace")).getDetails().get("total")) / 1024 / 1024 / 1024;

        // 사용 가능한 디스크 MB
        float diskSpaceFreeGb = Float.valueOf((long) ((Health) health.getDetails().get("diskSpace")).getDetails().get("free")) / 1024 / 1024 / 1024;
    }
}
  • Endpoint는 스프링 빈으로 제공되므로 @Authwired 어노테이션으로 손쉽게 접근할 수 있다. invoke() 메써드의 응답 데이터는 HTTP로 요청할 때의 응답 데이터와 일치한다. 적절히 가공하여 1분 단위 로깅 등에 활용할 수 있다.

참고 글