2017-08-22 10 views
2

最近、AWS XrayをSpringプロジェクトに追加し始めました。AWSXRayServletFilterを利用してクライアントリクエストをカバーするSegmentsの作成に成功しました。AWS Xray with Java SQS JMSコネクタ

AWS SDK Instrumentorを追加して、AWSサービスの使用状況を追跡し始めました。その1つがSQSです。これは、amazon-sqs-java-messaging-libを使用して、JMSを使用してSQSメッセージを受信します。これは我々がいくつかの問題に直面しているところです。

TracingHandlerは、アプリケーションがSubSegmentを作成しようと試みるたびに、Segmentが既に作成されていないために失敗します。これらのリクエストをSegmentに書き込むにはどうすればよいですか?メッセージをキューにプッシュしたリソースからセグメントを一緒にリンクするために、その情報がメッセージ自体に含まれていないのでしょうか?

セグメントが見つからないか、少なくとも親のトレースIDからピックアップしても最新のdocsに含まれている情報が表示されない場合、セグメントを作成するためのコンテキストがない戦略があると思います。

答えて

2

これは公式フォーラムで議論されている既知の問題です。 https://forums.aws.amazon.com/thread.jspa?threadID=252012&tstart=0 https://forums.aws.amazon.com/thread.jspa?threadID=257258&tstart=25

我々のアプリケーションがTracingHandlerは、サブセグメントを作成しようと既に作成セグメントはないので、失敗したメッセージを取得しようとするたびに:ここでは、リンクのカップルです。どのようにしてこれらのリクエストをセグメントにまとめることができますか?メッセージをキューにプッシュしたリソースからセグメントを一緒にリンクするために、その情報がメッセージ自体に含まれていないのでしょうか?

セグメント情報はThreadLocalに保持されます。別のスレッドで何かを実行している場合は、セグメントを手動で作成しなければならないため、サブセグメントを作成するときに必要なThreadLocalデータが必要になります。 SQSメッセージには特別なものはなく、X線サービスに関連するSQSサービス自体もあります。 SQSクライアントを使用しているのは、ハンドラでThreadLocalデータを追跡することによって、SQSへの呼び出しが行われたことがXレイから推測されるだけです。

セグメントが見つからないか、少なくとも親のトレースIDからピックアップしても、最新のドキュメントにその情報が含まれていない場合、セグメントを作成するための戦略が存在しないことが予想されます。

これは私の機能リクエストの1つです。公式の答えと、このようなContext Missing Strategyを自分で実装しようと試みたときの現行の制限事項とともに、スレッドを参照してください。 https://forums.aws.amazon.com/thread.jspa?threadID=252012&tstart=0

+0

SQSに関しては、SQSメッセージの中で、サービスがメッセージを待ち行列に入れていたときのために、セグメントの親IDを含む可能性のあるプロパティがサポートされる可能性があると私は考えました。 SQSクライアントがXRayをある程度認識していない場合、SQSのソースからシンクまでのフローをどのように指定できますか?私はそれらの要求をX線サービスマップに接続したいと思っています。しかし、リンクとガイダンスをありがとう!細部を感謝してください。 – dvisco

+0

SQSクライアントはX線を認識しており、それがそれらの「人為的」推定セグメントをどのように作成するかです。 SQSのソースからシンクに接続する場合は、ソースSQSメッセージを入れる最初のものをブロックしていない非同期部分なので、意味をなさないかどうかはわかりません。 – Ruslan

+0

@dvisco X-Rayは基本的に要求ごとに性能パーツを分解するということを覚えておいてください。 SQSにメッセージを送信するWebリクエストがあるとします。そのput操作は処理をブロックしますが、それは要求のサブセグメントで見ることが重要です。しかし、何か別のプロセスであるSQSメッセージを読み、最初の要求の実行時間に負担をかけないものがあります。 – Ruslan

関連する問題