본문 바로가기
스프링 부트3

스프링 부트 3와 Prometheus 연동

by 굿센스굿 2024. 12. 6.
반응형

 

스프링 부트(Spring Boot)는 개발자가 빠르고 간편하게 애플리케이션을 개발할 수 있도록 지원하는 강력한 프레임워크입니다. 여기에 Prometheus를 연동하면 애플리케이션의 상태를 실시간으로 모니터링하고, 성능 데이터를 수집하며, 알림 시스템과 통합할 수 있는 강력한 기능을 추가할 수 있습니다.

이번 글에서는 스프링 부트 3와 Prometheus를 연동하는 방법에 대해 자세히 알아보고, 실제 연동 예제를 통해 실용적인 사용법을 제시합니다.


1. Prometheus란?

Prometheus는 오픈소스 시스템 모니터링 및 경고 툴로, 주요 특징은 다음과 같습니다:

  • 다차원 데이터 모델: 시계열 데이터를 라벨(label) 기반으로 구분하여 저장.
  • 쿼리 언어 지원: PromQL을 통해 데이터를 효율적으로 조회하고 분석 가능.
  • 푸시 모델 대신 풀(Pull) 모델: 대상 시스템에서 데이터를 주기적으로 가져옴.
  • Alertmanager 통합: 조건에 따라 알림 전송.

스프링 부트 3 애플리케이션과 Prometheus를 연동하면 애플리케이션의 메트릭 데이터를 수집하고, 이를 활용해 성능 및 상태를 관리할 수 있습니다.


2. 준비 사항

  1. Java 환경: Java 17 이상 (스프링 부트 3의 요구사항).
  2. 스프링 부트 프로젝트: Maven 또는 Gradle 기반 프로젝트 생성.
  3. Prometheus 설치: Prometheus 공식 사이트에서 바이너리를 다운로드하여 설정.
  4. JVM Metrics Exporter: Micrometer를 사용하여 애플리케이션 메트릭 데이터를 노출.

3. 프로젝트 설정

스프링 부트 3와 Prometheus 연동을 위해 필요한 의존성을 추가하고 설정하는 방법을 알아보겠습니다.

3.1 의존성 추가

Gradle을 사용하는 경우 build.gradle 파일에 다음 의존성을 추가합니다:

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

Maven을 사용하는 경우 pom.xml 파일에 다음 의존성을 추가합니다:

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

3.2 Actuator 활성화

application.properties 또는 application.yml 파일에 Actuator와 Prometheus 관련 설정을 추가합니다.

application.yml 설정 예제:

management:
  endpoints:
    web:
      exposure:
        include: prometheus, health, metrics
  endpoint:
    prometheus:
      enabled: true

이 설정은 Actuator의 Prometheus 엔드포인트를 활성화하여 메트릭 데이터를 제공하도록 만듭니다.


4. Prometheus 설정

Prometheus에서 스프링 부트 애플리케이션의 메트릭 데이터를 수집하려면 설정 파일(prometheus.yml)을 수정해야 합니다.

4.1 prometheus.yml 설정 예제

scrape_configs:
  - job_name: 'spring-boot'
    scrape_interval: 5s
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['localhost:8080']

위 설정은 Prometheus가 localhost:8080/actuator/prometheus 경로에서 메트릭 데이터를 수집하도록 구성합니다.


5. 주요 메트릭 데이터 확인

스프링 부트 3 애플리케이션이 실행되면 /actuator/prometheus 엔드포인트를 통해 Prometheus가 수집할 수 있는 메트릭 데이터를 제공합니다.

5.1 브라우저에서 확인

애플리케이션을 실행한 후 브라우저에서 http://localhost:8080/actuator/prometheus로 접속하면 메트릭 데이터가 노출됩니다.

5.2 Prometheus에서 데이터 조회

Prometheus 웹 UI에 접속하여 http://localhost:9090에서 쿼리를 실행합니다. 예를 들어:

http_server_requests_seconds_count{method="GET"}

위 쿼리는 HTTP GET 요청의 수를 나타냅니다.


6. 예제 3가지

예제 1: 기본 애플리케이션 메트릭

스프링 부트에서 제공하는 기본 메트릭은 다음과 같습니다:

  • jvm_memory_used_bytes: JVM 메모리 사용량.
  • http_server_requests_seconds_count: HTTP 요청 수.
  • process_uptime_seconds: 애플리케이션 가동 시간.
jvm_memory_used_bytes{area="heap"} 123456789
http_server_requests_seconds_count{method="GET", status="200"} 42
process_uptime_seconds 3600

예제 2: 사용자 정의 메트릭 추가

Micrometer를 사용하여 사용자 정의 메트릭을 추가할 수 있습니다:

import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.stereotype.Component;

@Component
public class CustomMetrics {

    public CustomMetrics(MeterRegistry registry) {
        registry.gauge("custom_metric_example", 42);
    }
}

Prometheus에서 custom_metric_example이라는 새로운 메트릭이 노출됩니다.

예제 3: Alert 설정

Prometheus의 Alertmanager와 연동하여 특정 조건에 대한 알림을 설정할 수 있습니다.

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['localhost:9093']

rules:
  - alert: HighMemoryUsage
    expr: jvm_memory_used_bytes > 100000000
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "High memory usage detected"

7. 결론

스프링 부트 3와 Prometheus를 연동하면 애플리케이션의 성능을 효율적으로 모니터링하고 관리할 수 있습니다. 위에서 설명한 단계를 따라 설정하고 사용자 정의 메트릭 및 경고 규칙을 추가하면 더욱 강력한 모니터링 시스템을 구축할 수 있습니다.

Prometheus와 스프링 부트를 연동하는 경험을 통해 애플리케이션 성능 최적화를 시작해보세요! 😊

반응형