AWS X-Ray 개념 - AWS X-Ray

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS X-Ray 개념

AWS X-Ray 서비스에서 데이터를 세그먼트로 수신합니다. X-Ray는 공통 요청이 있는 세그먼트를 트레이스로 그룹화합니다. X-Ray는 트레이스를 처리하여 애플리케이션을 시각적으로 표현하는 서비스 그래프를 생성합니다.

세그먼트

애플리케이션 로직을 실행하는 컴퓨팅 리소스는 작업에 대한 데이터를 세그먼트의 형식으로 전송합니다. 세그먼트는 리소스의 이름, 요청의 세부 정보, 완료된 작업의 세부 정보를 제공합니다. 예를 들어 HTTP 요청이 애플리케이션에 도달하면 세그먼트가 다음 데이터를 기록할 수 있습니다.

  • 호스트 – 호스트 이름, 별칭 또는 IP 주소

  • 요청 – 메서드, 클라이언트 주소, 경로, 사용자 에이전트

  • 응답 – 상태, 콘텐츠

  • 완료된 작업 – 시작 및 종료 시간, 하위 세그먼트

  • 발생하는 문제 – 예외 스택의 자동 캡처를 포함한 오류, 결함 및 예외

X-Ray 트레이스를 위한 세그먼트 데이터

X-Ray SDK는 요청 및 응답 헤더, 애플리케이션의 코드, 실행 AWS 리소스에 대한 메타데이터에서 정보를 수집합니다. 들어오는 요청, 다운스트림 요청 및 SDK 클라이언트를 계측하도록 애플리케이션 구성 또는 코드를 수정하여 수집할 데이터를 선택합니다. AWS

전달된 요청

로드 밸런서 또는 기타 중개자가 애플리케이션으로 요청을 전달하는 경우, X-Ray는 IP 패킷 내 소스 IP가 아니라 요청의 X-Forwarded-For 헤더로부터 클라이언트 IP를 가져옵니다. 전달된 요청에 대해 기록된 클라어언트 IP는 위조될 수 있으므로 신뢰하면 안 됩니다.

X-Ray SDK를 사용하여 주석 및 메타데이터와 같은 추가 정보를 레코딩할 수 있습니다. 세그먼트 및 하위 세그먼트에 기록되는 정보 및 구조에 대한 자세한 내용은 AWS X-Ray 세그먼트 문서 단원을 참조하십시오. 세그먼트 문서의 크기는 최대 64kB까지 가능합니다.

하위 세그먼트

세그먼트는 완료된 작업에 대한 데이터를 하위 세그먼트로 구분할 수 있습니다. 하위 세그먼트는 애플리케이션이 원래 요청을 이행하기 위해 생성한 다운스트림 호출에 대해 보다 세분화된 타이밍 정보 및 세부 정보를 제공합니다. 하위 세그먼트에는 외부 HTTP API 또는 SQL 데이터베이스 호출에 대한 추가 세부 정보가 포함될 수 있습니다. AWS 서비스또한 임의의 하위 세그먼트를 정의하여 애플리케이션의 특정 기능 또는 코드 행을 구성할 수도 있습니다.

하위 세그먼트는 보다 세분화된 정보를 제공

Amazon DynamoDB와 같이 자체 세그먼트를 전송하지 않는 서비스의 경우, X-Ray는 하위 세그먼트를 사용하여 추적 맵에 추론된 세그먼트와 다운스트림 노드를 생성합니다. 이를 통해 다운스트림 종속성이 트레이스를 지원하지 않거나 외부 종속성인 경우에도 해당 종속성을 모두 볼 수 있습니다.

하위 세그먼트는 다운스트림 호출의 애플리케이션 보기를 클라이언트로 표현합니다. 다운스트림 서비스도 구성된 경우 해당 서비스가 보내는 세그먼트는 업스트림 클라이언트의 하위 세그먼트에서 생성되어 추론된 세그먼트를 대체합니다. 서비스 그래프의 노드는 항상 서비스 세그먼트의 정보(사용 가능한 경우)를 사용하며 두 노드 간 엣지는 업스트림 서비스의 하위 세그먼트를 사용합니다.

예를 들어 AWS 계측 SDK 클라이언트를 사용하여 DynamoDB를 호출하면 X-Ray SDK는 해당 호출에 대한 하위 세그먼트를 기록합니다. DynamoDB는 세그먼트를 전송하지 않으므로 트레이스에서 추론된 세그먼트, 서비스 그래프의 DynamoDB 노드, 서비스와 DynamoDB 사이의 엣지에는 모두 하위 세그먼트의 정보가 포함되어 있습니다.

구성된 애플리케이션과 DynamoDB 간 엣지

구성된 애플리케이션으로 다른 구성된 서비스를 호출하면 다운스트림 서비스가 해당 세그먼트를 보내 업스트림 서비스가 하위 세그먼트에서 레코딩한 동일한 호출의 해당 보기를 레코딩합니다. 서비스 그래프에서 두 서비스 노드는 해당 서비스 세그먼트의 시간 및 오류 정보를 포함하는 반면 이 둘 간의 엣지는 업스트림 서비스 하위 세그먼트의 정보를 포함합니다.

다른 구성된 애플리케이션을 호출하는 구성된 애플리케이션

다운스트림 서비스는 요청에 대한 작업을 시작하고 종료했을 때 정확하게 레코딩하고 업스트림 서비스는 요청이 두 서비스 간을 이동할 때 사용한 시간을 포함한 왕복 지연 시간을 레코딩하므로 두 관점 모두 유용합니다.

서비스 그래프

X-Ray는 애플리케이션이 전송하는 데이터를 사용하여 서비스 그래프를 생성합니다. X-Ray로 데이터를 보내는 각 AWS 리소스는 그래프에 서비스로 표시됩니다. 엣지는 요청을 처리하기 위해 연동하는 서비스를 연결합니다. 엣지는 클라이언트를 애플리케이션에 연결하고, 애플리케이션을 애플리케이션이 사용하는 다운스트림 서비스 및 리소스에 연결합니다.

서비스 이름

세그먼트의 name은 해당 세그먼트를 생성한 서비스의 도메인 이름 또는 논리적 이름과 일치해야 합니다. 하지만 이것이 적용되지는 않습니다. PutTraceSegments 허가를 받은 애플리케이션은 어떠한 이름을 사용하여도 세그먼트를 전송할 수 있습니다.

서비스 그래프는 애플리케이션을 구성하는 서비스 및 리소스에 대한 정보를 담고 있는 JSON 문서입니다. X-Ray 콘솔은 서비스 그래프를 사용하여 시각화 또는 서비스 맵을 생성합니다.

트레이스 맵

분산된 애플리케이션의 경우, X-Ray가 동일한 트레이스 ID의 요청을 처리하는 모든 서비스의 노드를 하나의 서비스 그래프로 결합합니다. 요청이 도달하는 첫 번째 서비스가 프런트 엔드와 프런트 엔드가 호출하는 서비스 간에 전파되는 트레이스 헤더를 추가합니다.

예를 들어, Scorekeep이 마이크로서비스( AWS Lambda 함수)를 호출하는 웹 API를 실행합니다. 이 마이크로 서비스는 Node.js 라이브러리를 사용하여 임의의 이름을 생성합니다. Java용 X-Ray SDK는 트레이스 ID를 생성하고 이를 Lambda 호출에 포함합니다. Lambda는 트레이스 데이터를 전송하고 트레이스 ID를 함수에 전달합니다. Node.js용 X-Ray SDK도 트레이스 ID를 사용하여 데이터를 전송합니다. 따라서 API, Lambda 서비스 및 Lambda 함수의 노드는 모두 트레이스 맵에서 별개이지만 연결된 노드로 나타납니다.

서비스 그래프 데이터는 30일 동안 보관됩니다.

트레이스

트레이스 ID는 애플리케이션을 경유하는 요청의 경로를 트레이스합니다. 트레이스는 단일 요청에 의해 생성된 모든 세그먼트를 수집합니다. 이러한 요청은 일반적으로 로드 밸런서를 통과하고, 애플리케이션 코드에 도달하고, 다른 AWS 서비스 또는 외부 웹 API에 대한 다운스트림 호출을 생성하는 HTTP GET 또는 POST 요청입니다. HTTP 요청이 상호 작용하는 첫 번째 지원되는 서비스는 트레이스 ID 헤더를 요청에 추가하고 다운스트림으로 전파하여 지연 시간, 배치 및 기타 요청 데이터를 트레이스합니다.

단일 요청에 의해 생성되는 모든 세그먼트를 수집하는 트레이스의 타임라인 보기

X-Ray Trace의 청구 방식에 대한 자세한 내용은 AWS X-Ray 요금을 참조하십시오. 트레이스 데이터는 30일 동안 보관됩니다.

샘플링

효율적인 트레이스를 보장하고 애플리케이션에서 처리하는 요청의 대표적 샘플을 제공하기 위해 X-Ray SDK는 샘플링 알고리즘을 적용하여 트레이스되는 요청을 결정합니다. 기본적으로 X-Ray SDK는 매초 첫 번째 요청과 추가 요청의 5%를 기록합니다.

시작할 때 서비스 요금이 발생하지 않도록 하려는 경우 기본 샘플링 비율은 보수적입니다. 기본 샘플링 규칙을 수정하고 서비스 또는 요청의 속성에 따라 샘플링을 적용하는 추가 규칙을 구성하도록 X-Ray를 구성할 수 있습니다.

예를 들어, 샘플링을 비활성화하고 상태를 수정하거나 사용자 또는 트랜잭션을 처리하는 호출에 대한 모든 요청을 트레이스하고자 할 수 있습니다. 백그라운드 폴링, 상태 확인 또는 연결 유지 관리와 같은 대량 읽기 전용 호출 시 낮은 비율로 샘플링하면서도 발생하는 모든 문제를 확인할 수 있을 만큼 충분한 데이터를 확보할 수 있습니다.

자세한 설명은 샘플링 규칙 구성 섹션을 참조하세요.

추적 헤더

모든 요청은 구성 가능한 최소 개수까지 트레이스됩니다. 해당 최소 개수에 도달하면 불필요한 비용을 방지하기 위해 요청의 특정 비율이 트레이스됩니다. 샘플링 결정 및 트레이스 ID가 X-Amzn-Trace-Id라는 이름의 트레이스 헤더에서 HTTP 요청에 추가됩니다. 요청이 도달하는 첫 번째 X-Ray 통합 서비스가 트레이스 헤더를 추가합니다. 이 트레이스 헤더는 X-Ray SDK에 의해 판독되며 응답에 포함됩니다.

예 루트 트레이스 ID 및 샘플링 결정이 포함된 트레이스 헤더
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Sampled=1
트레이스 헤더 보안

추적 헤더는 X-Ray SDK AWS 서비스, 또는 클라이언트 요청에서 생성될 수 있습니다. 애플리케이션은 수신 요청에서 X-Amzn-Trace-Id를 제거하여 사용자가 트레이스 ID 또는 샘플링 결정을 요청에 추가하여 발생하는 문제를 방지할 수 있습니다.

또한 요청이 구성된 애플리케이션에서 생성된 경우 트레이스 헤더에 상위 세그먼트 ID가 포함될 수 있습니다. 예를 들어 애플리케이션이 구성된 HTTP 클라이언트를 사용하여 다운스트림 HTTP 웹 API를 호출하는 경우 X-Ray SDK가 원래 요청에 대한 세그먼트 ID를 다운스트림 요청의 트레이스 헤더에 추가합니다. 다운스트림 요청을 처리하는 구성된 애플리케이션은 상위 세그먼트 ID를 기록하여 두 요청을 연결할 수 있습니다.

예 트레이스 ID, 상위 세그먼트 ID 및 샘플링 결정이 포함된 트레이스 헤더
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Parent=53995c3f42cd8ad8;Sampled=1

LineageLambda 및 AWS 서비스 기타 프로세싱 메커니즘의 일부로 추적 헤더에 추가할 수 있으며 직접 사용해서는 안 됩니다.

예 리니지를 이용한 헤더 추적
X-Amzn-Trace-Id: Root=1-5759e988-bd862e3fe1be46a994272793;Sampled=1;Lineage=a87bd80c:1|68fd508a:5|c512fbe3:2

필터 표현식

샘플링을 사용하더라도 복잡한 애플리케이션은 다량의 데이터를 생성합니다. AWS X-Ray 콘솔에서는 서비스 그래프를 easy-to-navigate 볼 수 있습니다. 이 보기는 애플리케이션에서 문제 및 최적화 기회를 쉽게 식별할 수 있는 상태 및 성능 정보를 제공합니다. 고급 트레이스의 경우, 개별 요청에 대해 트레이스를 드릴다운하거나 필터 표현식을 사용하여 특정 경로 또는 사용자와 관련된 트레이스를 찾을 수 있습니다.

개별 요청에 대해 트레이스를 드릴다운

그룹

X-Ray는 필터 표현식도 확장하고 그룹 기능도 지원합니다. 필터 표현식을 사용하여 그룹에 추적을 허용하는 기준을 정의할 수 있습니다.

이름 또는 Amazon 리소스 이름 (ARN) 별로 그룹을 호출하여 자체 서비스 그래프, 추적 요약 및 Amazon 지표를 생성할 수 있습니다. CloudWatch 그룹이 생성되면 수신 추적은 X-Ray 서비스에 저장될 때 그룹의 필터 표현식에 대해 확인됩니다. 각 기준과 일치하는 트레이스 수에 대한 지표가 CloudWatch 1분마다 게시됩니다.

그룹의 필터 표현식을 업데이트해도 이미 기록한 데이터는 변경되지 않습니다. 업데이트는 후속 추적에만 적용됩니다. 이렇게 하면 새 표현식과 이전 표현식의 그래프를 병합할 수 있습니다. 이를 방지하려면 현재 그룹을 삭제하고 새로 만드십시오.

참고

그룹은 필터 표현식과 일치하는 검색 완료 트레이스의 수로 청구됩니다. 자세한 내용은 AWS X-Ray 요금을 참조하십시오.

그룹에 대한 자세한 정보는 그룹 구성 섹션을 참조하세요.

주석 및 메타데이터

애플리케이션을 계측하면 X-Ray SDK는 수신 및 발신 요청, 사용된 AWS 리소스, 애플리케이션 자체에 대한 정보를 기록합니다. 세그먼트 문서에 주석 및 메타데이터로 다른 정보를 추가할 수 있습니다. 주석 및 메타데이터는 트레이스 수준에서 집계되며 세그먼트 또는 하위 세그먼트에 추가할 수 있습니다.

주석필터 표현식에 사용하도록 인덱싱된 단순한 키-값 페어입니다. 주석은 콘솔의 트레이스를 그룹화할 때 사용할 데이터를 기록하거나 GetTraceSummaries API를 호출할 때 사용하십시오.

X-Ray가 트레이스당 최대 50개의 주석까지 인덱싱합니다.

메타데이터는 객체와 목록을 포함한 모든 유형의 키-값 페어이지만 인덱싱되어 있지는 않습니다. 메타데이터를 사용하여 트레이스에 저장하고 싶지만 트레이스 검색에는 사용하지 않을 데이터를 기록합니다.

콘솔의 Trace details 페이지에 있는 세그먼트 또는 서브세그먼트 세부 정보 창에서 주석과 메타데이터를 볼 수 있습니다. CloudWatch

주석과 메타데이터는 콘솔의 세그먼트 또는 하위 세그먼트 세부 정보에서 볼 수 있습니다. CloudWatch

오류, 결함 및 예외

X-Ray는 애플리케이션 코드에서 발생하는 오류 및 다운스트림 서비스가 반환하는 오류를 추적합니다. 오류는 다음과 같이 분류됩니다.

  • Error – 클라이언트 오류(400 시리즈 오류)

  • Fault – 서버 장애(500 시리즈 오류)

  • Throttle – 제한 오류(429 요청 과다)

애플리케이션이 구성된 요청을 처리하는 동안 예외가 발생하면 X-Ray SDK가 스택 트레이스(사용 가능한 경우)를 포함하여 예외에 대한 세부 정보를 레코딩합니다. X-Ray 콘솔의 세그먼트 세부 정보에서 예외를 볼 수 있습니다.