Observability Correlation
Junseok Oh
Sr. Solutions Architect
Amazon Web Services
Block 3: Observability Correlation (35분)
Prometheus / AMP
"무엇이 문제인가?"
Loki
"왜 발생했는가?"
Tempo
"어디서 발생했는가?"
통합 대시보드
Exemplar를 통한 메트릭 → 트레이스 → 로그 연결
메트릭(주로 히스토그램)의 특정 데이터 포인트에 TraceID를 첨부하여 해당 요청의 트레이스로 바로 이동할 수 있게 해주는 기능
--enable-feature=exemplar-storage 필요 (3.x에서도 feature flag)데이터 포인트 위의 ◆ = Exemplar (클릭 가능)
traces_service_graph_* 메트릭 필요)Tempo는 트레이스 저장소, Loki는 로그 저장소: Grafana가 양쪽을 조회하며 연결합니다. 로그의 traceId로 트레이스를 찾거나, 트레이스의 메타데이터로 관련 로그를 필터링합니다.
| 형식 | 정규식 |
|---|---|
| JSON 필드 | "traceId":"([a-f0-9]+)" |
| W3C Trace Context | traceparent.*-([a-f0-9]{32})- |
| Jaeger | uber-trace-id:([a-f0-9]+): |
Tempo의 강력한 트레이스 쿼리 언어
payment-service에서 발생한 모든 트레이스를 검색합니다.
HTTP POST 요청이 포함된 트레이스를 검색합니다.
참고: 최신 OTel semconv는 http.request.method, http.response.status_code를 사용합니다. 구형 SDK는 http.method, http.status_code를 emit하므로 SDK 버전에 맞춰 속성명을 선택하세요.
에러 상태의 span이 포함된 트레이스를 검색합니다.
HTTP 5xx 에러가 발생한 트레이스를 검색합니다.
1초 이상 걸린 span이 포함된 트레이스를 검색합니다.
500ms ~ 2s 사이의 span을 검색합니다.
HTTP 4xx/5xx 에러이면서 500ms 이상 걸린 트레이스를 검색합니다.
api-gateway에서 에러 span이 5개 초과인 트레이스를 검색합니다.
A >> B는 "A span 하위에 B span이 존재하는 트레이스"를 의미합니다.
api-gateway에서 payment-service로 이어지는 호출 경로를 가진 트레이스를 검색합니다.
HTTP GET 이후 100ms 이상 걸리는 DB SELECT가 있는 트레이스를 검색합니다.
마이크로서비스 의존성 그래프
두 방법론의 관계와 차이: 메트릭 3개가 겹칩니다
마이크로서비스 관점: "내 서비스가 잘 응답하는가?"
인프라 + 서비스 관점: "시스템 전체가 건강한가?"
| RED Method | 4 Golden Signals | PromQL 예시 | |
|---|---|---|---|
| Rate | = | Traffic | rate(http_requests_total[5m]) |
| Errors | = | Errors | rate(http_requests_total{code=~"5.."}[5m]) |
| Duration | = | Latency | histogram_quantile(0.99, ...) |
| 없음 | + | Saturation | container_memory_usage / limits |
에러율 급증 시점과 패턴 확인
Exemplar를 통해 에러 트레이스 추적
해결책:
텔레메트리 데이터 수신
데이터 변환 및 필터링 (순서대로 실행)
decision_wait: 10s)loadbalancing exporter를 두세요.
백엔드로 데이터 전송
otlp는 v0.144부터 deprecated alias)loki exporter는 contrib v0.131.0에서 제거)--web.enable-remote-write-receiver, AMP는 sigv4auth 필요)파이프라인과 파이프라인을 연결
예시 가정: 100% 기준 일 10M 트레이스, 트레이스 100만 건당 월 $50 저장 비용. 실제 비용은 span 크기, 보존 기간, 백엔드에 따라 달라집니다.
트래픽 양에 따라 샘플링률을 자동 조절하는 전략. OTEL Collector의 tail_sampling + probabilistic_sampler를 조합하여 구현합니다.
| 전략 | 샘플링률 | 비용 절감 | Error 캡처 |
|---|---|---|---|
| Head Sampling | 10% | 90% | 10% |
| Tail Sampling | 10% + errors | 80-90% | 100% |
| Adaptive | 동적 (1~50%) | 85-95% | 100% |
| No Sampling | 100% | 0% | 100% |