architecture/micro service

[log tracing] sleuth? OpenTelemetry?

방푸린 2025. 2. 17. 17:57
반응형

환경: springboot3+

1. Spring Cloud Sleuth란?

Spring Cloud Sleuth는 Spring Boot 기반 애플리케이션에서 자동으로 분산 추적을 적용하는 라이브러리

  • Spring Boot 애플리케이션에서 HTTP 요청이 어떤 서비스에서 시작되어 어디까지 전달되었는지 추적 가능
  • Zipkin, Jaeger 등과 쉽게 연동 가능
  • 2022년부터 OpenTelemetry로 마이그레이션됨 (Spring Boot 3.0에서 Sleuth 제거됨)

장점

  • Spring Boot와 자연스럽게 통합됨
  • 자동으로 Trace ID/Span ID를 생성하고 로깅
  • Spring Cloud Gateway, Spring WebFlux와 연동 지원

단점

  • Spring Boot에 종속적 (Spring Cloud 기반 프로젝트가 아니면 사용 어려움)
  • Spring Boot 3부터 Sleuth가 공식적으로 제거됨 → OpenTelemetry로 전환 권장

잘 쓰던건데 deprecated 됨..ㅠㅠ

OpenTelemetry Tracing이란?

OpenTelemetry(OTel)는 벤더 중립적 표준 분산 추적 프레임워크

  • 기존 OpenTracing과 OpenCensus를 통합한 표준
  • Zipkin, Jaeger, Prometheus, Datadog 등 다양한 모니터링 시스템과 연동 가능
  • Java, Go, Python, JavaScript 등 다양한 언어 지원

장점

  • 특정 프레임워크(Spring Boot)에 종속되지 않음
  • 벤더 중립적 → 다양한 모니터링 백엔드 사용 가능
  • Spring Boot 3 이상에서 공식 지원됨

단점

  • Spring Cloud Sleuth에 비해 설정이 다소 복잡
  • 기존 Sleuth 기반 프로젝트라면 마이그레이션이 필요함

tracing 을 하기 위해서

<!-- Spring Boot 3 이상에서는 OpenTelemetry 사용 -->
<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-api</artifactId>
    <version>1.23.1</version>
</dependency>

<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-exporter-otlp</artifactId>
    <version>1.23.1</version>
</dependency>

api 라이브러리 역할

  • OpenTelemetry의 핵심 API (Core API)
  • 개발자가 애플리케이션에서 추적(Tracing) 및 메트릭(Metrics)을 수집할 수 있도록 하는 기본 인터페이스 제공
  • Tracer, Span, Meter, Baggage 등의 개념을 정의
  • 실제 데이터 전송(Exporting) 기능은 포함되지 않음
  • opentelemetry-api를 사용하여 Span(추적 단위)을 생성하고, 애플리케이션에서 트랜잭션을 추적할 수 있음..
import io.opentelemetry.api.trace.Span;
import io.opentelemetry.api.trace.Tracer;
import io.opentelemetry.api.GlobalOpenTelemetry;

public class OpenTelemetryExample {
    public static void main(String[] args) {
        Tracer tracer = GlobalOpenTelemetry.getTracer("my-tracer");

        // 새 Span 시작
        Span span = tracer.spanBuilder("my-span").startSpan();
        try {
            System.out.println("OpenTelemetry Trace 시작");
        } finally {
            span.end(); // Span 종료
        }
    }
}

OTLP 라이브러리 역할

  • OpenTelemetry 데이터를 OTLP (OpenTelemetry Protocol) 포맷으로 변환 후 백엔드(예: Jaeger, Zipkin, Grafana, New Relic 등)에 전송
  • 기본적으로 4317(grpc) 포트를 통해 OpenTelemetry Collector로 데이터를 전송
  • Collector는 Jaeger, Zipkin 등으로 데이터를 전달하여 시각화 가능

OTLP란?

  • OpenTelemetry Protocol (OTLP)
  • OpenTelemetry에서 정의한 데이터 송수신 표준
  • gRPC 또는 HTTP/JSON을 통해 추적 데이터(Trace, Metrics, Logs)를 전송
  • push 전용 프로토콜

 

OTel framework

자세한건 다음 글에..

wlt


https://medium.com/@dudwls96/opentelemetry-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-18b6e4fe6e36

 

OpenTelemetry 란 무엇인가?

MSA기반으로 개발된 서비스가 많아지고, 서비스 간의 관계가 점점 복잡해지면서 장애 분석 및 버그 추적이 점점 어려워지고 있습니다. 서비스의 관측성(Observability) 확보를 위한 다양한 상용 서비

medium.com

https://www.anyflow.net/sw-engineer/opensource-observability

 

Open Source 기반 Observability via OpenTelemetry, Service mesh

Open source를 기반으로 한 Observability 환경 구축에 대한 논의이다. 본 논의 중심에는 OpenTelemetry 뿐 아니라 Service Mesh(Istio), Prometheus, Grafana가 위치한다.

www.anyflow.net

 

 

728x90
반응형