Docker Compose Jaeger Distributed Tracing 구성 완벽 가이드! Microservice 요청 흐름 추적 방법 알아보기

Microservice 환경에서는 하나의 요청이 여러 Service를 거쳐 처리됩니다.

예:

사용자 요청

↓

API Gateway

↓

User Service

↓

Order Service

↓

Payment Service

↓

Database

문제는 장애가 발생했을 때 어느 구간에서 문제가 발생했는지 찾기 어렵다는 것입니다.

예:

응답 속도 느림

↓

어느 Service 문제?

↓

Database?

↓

API?

↓

Network?

이때 필요한 기술이 Distributed Tracing입니다.

Distributed Tracing 구조:

Request

↓

Trace ID 생성

↓

Service 이동 기록

↓

전체 흐름 분석

Jaeger는 Microservice 환경에서 요청 흐름을 추적하는 대표적인 Distributed Tracing 시스템입니다.

이번 글에서는 Docker Compose 환경에서 Jaeger 구성부터 Trace 개념, OpenTelemetry 연동, Microservice 장애 분석, Production Tracing 운영 방법까지 알아보겠습니다.

Distributed Tracing이란?

Distributed Tracing은 하나의 요청이 여러 서비스를 이동하는 과정을 추적하는 기술입니다.

일반 Monitoring:

서비스 느림

Tracing:

어디에서 느려졌는지 확인

예:

Request

↓

API Gateway 20ms

↓

Order Service 50ms

↓

Payment Service 5000ms

문제 위치를 정확히 확인할 수 있습니다.

Jaeger란 무엇인가?

Jaeger는 Uber에서 개발한 Open Source Distributed Tracing 시스템입니다.

기능:

  • Request 추적
  • Service 의존성 분석
  • Latency 확인
  • 장애 원인 분석

구조:

Application

↓

Jaeger Agent

↓

Collector

↓

Storage

↓

Jaeger UI

Metrics Logging Tracing 비교

Observability 3요소:

Metrics:

얼마나 문제가 발생하는가?

Logging:

무슨 오류가 발생했는가?

Tracing:

어디에서 문제가 발생했는가?

세 가지를 함께 사용하면 정확한 장애 분석이 가능합니다.

Docker Compose Jaeger 구성

docker-compose.yml:

services:

  jaeger:

    image: jaegertracing/all-in-one

    container_name: jaeger

    ports:

      - "16686:16686"

      - "6831:6831/udp"

실행:

docker compose up -d

접속:

http://server-ip:16686

Jaeger UI 화면에서 Trace 데이터를 확인할 수 있습니다.

Jaeger 구성 요소

Agent

Application에서 Trace 데이터를 전달합니다.

Collector

Trace 데이터를 수집합니다.

Storage

Trace 저장소

UI

분석 화면 제공

구조:

Application

↓

Agent

↓

Collector

↓

UI

Docker Compose Application Tracing 연결

Application은 Trace 정보를 생성해야 합니다.

구조:

Application

↓

OpenTelemetry SDK

↓

Jaeger

수집 정보:

  • Request ID
  • Service Name
  • Response Time
  • Error

Trace와 Span 개념

Tracing에서 중요한 개념:

Trace:

하나의 전체 요청

예:

주문 생성 요청 전체

Span:

각 Service 작업 단위

예:

User Service Span

Order Service Span

Payment Service Span

구조:

Trace

├── API Span

├── Order Span

└── Payment Span

Docker Compose Microservice Trace 분석

상황:

주문 API 느림

Jaeger 확인:

API Gateway 10ms

↓

Order Service 30ms

↓

Payment Service 8000ms

결과:

Payment Service 문제 확인

Docker Compose OpenTelemetry 연동

최근에는 OpenTelemetry 사용이 증가하고 있습니다.

구조:

Application

↓

OpenTelemetry

↓

Jaeger

장점:

  • Vendor 독립적
  • Metrics 지원
  • Logging 연동 가능

Docker Compose Tracing과 API Gateway

API Gateway부터 Trace를 시작하면 전체 흐름을 확인할 수 있습니다.

구조:

Client

↓

API Gateway

↓

Microservice

↓

Database

확인:

  • 요청 시간
  • Service 호출 순서
  • 오류 위치

Docker Compose Database Tracing

Database Query도 추적할 수 있습니다.

예:

Payment Service

↓

Database Query

↓

5000ms

확인:

  • 느린 Query
  • Connection 문제
  • Database 병목

Docker Compose Jaeger와 Grafana 연동

Observability 통합 구조:

Prometheus

↓

Metrics


Loki

↓

Logs


Jaeger

↓

Tracing


↓

Grafana

하나의 화면에서 시스템 상태를 분석할 수 있습니다.

Docker Compose Production Tracing 구조

실제 운영:

User

↓

Load Balancer

↓

API Gateway

↓

Microservice

↓

OpenTelemetry

↓

Jaeger

↓

Tracing Analysis

Docker Compose Tracing 보안

운영 환경 권장:

Trace 정보 보호

포함 금지:

  • Password
  • Token
  • 개인정보

Network 제한

Jaeger

↓

Private Network

Access 관리

Jaeger UI 보호

Docker Compose Distributed Tracing 장점

장점:

빠른 장애 분석

문제 Service 확인 가능

성능 최적화

느린 구간 발견

Microservice 관리

Service 관계 확인

배포 안정성

Version 비교 가능

Docker Compose Jaeger 운영 Best Practice

추천:

  • OpenTelemetry 사용
  • Trace ID 관리
  • Service Name 표준화
  • Sampling 설정
  • 민감 데이터 제거
  • Monitoring 연동

운영 흐름:

Request 발생

↓

Trace 생성

↓

Service 이동 기록

↓

문제 분석

↓

최적화

자주 묻는 질문

Jaeger는 Log 시스템인가요?

아닙니다.

Jaeger는 요청 흐름 추적을 위한 Tracing 시스템입니다.

Prometheus와 Jaeger 차이는 무엇인가요?

Prometheus는 Metrics, Jaeger는 Request 흐름 분석입니다.

작은 서비스에도 Tracing이 필요한가요?

Microservice 구조가 아니라면 우선순위는 낮을 수 있습니다.

Docker Compose에서도 Jaeger 사용 가능한가요?

가능합니다.

Jaeger를 Container로 실행할 수 있습니다.

마무리

Docker Compose Jaeger Distributed Tracing 구성은 Microservice 환경에서 장애 위치를 빠르게 찾기 위한 핵심 기술입니다.

최종 구조:

User Request

↓

API Gateway

↓

Service

↓

Trace

↓

Jaeger

↓

장애 분석

Metrics는 상태를 보고, Logs는 기록을 확인하고, Tracing은 요청 흐름을 보여줍니다.

세 가지를 통합하면 안정적인 Cloud Native 운영 환경을 구축할 수 있습니다.

다음 글에서는 대규모 서버 환경에서 사용하는 대표적인 로그 분석 시스템인 Docker Compose ELK Stack 구축 방법을 알아보겠습니다.

댓글 남기기