Jaeger란?
Jaeger는 Uber에서 개발한 오픈소스 분산 추적 시스템이다. CNCF Graduated 프로젝트로, MSA 환경에서 요청 흐름을 추적하고 성능 병목과 장애 원인을 분석하는 데 사용한다.
Google의 Dapper 논문과 Zipkin에서 영감을 받아 설계되었으며, OpenTelemetry와 네이티브 통합을 지원한다.
아키텍처
Jaeger v2부터는 OpenTelemetry Collector를 기반으로 아키텍처가 단순화되었다.
Classic Architecture (v1)
┌──────────┐ ┌───────────┐ ┌───────────┐ ┌─────────┐
│ App + │────▶│ Jaeger │────▶│ Jaeger │────▶│ Storage │
│ Client │ │ Agent │ │ Collector │ │ Backend │
└──────────┘ └───────────┘ └───────────┘ └─────────┘
│
▼
┌─────────────┐
│ Jaeger Query│
│ (UI) │
└─────────────┘
| 컴포넌트 | 역할 |
|---|---|
| Client | 애플리케이션에 내장. Span 생성 및 Agent로 전송 |
| Agent | 호스트별 데몬. 클라이언트에서 Span을 수신하여 Collector로 전달 |
| Collector | Span 수신, 검증, 변환 후 스토리지에 저장 |
| Query | 스토리지에서 Trace 조회 및 UI 제공 |
| Ingester | (선택) Kafka에서 Span을 소비하여 스토리지에 저장 |
v2 Architecture
Jaeger v2는 OTel Collector 바이너리 위에 구축된다. Jaeger 고유 컴포넌트(스토리지, 쿼리, UI)를 OTel Collector의 확장으로 통합하여, 별도의 Agent가 필요 없어졌다.
스토리지 백엔드
| 스토리지 | 특징 |
|---|---|
| Elasticsearch / OpenSearch | 전문 검색 강점, 대규모 운영 환경에 적합 |
| Cassandra | 쓰기 성능 우수, 수평 확장 용이 |
| Memory | 개발/테스트용. 재시작 시 데이터 소실 |
| Badger | 임베디드 Key-Value. 올인원 배포에 적합 |
| ClickHouse | 커뮤니티 플러그인. 분석 쿼리 성능 우수 |
주요 기능
Trace 검색과 필터링
- 서비스명, 오퍼레이션명, 태그, 기간, 최소 지속 시간 등으로 Trace 검색
- Trace ID로 직접 조회
Trace 시각화
- Timeline View: Span을 시간축으로 나열하여 각 서비스별 소요 시간을 시각화
- Graph View: Span 간 관계를 그래프로 표현
Trace 비교
- 두 개의 Trace를 나란히 비교하여 성능 차이 분석
- 정상 요청과 비정상 요청의 차이점 식별
Service Performance Monitoring (SPM)
- 서비스별 요청률, 에러율, 지연 시간(R.E.D 메트릭) 대시보드
- Trace 데이터에서 자동 집계
서비스 의존성 그래프
- 실제 Trace 데이터 기반으로 서비스 간 호출 관계를 DAG(Directed Acyclic Graph)로 시각화
- 호출 빈도와 에러율을 엣지에 표시
배포 모드
| 모드 | 구성 | 적합한 환경 |
|---|---|---|
| All-in-One | 모든 컴포넌트가 단일 프로세스 | 개발, 테스트 |
| Production | Collector + Query + Storage 분리 배포 | 운영 환경 |
| Streaming | Collector → Kafka → Ingester → Storage | 대규모 트래픽, 버퍼링 필요 |
Sampling
Jaeger는 다양한 샘플링 전략을 지원한다:
| 전략 | 설명 |
|---|---|
| Constant | 모든 요청을 수집(1) 또는 미수집(0) |
| Probabilistic | 확률적 수집 (예: 0.1 = 10%) |
| Rate Limiting | 초당 최대 N개 Trace 수집 |
| Remote | Collector에서 중앙 관리되는 샘플링 정책을 주기적으로 가져옴 |
| Adaptive | 서비스·엔드포인트별 트래픽에 따라 자동 조정 |
OpenTelemetry와의 관계
- Jaeger v2는 OTel Collector 기반으로 구축
- OTLP를 기본 수신 프로토콜로 지원
- OTel SDK로 계측하고, Jaeger를 추적 백엔드로 사용하는 조합이 현재 권장 패턴
- Jaeger 고유 클라이언트 라이브러리는 deprecated → OTel SDK 사용 권장
관련 문서
- Observability — Jaeger가 속한 상위 개념
- Distributed Tracing — Jaeger가 구현하는 핵심 개념
- OpenTelemetry — 계측 표준 및 Jaeger v2의 기반
- Zipkin — Jaeger에 영감을 준 선구적 분산 추적 시스템
- CNCF — Jaeger의 소속 재단 및 Graduated 등급
- b3-header — Zipkin/B3 전파 포맷
- Istio — Service Mesh 환경에서의 분산 추적