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
자세한건 다음 글에..
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
반응형