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로 전달
CollectorSpan 수신, 검증, 변환 후 스토리지에 저장
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모든 컴포넌트가 단일 프로세스개발, 테스트
ProductionCollector + Query + Storage 분리 배포운영 환경
StreamingCollector → Kafka → Ingester → Storage대규모 트래픽, 버퍼링 필요

Sampling

Jaeger는 다양한 샘플링 전략을 지원한다:

전략설명
Constant모든 요청을 수집(1) 또는 미수집(0)
Probabilistic확률적 수집 (예: 0.1 = 10%)
Rate Limiting초당 최대 N개 Trace 수집
RemoteCollector에서 중앙 관리되는 샘플링 정책을 주기적으로 가져옴
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 환경에서의 분산 추적