본문 바로가기

Study Information Technology

Spring Boot와 사용자 정의 메트릭스

728x90
반응형

Spring Boot와 사용자 정의 메트릭스

Overview

Spring Boot는 웹 애플리케이션 개발을 간편하게 해주는 프레임워크로, 기본적으로 강력한 모니터링과 메트릭스 기능을 제공합니다. 그러나 애플리케이션의 특정 요구 사항에 따라 커스텀 메트릭스를 추가해야 할 필요가 있을 수 있습니다. 이 글에서는 Spring Boot에서 사용자 정의 메트릭스를 설정하고 활용하는 방법을 자세히 설명하겠습니다. 커스텀 메트릭스를 추가하는 과정은 코드의 상태나 성능을 모니터링하는 데 중요한 역할을 하며, 시스템의 신뢰성과 가시성을 높이는 데 도움을 줍니다.

Spring Boot와 메트릭스 개요

Spring Boot에서는 Actuator를 통해 애플리케이션의 상태와 메트릭스를 쉽게 모니터링할 수 있습니다. Actuator는 다양한 내장 엔드포인트를 제공하여 애플리케이션의 상태를 실시간으로 확인할 수 있게 해줍니다. 기본적으로 제공하는 메트릭스 외에도, 사용자 정의 메트릭스를 추가하여 특정 지표를 모니터링하고, 알림을 설정하거나 성능을 분석하는 데 사용할 수 있습니다.

사용자 정의 메트릭스 설정하기

1. Spring Boot Actuator와 Micrometer 설정

Spring Boot에서 커스텀 메트릭스를 구현하려면 spring-boot-starter-actuatormicrometer-core 라이브러리를 추가해야 합니다. Micrometer는 메트릭 수집과 모니터링을 위한 API를 제공하며, 다양한 모니터링 시스템과 통합할 수 있습니다.

1.1. 의존성 추가

build.gradle 또는 pom.xml 파일에 다음 의존성을 추가합니다.

Gradle:

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-core'
}

Maven:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>
  <dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-core</artifactId>
  </dependency>
</dependencies>

1.2. Actuator 엔드포인트 설정

application.properties 또는 application.yml 파일에서 Actuator 엔드포인트를 설정할 수 있습니다.

application.properties:

management.endpoints.web.exposure.include=*
management.metrics.export.prometheus.enabled=true

2. 커스텀 메트릭스 구현하기

Micrometer를 사용하여 커스텀 메트릭스를 추가하는 방법을 설명하겠습니다.

2.1. 메트릭스 레지스트리 사용하기

Micrometer는 MeterRegistry를 통해 메트릭을 수집하고 관리합니다. MeterRegistry를 주입받아 메트릭을 등록할 수 있습니다.

예제 코드:

import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Counter;
import org.springframework.stereotype.Service;

@Service
public class MyService {

private final Counter myCounter;

public MyService(MeterRegistry meterRegistry) {
// 사용자 정의 메트릭스 등록
this.myCounter = meterRegistry.counter("my_custom_counter", "type", "example");
}

public void doSomething() {
// 메트릭스 증가
myCounter.increment();
// 비즈니스 로직 수행
}
}

이 코드에서는 MeterRegistry를 통해 my_custom_counter라는 이름의 카운터를 등록하고, doSomething 메서드가 호출될 때마다 이 카운터를 증가시킵니다. 메트릭스는 type이라는 레이블을 가지며, 값은 example로 설정되어 있습니다.

2.2. Timer와 Gauge 사용하기

다른 유형의 메트릭스인 TimerGauge도 활용할 수 있습니다.

Timer 예제:

import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;
import org.springframework.stereotype.Service;

@Service
public class MyService {

private final Timer myTimer;

public MyService(MeterRegistry meterRegistry) {
// 사용자 정의 타이머 등록
this.myTimer = meterRegistry.timer("my_custom_timer", "type", "example");
}

public void doSomething() {
Timer.Sample sample = Timer.start(myTimer);
try {
// 비즈니스 로직 수행
} finally {
sample.stop(myTimer);
}
}
}

Gauge 예제:

import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Service;

@Service
public class MyService {

private int gaugeValue = 0;

public MyService(MeterRegistry meterRegistry) {
// 사용자 정의 게이지 등록
Gauge.builder("my_custom_gauge", this, MyService::getGaugeValue)
.tags("type", "example")
.register(meterRegistry);
}

public void doSomething() {
// 비즈니스 로직 수행
gaugeValue++;
}

private int getGaugeValue() {
return gaugeValue;
}
}

3. 메트릭스 모니터링 및 시각화

커스텀 메트릭스를 설정한 후에는 이를 모니터링하고 시각화할 수 있어야 합니다. Spring Boot Actuator는 메트릭스를 HTTP 엔드포인트를 통해 노출할 수 있으며, Prometheus와 Grafana를 이용하여 시각화할 수 있습니다.

3.1. Prometheus 설정

Prometheus는 메트릭스를 수집하고 저장하는 오픈 소스 시스템입니다. Prometheus와 Spring Boot Actuator를 연동하여 커스텀 메트릭스를 수집할 수 있습니다.

application.properties:

management.metrics.export.prometheus.enabled=true

3.2. Grafana 설정

Grafana는 Prometheus에서 수집된 메트릭스를 시각화하는 도구입니다. Grafana 대시보드를 설정하여 커스텀 메트릭스를 실시간으로 모니터링할 수 있습니다.

에러 처리

커스텀 메트릭스를 설정하는 과정에서 발생할 수 있는 주요 에러와 해결 방법을 소개합니다.

1. MeterRegistry가 주입되지 않는 경우

  • 문제: MeterRegistry가 제대로 주입되지 않는 경우, NoSuchBeanDefinitionException 에러가 발생할 수 있습니다.
  • 해결: Spring Boot 애플리케이션의 설정을 확인하고, @Configuration 클래스에서 MeterRegistry 빈을 올바르게 등록했는지 확인합니다.

2. 메트릭스가 Prometheus에 노출되지 않는 경우

  • 문제: Prometheus 설정이 올바르게 되어 있지 않은 경우 메트릭스가 노출되지 않을 수 있습니다.
  • 해결: application.properties 파일에서 Prometheus 관련 설정이 정확한지 확인하고, Actuator의 /actuator/prometheus 엔드포인트를 직접 호출하여 메트릭스가 정상적으로 노출되는지 확인합니다.

참고문서

이 문서를 통해 Spring Boot 애플리케이션에서 사용자 정의 메트릭스를 설정하고 활용하는 방법을 이해할 수 있기를 바랍니다. 커스텀 메트릭스는 시스템의 성능과 상태를 세밀하게 모니터링하는 데 큰 도움이 됩니다.

728x90
반응형