분산 추적
목차
분산 추적 개요
W3C Trace Context
핵심 개념
Trace
Span
Baggage
OpenTelemetry 통합
1. OpenTelemetry Collector 설치
2. Istio에서 OpenTelemetry 활성화
MeshConfig 설정
Telemetry API로 추적 활성화
3. 네임스페이스별 추적 설정
Jaeger 통합
Jaeger All-in-One 배포 (개발/테스트용)
Jaeger Production 배포 (Elasticsearch 백엔드)
Istio에서 Jaeger 직접 사용
Zipkin 통합
Zipkin 배포
Istio에서 Zipkin 설정
Context Propagation
필수 HTTP 헤더
W3C Trace Context (권장)
B3 헤더 (기존 방식)
애플리케이션별 Context Propagation
Python (Flask + OpenTelemetry)
Go (Gin + OpenTelemetry)
Java (Spring Boot + OpenTelemetry)
Node.js (Express + OpenTelemetry)
Trace Context 검증
샘플링 전략
샘플링 레벨
1. Head Sampling (초기 샘플링)
2. Tail Sampling (사후 샘플링)
적응형 샘플링 (Adaptive Sampling)
샘플링 전략 가이드
환경
권장 샘플링 비율
전략
Trace 분석
Jaeger UI에서 Trace 검색
유용한 Trace 쿼리
1. 에러가 있는 trace 찾기
2. 느린 요청 찾기
3. 특정 사용자 요청 추적
4. 특정 API 엔드포인트 분석
Jaeger API로 프로그래밍 방식 분석
레이턴시 병목 지점 파악
Grafana Tempo 통합
커스텀 스팬 추가
Python 예제
Go 예제
성능 최적화
Trace 데이터 크기 최적화
Collector 성능 튜닝
Storage 최적화
Elasticsearch Index 관리
문제 해결
Trace가 보이지 않을 때
1. Envoy가 trace를 생성하는지 확인
2. Collector가 trace를 수신하는지 확인
3. Jaeger/Zipkin에 trace가 저장되는지 확인
Trace Context가 전파되지 않을 때
샘플링 비율이 적용되지 않을 때
참고 자료
마지막 업데이트