AWS X-Ray와 구조화된 로깅을 활용한 분산 추적

AWS에서 애플리케이션 배포하기

Dunieski Otano

Amazon Web Services Solutions Architect

아무도 찾지 못한 느린 요청

  • 요청 하나가 4초나 걸립니다
  • 각 서비스의 로그만 보면 문제없어 보입니다
  • 전체 경로를 아무도 볼 수 없습니다

분산 서비스 맵에서 빨간색 병목 노드와 함께 느린 요청 하나를 추적하는 돋보기

AWS에서 애플리케이션 배포하기

분산 추적이 해결하는 문제

왼쪽에는 빨간색으로 표시된 개별 서비스 로그 사일로, 오른쪽에는 API Gateway, Lambda, DynamoDB, 외부 API를 아우르는 동일 요청을 녹색으로 이어붙인 통합 X-Ray 간트 추적 타임라인

  • 요청 하나가 여러 서비스를 거칩니다
  • 로그만으로는 전체 경로를 알 수 없습니다
  • 트레이스가 요청 전체를 하나로 엮어줍니다
  • 시간이 어디서 소요됐는지 정확히 확인할 수 있습니다
AWS에서 애플리케이션 배포하기

세그먼트, 서브세그먼트, 서비스 맵

  • 세그먼트: 하나의 서비스가 수행한 작업
  • 서브세그먼트: DB 호출처럼 세그먼트 내부의 작업 단위
  • 서비스 맵: 모든 세그먼트를 시각화한 그래프
  • 각 노드에 지연 시간과 오류가 표시됩니다

X-Ray 트레이스 구조: 서비스별 세그먼트와 DB 호출용 서브세그먼트로 구성되며, 각 노드에 지연 시간과 오류율을 표시하는 서비스 맵 그래프로 조합됩니다

AWS에서 애플리케이션 배포하기

어노테이션과 메타데이터


어노테이션

  • 인덱싱된 키-값이라 필터링이 가능합니다
  • 고객 등급처럼 검색할 항목에 사용하세요

메타데이터

  • 추가 세부 정보이며 인덱싱되지 않습니다
  • 맥락 정보로 첨부하지만 검색에는 사용할 수 없습니다
AWS에서 애플리케이션 배포하기

트레이스 ID로 로그 연결하기

  • 모든 트레이스에는 고유한 트레이스 ID가 있습니다
  • 구조화된 로그에 트레이스 ID를 포함하세요
  • 느린 트레이스에서 정확한 로그 라인으로 바로 이동할 수 있습니다
  • 로그와 트레이스가 하나의 조사 과정이 됩니다

xray_trace_id 필드가 강조 표시된 구조화 로그 라인과, X-Ray 트레이스 뷰에서 CloudWatch Logs의 일치하는 로그 라인으로 향하는 화살표로 표현한 연계 조사

AWS에서 애플리케이션 배포하기

서비스 맵으로 병목 지점 찾기

지연 시간이 높은 노드가 강조 표시된 X-Ray 서비스 맵과, 병목으로 확인된 가장 긴 세그먼트 막대를 보여주는 트레이스 타임라인 드릴다운

  • 로그가 아니라 서비스 맵에서 시작하세요
  • 지연 시간이 가장 높은 노드를 찾으세요
  • 해당 노드의 트레이스 타임라인을 살펴보세요
  • 가장 긴 세그먼트가 유력한 원인입니다
AWS에서 애플리케이션 배포하기

요청 전체에 걸친 트레이싱

  • API Gateway, Lambda, 다운스트림 호출 모두 트레이싱됩니다
  • 각 구성 요소가 동일한 트레이스에 자신의 세그먼트를 추가합니다
  • 트레이스 ID 하나로 로그와 세그먼트가 연결됩니다
  • 모든 요청에 대한 종단 간 가시성을 확보합니다

API Gateway에서 Lambda, DynamoDB, 외부 API까지 이어지는 종단 간 분산 트레이스로, 각 세그먼트 헤더에 표시된 동일한 트레이스 ID가 모든 로그와 세그먼트를 연결합니다

AWS에서 애플리케이션 배포하기

연습해 봅시다!

AWS에서 애플리케이션 배포하기

Preparing Video For Download...