Amazon SQS と AWS X-Ray - AWS X-Ray

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 からのトレースマップ。

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)); } }