Part 6: 분산 추적 분석

난이도: 고급 (Advanced) 예상 소요 시간: 45분 마지막 업데이트: 2026년 2월 23일

학습 목표

  • Tempo + Grafana를 사용한 end-to-end 트레이스 분석

  • 서비스 간 병목 구간 식별

  • Loki와 Tempo 상관관계 분석

  • Exemplar를 통한 메트릭에서 트레이스 drill-down

분석 워크플로우

spinner

Step 6.1: TraceQL 트레이스 검색

TraceQL 기본 문법

연산자
설명
예시

{}

모든 트레이스

{}

{ .attr = "value" }

속성 필터

{ .service.name = "order-service" }

{ status = error }

상태 필터

{ status = error }

{ duration > 1s }

시간 필터

{ duration > 2s }

&&

AND 조건

{ .service.name = "api-gateway" && status = error }

||

OR 조건

{ status = error || duration > 5s }

주요 검색 쿼리

검색 목적
TraceQL 쿼리

서버 에러 (5xx)

{ status = error && .http.status_code >= 500 }

Order Service 느린 응답

{ .service.name = "order-service" && duration > 1s }

DB 쿼리 지연

{ .db.system = "postgresql" && duration > 500ms }

SQS 발행 지연

{ .messaging.system = "aws_sqs" && .messaging.operation = "publish" && duration > 200ms }

특정 고객 요청

{ .customer_id = "customer-001" }

에러 트레이스 (전체)

{ status = error }

Step 6.1.1: Grafana Explore에서 TraceQL 실행

Step 6.1.2: 에러 트레이스 검색

Grafana Explore에서:

  1. Datasource: Tempo 선택

  2. Query type: TraceQL 선택

  3. Query:

Step 6.1.3: 느린 요청 검색

Step 6.1.4: 복합 조건 검색


Step 6.2: 서비스 그래프 (Service Graph)

Tempo Service Graph 활성화

Service Graph는 Tempo의 메트릭 생성기(metrics-generator)를 통해 생성됩니다.

Step 6.2.1: 서비스 그래프 확인

Grafana에서:

  1. Explore > Tempo 선택

  2. Service Graph 탭 클릭

  3. 서비스 간 연결 관계 확인

서비스 그래프 해석

노드 색상
의미

녹색

정상 (에러율 < 1%)

노란색

경고 (에러율 1-5%)

빨간색

위험 (에러율 > 5%)

엣지 두께
의미

가는 선

낮은 트래픽

두꺼운 선

높은 트래픽

Step 6.2.2: 서비스 그래프 메트릭


Step 6.3: 지연 구간 식별 워크플로우

분석 단계

단계
작업
도구

1. 트레이스 선택

느린 또는 에러 트레이스 선택

TraceQL

2. Span 분석

타임라인에서 각 span 시간 확인

Tempo UI

3. 병목 분류

어떤 유형의 작업인지 분류

Span attributes

4. 근본 원인 식별

로그, 메트릭과 연계하여 원인 파악

Loki, Prometheus

Span 유형별 병목 분류

Span 종류
일반적인 병목 원인
확인 방법

HTTP Client

외부 서비스 응답 지연

.http.url, duration

Database

쿼리 최적화 필요, 인덱스 부재

.db.statement, duration

Message Queue

큐 지연, 처리 지연

.messaging.destination, duration

Internal

코드 로직, CPU 바운드

span gap 분석

Step 6.3.1: 느린 트레이스 분석

Grafana에서 트레이스 선택 후:

  1. Trace 타임라인 확인

  2. 가장 긴 span 식별

  3. Span Details 패널에서 attributes 확인

Step 6.3.2: 병목 구간 파악

예시 트레이스 분석:

분석 결과:

  • 병목: order-service (2.4s 중 전체의 96%)

  • 근본 원인: DB 쿼리 (1.8s) - customer_id 인덱스 필요


Step 6.4: Loki와 Tempo 상관관계

Logs → Traces 연동

Loki 로그에서 TraceID를 추출하여 Tempo 트레이스로 이동합니다.

Step 6.4.1: Loki Derived Fields 설정

Grafana Datasource 설정에서 이미 구성됨:

Step 6.4.2: Loki에서 에러 로그 검색

로그 라인의 TraceID 링크 클릭 → Tempo 트레이스로 이동

Traces → Logs 연동

Step 6.4.3: Tempo에서 관련 로그 조회

  1. Tempo에서 트레이스 선택

  2. Span 선택

  3. Logs for this span 클릭

  4. Loki에서 해당 시간 범위 + TraceID로 로그 검색

자동 생성되는 Loki 쿼리:


Step 6.5: Exemplar 활용

Exemplar는 메트릭 데이터 포인트에 연결된 트레이스 ID로, 집계된 메트릭에서 개별 트레이스로 드릴다운할 수 있게 합니다.

Exemplar 워크플로우

spinner

Step 6.5.1: Exemplar가 있는 메트릭 쿼리

Step 6.5.2: Grafana에서 Exemplar 확인

  1. Time series 패널에서 Exemplars 옵션 활성화

  2. 그래프 위의 다이아몬드(◇) 마커 확인

  3. 마커 위에 마우스 올리면 TraceID 표시

  4. 클릭하면 Tempo 트레이스로 이동

Step 6.5.3: Exemplar 저장 Prometheus 설정 확인


Step 6.6: 종합 대시보드 구성

대시보드 패널 구성

대시보드
목적
주요 패널

RED Overview

서비스 상태 요약

Rate, Errors, Duration

SLI/SLO

서비스 수준 목표

Availability, Latency SLOs

Infrastructure

인프라 상태

Node/Pod CPU, Memory

Traces

트레이스 분석

Service Graph, Recent Traces

Step 6.6.1: RED Overview Dashboard

Step 6.6.2: SLI/SLO Dashboard

Step 6.6.3: Dashboard Import


Step 6.7: 정리 (Cleanup)

전체 실습 리소스를 정리합니다.

정리 순서

순서
대상
명령어

1

MSA 애플리케이션

ArgoCD에서 삭제

2

Observability 스택

Helm uninstall

3

KEDA, Karpenter

Helm uninstall

4

AWS Managed Services

Terraform destroy

5

EKS 클러스터

eksctl delete

Step 6.7.1: MSA 애플리케이션 삭제

Step 6.7.2: Observability 스택 삭제

Step 6.7.3: Service Cluster 컴포넌트 삭제

Step 6.7.4: AWS Managed Services 삭제

Step 6.7.5: EKS 클러스터 삭제

Step 6.7.6: IAM 리소스 정리

정리 확인


검증 (Verification)

Full Drill-down 테스트

메트릭 → Exemplar → 트레이스 → 로그 전체 흐름 확인:

검증 체크리스트

항목
확인 방법
예상 결과

TraceQL 검색

{ status = error }

에러 트레이스 목록

Service Graph

Tempo > Service Graph

서비스 연결 그래프

Logs → Traces

Loki에서 TraceID 클릭

Tempo 트레이스 표시

Traces → Logs

Tempo에서 Logs 버튼

Loki 로그 표시

Exemplar

메트릭 그래프 ◇ 클릭

Tempo 트레이스 표시

리소스 정리

AWS Console 확인

모든 리소스 삭제 완료


실습 완료

축하합니다! Observability End-to-End 실습 시리즈를 모두 완료했습니다.

학습 내용 요약

Part
주제
핵심 기술

1

인프라 구성

EKS, Terraform, eksctl

2

Observability 스택

OTel, Prometheus, Loki, Tempo

3

MSA 배포

ArgoCD, Argo Rollouts, KEDA

4

부하 테스트

k6, Karpenter, 스케일링

5

알림 및 AIOps

AlertManager, Bedrock, Lambda

6

분산 추적

TraceQL, Exemplar, Correlation

다음 단계 권장

  1. 프로덕션 적용: 학습한 내용을 실제 프로덕션 환경에 적용

  2. 커스텀 대시보드: 조직의 SLO에 맞는 대시보드 구성

  3. 알림 튜닝: 노이즈 감소를 위한 알림 임계값 조정

  4. AIOps 확장: 멀티 에이전트 패턴으로 AIOps 고도화


참조 문서


시리즈 목차

마지막 업데이트