본문으로 건너뛰기

X-Ray

1 AWS X-Ray

  • AWS X-Ray는 분산 애플리케이션의 문제를 분석하고 성능을 모니터링하는 데 도움을 주는 서비스입니다.
  • 마이크로서비스 아키텍처 및 서버리스 애플리케이션의 디버깅과 성능 튜닝을 위해 설계되었습니다.
  • X-Ray는 트랜잭션을 추적하여 애플리케이션이 어디에서 시간을 소비하는지, 병목 현상이 발생하는지, 오류가 발생하는 위치를 시각화합니다.

2 주요 기능

  • 트랜잭션 추적: 애플리케이션의 각 요청이 어떻게 처리되는지 시각적으로 보여줍니다.
  • 서비스 맵: 애플리케이션의 아키텍처를 한눈에 파악할 수 있는 서비스 맵을 제공합니다.
  • 성능 모니터링: 각 서비스의 성능 지표를 수집하여 분석할 수 있습니다.
  • 에러 및 예외 추적: 에러와 예외를 자동으로 감지하여 문제 해결에 도움을 줍니다.
  • 비용 효율성: 필요한 리소스만 사용하여 비용을 절감할 수 있습니다.

3 X-Ray의 구성 요소

3.1 트레이스(Trace)

  • 트레이스는 애플리케이션 내의 요청이 처리되는 전체 과정을 나타냅니다.
  • 각 트레이스는 여러 세그먼트로 구성됩니다.
  • 세그먼트는 요청이 애플리케이션의 특정 구성 요소에서 어떻게 처리되는지를 나타냅니다.

3.2 세그먼트(Segment)

  • 세그먼트는 트레이스의 구성 요소로, 특정 서비스 또는 리소스의 작업을 나타냅니다.
  • 세그먼트는 서비스가 작업을 수행하는 시간, 오류, 예외 등을 기록합니다.

3.3 서브세그먼트(Subsegment)

  • 서브세그먼트는 세그먼트의 하위 구성 요소로, 더 작은 작업 단위를 나타냅니다.
  • 세부적인 트랜잭션 분석을 위해 사용됩니다.

3.4 애노테이션(Annotation)

  • 세그먼트나 서브세그먼트에 추가할 수 있는 키-값 쌍입니다.
  • 인덱싱되어 필터링과 검색에 사용될 수 있습니다.
    • 필터 표현식에서 사용할 수 있습니다.

3.5 메타데이터(Metadata)

  • 세그먼트나 서브세그먼트에 추가할 수 있는 추가 정보입니다.
  • 추가적인 정보를 저장하지만, 검색이나 필터링에는 사용되지 않습니다.
    • 애노테이션과 달리 인덱싱되지 않습니다.
  • 메타데이터는 트레이스 또는 세그먼트에 추가되는 정보로, 분석 및 디버깅에 사용됩니다.

4 X-Ray의 활용 사례

  • 마이크로서비스 디버깅: 마이크로서비스 아키텍처에서 서비스 간의 호출을 추적하여 문제를 진단합니다.
  • 서버리스 애플리케이션 모니터링: Lambda 함수의 성능을 모니터링하고 최적화합니다.
  • 성능 최적화: 응답 시간이 긴 부분을 찾아 최적화합니다.
  • 에러 분석: 에러가 발생한 위치와 원인을 빠르게 파악하여 해결합니다.

5 X-Ray SDK와 데몬

5.1 X-Ray SDK 정의

  • X-Ray SDK는 애플리케이션 코드에 통합되어 트레이스 데이터를 생성하고 전송하는 라이브러리입니다.
  • 다양한 프로그래밍 언어(Java, Python, Go, Node.js, .NET 등)를 지원합니다.
  • SDK는 애플리케이션의 다양한 작업을 자동으로 추적합니다:
    • AWS 서비스 호출
    • HTTP/HTTPS 요청
    • 데이터베이스 쿼리 (MySQL, PostgreSQL, DynamoDB)
    • 메시지 큐 작업 (SQS)

5.2 X-Ray 데몬 정의

  • X-Ray 데몬은 로우 레벨 UDP 패킷 인터셉터로 동작하는 백그라운드 프로세스입니다.
  • EC2 인스턴스나 온프레미스 서버에서 실행됩니다.
  • 데몬은 SDK로부터 트레이스 데이터를 수집하고 이를 AWS X-Ray 서비스로 전송합니다.
  • Linux, Windows, macOS 등 다양한 운영 체제에서 실행 가능합니다.

5.3 SDK와 데몬의 관계

  • 데이터 흐름:
    1. 애플리케이션 코드 (X-Ray SDK 포함) → 트레이스 데이터 생성
    2. SDK → UDP를 통해 로컬 X-Ray 데몬으로 데이터 전송
    3. X-Ray 데몬 → AWS X-Ray 서비스로 데이터를 배치로 전송 (매 1초마다)
  • 역할 분담:
    • SDK: 트레이스 데이터 생성 및 로컬 전송 담당
    • 데몬: 데이터 수집, 버퍼링, AWS 서비스로의 안정적인 전송 담당
  • 장점:
    • 효율성: 데몬이 데이터를 버퍼링하고 배치로 전송하여 네트워크 사용을 최적화
    • 신뢰성: 데몬이 네트워크 문제 시 재시도 로직을 처리
    • 보안: SDK는 로컬 데몬과만 통신하므로 애플리케이션의 보안 노출 최소화

6 X-Ray 시작하기

6.1 코드에 SDK 통합

  • AWS X-Ray SDK를 코드에 통합합니다.
  • Java, Python, Go, Node.js, .NET 등 다양한 언어를 지원합니다.
  • 코드 수정은 최소화되며, SDK는 자동으로 다음을 캡처합니다:
    • AWS 서비스 호출
    • HTTP/HTTPS 요청
    • 데이터베이스 호출 (MySQL, PostgreSQL, DynamoDB)
    • 큐 호출 (SQS)

예제 코드 (Java)

public class SampleApp {
public static void main(String[] args) {
// AWS X-Ray SDK 통합
AWSXRay.beginSegment("SampleSegment");

// 애플리케이션 코드
System.out.println("Hello, X-Ray!");

AWSXRay.endSegment();
}
}

6.2 X-Ray 데몬 설치 또는 AWS 통합 활성화

  • X-Ray 데몬은 로우 레벨 UDP 패킷 인터셉터로 작동합니다.
  • Linux, Windows, Mac 등 다양한 운영 체제에서 실행 가능합니다.
  • AWS Lambda 및 기타 AWS 서비스는 이미 X-Ray 데몬을 실행 중입니다.

X-Ray 데몬 설치 명령 예시 (Linux)

sudo yum install -y aws-xray-daemon
sudo systemctl start xray

6.3 IAM 권한 부여

  • 각 애플리케이션은 X-Ray에 데이터를 쓸 수 있는 IAM 권한이 필요합니다.
  • IAM 정책을 통해 애플리케이션에 적절한 권한을 부여합니다.

IAM 정책 예시

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"xray:PutTraceSegments",
"xray:PutTelemetryRecords"
],
"Resource": "*"
}
]
}

6.4 트레이스 보기

  • X-Ray 콘솔에서 트레이스를 시각화하고 분석합니다.
  • X-Ray 콘솔을 통해 애플리케이션의 성능 병목 현상과 오류를 쉽게 식별할 수 있습니다.

7 X-Ray의 장점

  • 자동화된 트레이싱: 애플리케이션 코드의 최소한의 변경으로 트레이싱을 자동화할 수 있습니다.
  • 종단 간 가시성: 애플리케이션의 전체 아키텍처와 트랜잭션을 한눈에 볼 수 있습니다.
  • 효율적인 디버깅: 문제를 빠르게 발견하고 해결할 수 있습니다.
  • 비용 효율성: 필요한 리소스만 사용하여 비용을 절감할 수 있습니다.

관련 자료: