IT Developer/Spring

Spring 기초 <32. Spring Boot에서 OpenTelemetry를 활용한 애플리케이션 모니터링>

TEMA_ 2025. 4. 17. 13:23
반응형

스프링 Spring

32. Spring Boot에서 OpenTelemetry를 활용한 애플리케이션 모니터링

 

안녕하세요! 태마입니다.

Spring 기초 강좌입니다.

 

강좌의 경우 

1. 주제 간단 정리

2. 상세 주제 정리

으로 이루어져 있습니다.

 

스프링 Spring

포스팅 시작하겠습니다 :)

 


 

1. 주제 간단 정리

 

1. OpenTelemetry란?

OpenTelemetry는 애플리케이션의 성능을 모니터링하고 분석하기 위한 오픈소스 관찰 가능성(Observability) 프레임워크
애플리케이션의 트레이스(Trace), 메트릭(Metrics), 로그(Logs)를 수집하여 시스템 성능을 분석하는 데 활용됨

📌 OpenTelemetry의 주요 기능

기능설명
분산 트레이싱(Distributed Tracing) 서비스 간 요청 흐름을 추적
메트릭 수집(Metrics Collection) CPU 사용량, 메모리 소비, 요청 응답 시간 측정
로그 분석(Log Analysis) 애플리케이션의 이벤트 기록을 분석
다양한 백엔드 지원 Jaeger, Zipkin, Prometheus, Grafana 연동 가능

📌 OpenTelemetry를 활용하면 "애플리케이션의 성능을 실시간으로 모니터링하고 분석 가능"


2. OpenTelemetry가 필요한 이유

마이크로서비스 환경에서는 서비스 간의 요청 흐름을 추적하는 것이 중요함
OpenTelemetry를 사용하면 장애 발생 시 어느 부분에서 병목(Bottleneck)이 발생했는지 쉽게 파악 가능

📌 기존 로깅 방식 vs OpenTelemetry 비교

방식문제점
기존 로깅 방식 서비스 간의 요청 흐름을 추적하기 어려움
단일 애플리케이션 로깅 마이크로서비스 간의 연관성 분석 불가
수동 로그 분석 대량의 로그 데이터를 수동으로 분석해야 함

📌 OpenTelemetry를 활용하면 "서비스 간 요청 흐름을 시각적으로 확인하고 문제를 빠르게 해결 가능"


✅ 여기까지 OpenTelemetry의 개념과 필요성을 배웠습니다!
👉 "그렇다면, Spring Boot에서 OpenTelemetry를 어떻게 적용할까?"
✅ 2부에서 Spring Boot에서 OpenTelemetry를 설정하고, Jaeger 및 Prometheus와 연동하는 방법을 배워봅시다!

반응형

 


 

2. 상세 주제 정리

 

1. OpenTelemetry 환경 설정

Spring Boot 애플리케이션에서 OpenTelemetry를 적용하려면 먼저 의존성을 추가해야 함

📌 1️⃣ build.gradle에 OpenTelemetry 의존성 추가

dependencies {
    implementation 'io.opentelemetry:opentelemetry-api:1.19.0'
    implementation 'io.opentelemetry:opentelemetry-sdk:1.19.0'
    implementation 'io.opentelemetry:opentelemetry-exporter-jaeger:1.19.0'
}

OpenTelemetry API 및 Jaeger Exporter 추가

📌 2️⃣ application.yml에서 OpenTelemetry 설정

otel:
  traces:
    exporter: jaeger
  metrics:
    exporter: prometheus

Jaeger와 Prometheus를 통해 트레이스 및 메트릭 수집

📌 OpenTelemetry를 활용하면 "Spring Boot 애플리케이션의 성능 모니터링을 쉽게 설정 가능"


2. OpenTelemetry에서 Jaeger를 활용한 트레이싱 적용

Jaeger는 OpenTelemetry에서 분산 트레이싱을 시각화하는 도구

📌 1️⃣ Jaeger 컨테이너 실행 (Docker 사용)

docker run -d --name jaeger \
  -p 16686:16686 \
  -p 14268:14268 \
  jaegertracing/all-in-one:latest

Jaeger UI는 http://localhost:16686에서 확인 가능

📌 2️⃣ OpenTelemetry를 활용한 트레이싱 적용 (TracingConfig.java)

import io.opentelemetry.api.GlobalOpenTelemetry;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.api.trace.TracerProvider;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.trace.SdkTracerProvider;
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
import io.opentelemetry.exporter.jaeger.JaegerGrpcSpanExporter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TracingConfig {

    @Bean
    public Tracer tracer() {
        JaegerGrpcSpanExporter jaegerExporter = JaegerGrpcSpanExporter.builder()
                .setEndpoint("http://localhost:14268/api/traces")
                .build();

        SdkTracerProvider tracerProvider = SdkTracerProvider.builder()
                .addSpanProcessor(BatchSpanProcessor.builder(jaegerExporter).build())
                .build();

        OpenTelemetrySdk openTelemetrySdk = OpenTelemetrySdk.builder()
                .setTracerProvider(tracerProvider)
                .build();

        GlobalOpenTelemetry.set(openTelemetrySdk);
        return openTelemetrySdk.getTracer("my-app");
    }
}

트레이싱 데이터를 Jaeger로 전송하여 분석 가능

📌 Jaeger를 활용하면 "애플리케이션의 트랜잭션 흐름을 실시간으로 시각화 가능"


3. Prometheus & Grafana를 활용한 메트릭 수집

Prometheus는 OpenTelemetry와 연동하여 애플리케이션의 성능 메트릭을 수집하는 도구
Grafana는 Prometheus 데이터를 시각화하는 대시보드 도구

📌 1️⃣ Prometheus 실행 (Docker 사용)

docker run -d --name=prometheus -p 9090:9090 \
  -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus

Prometheus UI는 http://localhost:9090에서 확인 가능

📌 2️⃣ Prometheus 설정 (prometheus.yml)

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'otel-metrics'
    static_configs:
      - targets: ['host.docker.internal:9464']

OpenTelemetry에서 수집한 메트릭 데이터를 Prometheus에서 분석 가능

📌 Prometheus & Grafana를 활용하면 "Spring Boot 애플리케이션의 성능 모니터링을 실시간으로 가능"


4. OpenTelemetry 기반의 Observability 아키텍처

OpenTelemetry는 트레이스, 메트릭, 로그를 모두 수집할 수 있는 통합된 관찰 가능성(Observability) 프레임워크

📌 Spring Boot + OpenTelemetry 모니터링 아키텍처

+---------------------+       +----------------------+
| Spring Boot App     | ----> | OpenTelemetry Agent |
+---------------------+       +----------------------+
       |                              |
       v                              v
+-----------------+       +-----------------+
| Prometheus     | ----> | Grafana         |
+-----------------+       +-----------------+
       |
       v
+-----------------+
| Jaeger         |
+-----------------+

Prometheus & Grafana: 메트릭 수집 및 시각화
Jaeger: 트랜잭션 흐름 분석

📌 OpenTelemetry를 활용하면 "실시간 애플리케이션 성능 분석 및 문제 해결이 가능"


✅ 여기까지 Spring Boot에서 OpenTelemetry를 활용한 애플리케이션 모니터링 방법을 배웠습니다!
👉 "그렇다면, Spring Boot에서 A/B 테스트와 Feature Toggle을 적용하려면?"
✅ 다음 회차에서 Spring Boot에서 A/B 테스트와 Feature Toggle 적용 방법을 배워봅시다!

 

반응형