Phase 6레슨 27
Distributed Tracing
Trace, Span, Context Propagation, OpenTelemetry — 분산 요청 추적
💡ELI5·
택배 추적과 Distributed Tracing
Trace (주문 #12345의 전체 경로):
[API Gateway] 10ms
└─ [Order Service] 50ms
├─ [DB Query] 30ms
└─ [Payment Service] 200ms ← 병목!
└─ [Payment DB] 180ms💡 비유 — 택배 추적 번호(Trace ID). 출발지 → 경유지 → 배송 완료까지 각 단계(Span)의 시간과 위치를 추적. 어디서 지연되었는지 한눈에 볼 수 있다.
🔬Deep Dive·
Trace/Span 구조
Trace: traceId=abc123
Span A (root): API Gateway, 250ms
Span B: Order Service, 200ms
Span C: DB Query, 30ms
Span D: Payment Service, 150ms
Span E: Payment DB, 120ms
Span F: Logging, 5ms
각 Span: traceId, spanId, parentSpanId, service, operation, duration# Context Propagation (W3C Trace Context 헤더)
# 서비스 A → 서비스 B 호출 시 전달
GET /api/orders HTTP/1.1
traceparent: 00-abc123def456-span001-01
# 형식: version-traceId-parentId-flags🔬Deep Dive·
샘플링 전략
| 전략 | 방식 | 적합 |
|---|---|---|
| Head-based | 요청 시작 시 확률로 결정 (예: 1%) | 일반 트래픽, 낮은 오버헤드 |
| Tail-based | 요청 완료 후 에러/지연 여부로 결정 | 에러/느린 요청 100% 추적 |
| Adaptive | 트래픽 양에 따라 샘플링 비율 조절 | 트래픽 변동 큰 서비스 |
⚖️Trade-off·
분산 추적의 비용
| 이점 | 대가 |
|---|---|
| 분산 병목 식별 | 전파 오버헤드 (헤더, 컨텍스트) |
| 서비스 의존도 시각화 | 저장 비용 (Trace 데이터) |
| 에러 원인 추적 | 샘플링으로 일부 누락 |
| p99 지연 분석 | 계측(Instrumentation) 코드 필요 |
❓ 체크포인트 질문
- 1.Trace와 Span의 관계는?
- 2.Context Propagation이 왜 필요한가?
- 3.Dapper(Google)가 분산 추적의 기초가 된 이유는?
- 4.분산 추적이 샘플링을 사용하는 이유는?
- 5.OpenTelemetry가 업계 표준이 된 이유는?