翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon SQS と AWS X-Ray
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 コンシューマーノードからのトレースに自動的にリンクされ、アプリケーションの end-to-end ビューが作成されます。詳細については、「イベント駆動型アプリケーションのトレース」を参照してください。
![Amazon SQS キューを介した Lambda からのトレースマップ。](images/console-batch-servicemap-linkededge.png)
Amazon SQS では、次のトレースヘッダー計測がサポートされています。
-
デフォルトの HTTP ヘッダー – X-Ray SDK は、 AWS SDK を通じて Amazon SQS を呼び出すと、トレースヘッダーを HTTP ヘッダーとして自動的に入力します。デフォルトのトレースヘッダーは
X-Amzn-Trace-Id
によって転送され、SendMessage
またはSendMessageBatch
リクエストに含まれるすべてのメッセージに対応します。デフォルトの HTTP ヘッダーの詳細については、「トレースヘッダー」を参照してください。 -
AWSTraceHeader
システム属性 —AWSTraceHeader
は、Amazon SQS によって予約されたメッセージシステム属性で、X-Ray トレースヘッダーをキューのメッセージとともに渡します。AWSTraceHeader
は、新しい言語のトレース SDK を構築する場合など、X-Ray SDK による自動計測ができない場合でも使用できます。両方のヘッダー計測が設定されている場合、メッセージシステム属性が HTTP トレースヘッダーを上書きします。
Amazon EC2 で実行した場合、Amazon SQS は一度に 1 つのメッセージの処理をサポートします。これは、オンプレミスホストで実行されている場合、および 、Amazon ECS AWS Fargate、 などのコンテナサービスを使用する場合に適用されます 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 コンシューマーとのコンテキスト伝達を続行するには、レシーバーコンポーネントへの引き継ぎを手動で計測する必要があります。
トレースコンテキストを復元するには、主に 3 つのステップがあります。
-
AWSTraceHeader
APIを呼び出してReceiveMessage
属性のキューからメッセージを受信します。 -
属性からトレースヘッダーを取得します。
-
ヘッダーからトレース ID を復元します。必要に応じて、セグメントにメトリクスを追加します。
以下は、X-Ray SDK for Java で記述された実装の例です。
例 : トレースヘッダーを取得し、トレースコンテキストを復元する
// 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)); } }