스프링 부트를 이용한 모니터링과 메트릭 수집 방법

스프링 부트 모니터링의 중요성

monitoring image

스프링 부트는 대규모 애플리케이션의 개발에 매우 적합한 도구입니다. 그러나 대규모 애플리케이션을 개발하면서 발생하는 문제를 빠르게 파악하고 해결할 수 있도록 모니터링이 필수적입니다. 모니터링은 애플리케이션의 장애를 미리 예방하고, 성능 향상을 위한 피드백을 제공합니다. 이러한 이유로 스프링 부트에서는 모니터링을 위한 기능들을 제공하고 있습니다.

스프링 부트 액츄에이터 활용 방법

스프링 부트 애플리케이션에서 모니터링을 위해 사용하는 가장 기본적인 방법은 액츄에이터(Actuator)를 사용하는 것입니다. 액츄에이터는 스프링 부트에서 기본적으로 제공하는 모니터링 및 관리 기능을 모은 것입니다.

액츄에이터는 스프링 부트 애플리케이션 내부의 상태를 모니터링하고, 관리할 수 있는 엔드포인트(endpoint)를 제공합니다. 예를 들어, /actuator/health 엔드포인트는 애플리케이션의 상태를 반환하고, /actuator/metrics 엔드포인트는 메트릭 정보를 제공합니다.

액츄에이터를 사용하기 위해서는 다음과 같이 의존성을 추가해야 합니다.


    org.springframework.boot
    spring-boot-starter-actuator

애플리케이션을 실행한 후, /actuator 엔드포인트로 접속하면 다음과 같은 정보를 확인할 수 있습니다.

{
  "_links": {
    "self": {
      "href": "http://localhost:8080/actuator",
      "templated": false
    },
    "health": {
      "href": "http://localhost:8080/actuator/health",
      "templated": false
    },
    "health-path": {
      "href": "http://localhost:8080/actuator/health/{*path}",
      "templated": true
    },
    "info": {
      "href": "http://localhost:8080/actuator/info",
      "templated": false
    },
    "prometheus": {
      "href": "http://localhost:8080/actuator/prometheus",
      "templated": false
    }
  }
}

스프링 부트 메트릭 수집 방법

액츄에이터를 사용하면 /actuator/metrics 엔드포인트를 통해 메트릭 정보를 확인할 수 있습니다. 메트릭 정보는 애플리케이션의 상태를 구체적으로 파악할 수 있는 정보를 제공합니다. 예를 들어, HTTP 요청 수, 처리시간, 오류율 등의 정보를 확인할 수 있습니다.

메트릭 정보를 수집하기 위해서는 스프링 부트에서 제공하는 메트릭 라이브러리를 사용하면 됩니다. 메트릭 라이브러리는 각종 시스템 자원의 사용량, 애플리케이션의 작동 상태 등을 수집하여, 애플리케이션의 모니터링에 활용됩니다.

다음은 메트릭 라이브러리를 사용하기 위해 의존성을 추가하는 방법입니다.


    io.micrometer
    micrometer-core
    1.7.0

애플리케이션에서 메트릭 정보를 수집하기 위해서는, MeterRegistry를 사용합니다. MeterRegistry는 메트릭 정보를 저장하고, 측정합니다.

@Autowired
MeterRegistry meterRegistry;

public void someMethod() {
    Counter counter = meterRegistry.counter("some.counter");
    counter.increment();
}

위 코드는 MeterRegistry를 이용하여 some.counter라는 이름의 카운터를 생성하고, increment 메서드를 호출하여 값을 증가시키는 예제입니다.

스프링 부트 모니터링 도구의 활용 방안

스프링 부트에서 제공하는 모니터링 도구를 활용하여, 애플리케이션의 상태를 파악하고, 문제를 해결할 수 있습니다. 예를 들어, 애플리케이션에서 발생하는 문제를 실시간으로 확인하고, 처리할 수 있는 기능을 제공하는 스프링 부트 어드민(Admin)이 있습니다.

스프링 부트 어드민은 스프링 부트 애플리케이션의 상태를 모니터링하고, 관리할 수 있는 UI를 제공합니다. 어드민을 사용하면, 애플리케이션의 상태를 실시간으로 확인하고, 문제가 발생한 경우 즉시 대응할 수 있습니다.

어드민을 사용하기 위해서는 다음과 같이 의존성을 추가해야 합니다.


    de.codecentric
    spring-boot-admin-starter-server
    2.5.1

애플리케이션을 실행한 후, http://localhost:8080/admin으로 접속하면 스프링 부트 어드민 UI를 확인할 수 있습니다.

admin image

또한, 스프링 부트 어드민은 슬랙(Slack)과 같은 메신저와 연동하여, 애플리케이션에서 발생하는 문제를 실시간으로 알릴 수 있습니다. 이를 위해서는 다음과 같이 의존성을 추가하고, 어드민 설정 파일에 슬랙 연동 정보를 추가해야 합니다.


    de.codecentric
    spring-boot-admin-starter-client
    2.5.1
spring:
  boot:
    admin:
      notify:
        slack:
          webhook-url: https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX

위 설정은 스프링 부트 어드민에서 애플리케이션 문제가 발생한 경우, https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX로 메시지를 전송합니다.

결론

스프링 부트에서 제공하는 모니터링 도구를 활용하여, 애플리케이션의 상태를 파악하고, 문제를 해결할 수 있습니다. 액츄에이터를 사용하여 기본적인 모니터링을 수행하고, 메트릭 라이브러리를 사용하여 메트릭 정보를 수집할 수 있습니다. 또한, 스프링 부트 어드민을 사용하여 애플리케이션의 상태를 실시간으로 확인하고, 문제가 발생한 경우 즉시 대응할 수 있습니다. 이러한 모니터링 도구를 적극적으로 활용하여, 안정적인 애플리케이션을 개발하도록 노력해야 합니다.