기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS X-Ray 는 Amazon Simple Queue Service(Amazon SQS)와 통합되어 Amazon SQS 대기열을 통해 전달되는 메시지를 추적합니다. X-Ray SDK를 사용하여 요청을 추적하는 서비스가 있는 경우, Amazon SQS는 추적 헤더를 전송하고 발신자가 소비자에게 보낸 원본 추적에 일정한 추적 ID를 계속해서 전파합니다. 사용자는 이러한 추적의 연속성 덕분에 다운스트림 서비스 전체에 걸쳐 추적, 분석 및 디버깅할 수 있습니다.
AWS X-Ray 는 Amazon SQS 및를 사용하여 이벤트 기반 애플리케이션 추적을 지원합니다 AWS Lambda. CloudWatch 콘솔을 사용하면 각 요청이 Amazon SQS로 대기열에 추가되고 다운스트림 Lambda 함수에 의해 처리될 때 연결된 보기를 볼 수 있습니다. 업스트림 메시지 생산자의 트레이스가 다운스트림 Lambda 함수의 트레이스에 자동으로 연결되므로 전체 애플리케이션을 종합적으로 파악할 수 있습니다. 자세한 내용은 이벤트 중심 애플리케이션 추적을 참조하세요.

Amazon SQS는 다음과 같은 추적 헤더 계측을 지원합니다.
-
기본 HTTP 헤더 - SDK를 통해 Amazon SQS를 호출하면 X-Ray AWS SDK가 추적 헤더를 HTTP 헤더로 자동으로 채웁니다. 기본 추적 헤더는
X-Amzn-Trace-Id
로 입력되며,SendMessage
또는SendMessageBatch
요청에 포함된 모든 메시지에 해당합니다. 기본 HTTP 헤더에 대한 자세한 내용은 추적 헤더 단원을 참조하십시오. -
AWSTraceHeader
시스템 속성 -AWSTraceHeader
는 대기열의 메시지와 함께 X-Ray 추적 헤더를 전달하기 위해 Amazon SQS에서 사용하는 메시지 시스템 속성입니다. 예를 들어 새로운 언어에 대한 추적 SDK를 빌드할 때와 같이 X-Ray SDK를 통한 자동 계측이 제공되지 않는 경우에도AWSTraceHeader
를 사용할 수 있습니다. 두 가지 헤더 계측을 설정하고 나면 그 메시지 시스템 속성이 HTTP 추적 헤더를 덮어씁니다.
Amazon EC2에서 실행하는 경우 Amazon SQS는 한 번에 하나의 메시지 처리를 지원합니다. 이는 온프레미스 호스트에서 실행되고 AWS Fargate Amazon ECS 또는와 같은 컨테이너 서비스를 사용할 때 적용됩니다 AWS App Mesh.
추적 헤더는 Amazon SQS 메시지 크기 할당량 및 메시지 속성 할당량에서 제외됩니다. 즉, X-Ray 추적을 활성화해도 Amazon SQS 할당량을 초과하지 않습니다. AWS 할당량에 대한 자세한 내용은 Amazon SQS 할당량을 참조하세요.
HTTP 추적 헤더 전송
Amazon SQS의 발신자 구성 요소는 SendMessageBatch
또는 SendMessage
직접 호출을 통해 추적 헤더를 자동 전송할 수 있습니다. AWS SDK 클라이언트가 계측되면 X-Ray SDK를 통해 지원되는 모든 언어를 통해 클라이언트를 자동으로 추적할 수 있습니다. 해당 서비스(예: Amazon S3 버킷 또는 Amazon SQS 대기열) 내에서 액세스하는 추적 AWS 서비스 및 리소스는 X-Ray 콘솔의 추적 맵에 다운스트림 노드로 표시됩니다.
원하는 언어로 AWS SDK 호출을 추적하는 방법을 알아보려면 지원되는 SDKs
추적 헤더 검색 및 추적 컨텍스트 복구
Lambda 다운스트림 소비자를 사용하는 경우 추적 컨텍스트 전파가 자동으로 이루어집니다. 다른 Amazon SQS 소비자와 컨텍스트 전파를 계속하려면 수신자 구성 요소에 대한 핸드오프를 수동으로 계측해야 합니다.
추적 컨텍스트를 복구하는 단계는 크게 세 단계로 나뉩니다.
-
ReceiveMessage
API를 호출하여AWSTraceHeader
속성에 대한 대기열에서 메시지를 수신합니다. -
속성에서 추적 헤더를 검색합니다.
-
헤더에서 추적 ID를 복구합니다. 원한다면 해당 세그먼트에 지표를 더 추가합니다.
다음은 Java용 X-Ray SDK로 작성된 구현 예제입니다.
예 : 추적 헤더 검색 및 추적 컨텍스트 복구
// Receive the message from the queue, specifying the "AWSTraceHeader" ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest() .withQueueUrl(
QUEUE_URL
) .withAttributeNames("AWSTraceHeader"); List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages(); if (!messages.isEmpty()) { Message message = messages.get(0); // Retrieve the trace header from the AWSTraceHeader message system attribute String traceHeaderStr = message.getAttributes().get("AWSTraceHeader"); if (traceHeaderStr != null) { TraceHeader traceHeader = TraceHeader.fromString(traceHeaderStr); // Recover the trace context from the trace header Segment segment = AWSXRay.getCurrentSegment(); segment.setTraceId(traceHeader.getRootTraceId()); segment.setParentId(traceHeader.getParentId()); segment.setSampled(traceHeader.getSampled().equals(TraceHeader.SampleDecision.SAMPLED)); } }