X-Ray 개념과 아키텍처

AWS 모니터링 및 문제 해결

John Q. Martin

Principal Consultant

분산 시스템의 과제

 

모놀리식 애플리케이션

  • 단일 프로세스 내 선형적인 흐름
  • 디버깅이 간단함

 

분산 애플리케이션

  • 하나의 요청이 여러 서비스, DB, 외부 API를 거침
  • 장애가 발생하면 어떤 서비스가 원인일까요?

여러 색실이 서로 얽혀 엉망으로 뒤엉킨 모습으로, 분산 시스템에서 하나의 요청을 추적하기가 얼마나 어려운지 보여줍니다

AWS 모니터링 및 문제 해결

AWS X-Ray란?

 

X-Ray는 다음을 수행하는 분산 추적 서비스입니다:

  • 서비스 전반에서 요청을 처음부터 끝까지 추적
  • 각 단계의 지연 시간을 측정하고 오류를 감지
  • 애플리케이션 아키텍처를 서비스 맵으로 시각화

 

요청 경로 예시:

  분산 추적에서 여러 서비스를 거쳐 흐르는 요청 경로를 보여주는 다이어그램

AWS 모니터링 및 문제 해결

다섯 가지 핵심 기능

 

X-Ray의 다섯 가지 핵심 기능: 요청 추적, 성능 분석, 오류 감지, 서비스 맵, 인사이트

AWS 모니터링 및 문제 해결

추적 작동 방식

 

분산 추적 흐름: 요청이 서비스 A에 들어오고, 서비스 A가 서비스 B와 서비스 C를 차례로 호출하며 각 서비스는 HTTP 헤더에 Trace ID를 전달합니다. 모든 서비스는 동일한 Trace ID가 담긴 세그먼트를 X-Ray 데몬으로 보내고, 데몬은 이를 X-Ray로 전달해 하나의 완전한 트레이스로 조합합니다

AWS 모니터링 및 문제 해결

Trace ID와 헤더 전파

 

Trace ID 형식:

버전 번호, 16진수 Unix 타임스탬프, 고유 식별자로 구성된 X-Ray Trace ID 형식

 

HTTP 헤더:

X-Amzn-Trace-Id:
  Root=1-5e8c1234-...;
  Parent=abc123;
  Sampled=1
  • Root: Trace ID, 모든 서비스에서 동일
  • Parent: 상위 세그먼트 ID
  • Sampled: 0 또는 1, 추적 여부
AWS 모니터링 및 문제 해결

X-Ray 데몬

 

하는 일:

  • UDP 포트 2000에서 수신 대기
  • 애플리케이션에서 세그먼트 데이터 수신
  • 버퍼링 및 배치 처리 후 X-Ray API로 전달
  • 애플리케이션과 X-Ray 서비스를 분리

 

환경별 배포 방식:

환경별 X-Ray 데몬 배포 방식: Lambda는 자동, EC2는 서비스로, ECS는 사이드카로 배포

AWS 모니터링 및 문제 해결

샘플링

 

기본 규칙:

  • 초당 첫 번째 요청 - 항상 추적
  • 추가 요청의 5% - 샘플링

사용자 지정 규칙 필드:

  • fixed_target - 항상 추적할 초당 요청 수
  • rate - 추가 요청의 샘플링 비율
  • priority - 숫자가 낮을수록 우선 적용

 

전략 예시:

Rule 1 (priority 1):
  5xx errors -> 100% sampling

Rule 2 (priority 10):
  Normal traffic -> 5% sampling
AWS 모니터링 및 문제 해결

세그먼트

 

세그먼트가 기록하는 정보:

  • 서비스 이름
  • 시작 및 종료 시간
  • Trace ID
  • HTTP 요청 및 응답 세부 정보
  • AWS 계정 및 리전

 

세그먼트 상태:

X-Ray의 다섯 가지 세그먼트 상태: 진행 중, 정상, 오류, 결함, 스로틀

AWS 모니터링 및 문제 해결

서브세그먼트

 

타임라인 비교: 서브세그먼트가 없을 때는 총 800ms의 단일 막대로 표시되지만, 서브세그먼트가 있으면 동일한 800ms가 DynamoDB 50ms, 병목 구간으로 강조된 PaymentService 400ms, InventoryService 300ms로 세분화됩니다

서브세그먼트의 역할:

  • 세그먼트 내부의 세부적인 시간 측정 제공
  • 다운스트림 호출 추적
  • 총 800ms를 다음과 같이 세분화:
    • DynamoDB.PutItem: 50ms
    • PaymentService 호출: 400ms
    • InventoryService 호출: 300ms

 

네임스페이스:

세 가지 서브세그먼트 네임스페이스: AWS 호출용 aws, 외부 HTTP용 remote, 사용자 지정 코드용 local

AWS 모니터링 및 문제 해결

애노테이션

 

핵심 사항:

  • 색인화된 키-값 쌍 - 검색 및 필터링 가능
  • 제한: 트레이스당 50개까지 색인화
  • 유형: 문자열, 숫자, 불리언

사용 예시:

  • user_id, order_id, environment
  • version, feature flags, error codes

 

필터 구문:

annotation.user_id = "user-123"
annotation.environment = "production"
AND annotation.version = "1.2.3"
AWS 모니터링 및 문제 해결

메타데이터

 

핵심 사항:

  • 색인화되지 않음 - 검색 및 필터링 불가
  • 크기 제한 없음
  • 모든 JSON 구조 지원

사용 예시:

  • 전체 요청 및 응답 본문
  • 오류 메시지 및 스택 트레이스
  • 비즈니스 컨텍스트(주문 항목, 주소)

 

애노테이션과 메타데이터 비교:

색인화되어 검색 가능한 애노테이션과 상세하지만 색인화되지 않은 메타데이터를 비교한 표

AWS 모니터링 및 문제 해결

전체 트레이스 구조

 

네 개의 세그먼트로 구성된 전체 트레이스 구조와 가장 느린 작업인 외부 결제 API

AWS 모니터링 및 문제 해결

학습 요약

 

  • X-Ray - 서비스 전반의 전체 가시성을 제공하는 분산 추적 서비스
  • 추적 메커니즘 - HTTP 헤더를 통한 Trace ID 전파, 데몬이 수집하는 세그먼트, 구성 가능한 샘플링 규칙
  • 트레이스 구성 요소:
    • 세그먼트 - 서비스 단위의 작업 기록
    • 서브세그먼트 - 세부적인 다운스트림 작업 타이밍
    • 애노테이션 - 필터링 및 검색을 위한 색인화된 키-값 쌍
    • 메타데이터 - 색인화되지 않은 상세 컨텍스트
AWS 모니터링 및 문제 해결

연습해 봅시다!

AWS 모니터링 및 문제 해결

Preparing Video For Download...