概要
スパンリンクは、OpenTelemetry の概念であり、OpenTelemetry Tracing API の一部です。Datadog は以下のアプリケーションのスパンリンクをサポートしています。
スパンリンクは、因果関係があるものの典型的な親子関係ではない 1 つ以上のスパンを相関付けます。これらのリンクは、同一トレース内または異なるトレース間でスパンを相関付けることができます。
スパンリンクは、ワークフローが直線的な実行パターンから逸脱しがちな分散システムでの操作をトレースするのに役立ちます。また、リクエストをバッチ処理したり、イベントを非同期に処理するシステムでの操作フローをトレースするのにも有用です。
Datadog は、フォワード リンクとバックワード リンクの両方のスパン リンクをサポートしており、ユーザーは双方向にトレースをまたいだスパン間の関係を可視化し、ナビゲートできます。
- フォワード リンク: スパンは、同一トレース内でも別のトレースでも、後の時点に発生する別のスパンにリンクできます。これにより、より早い処理から後続の処理へ、トレースをまたいで移動できます。
- バックワード リンク: 同様に、スパンは、同一トレース内でも別のトレースでも、より前の時点に発生したスパンにリンクできます。これにより、後段の処理から過去の処理へさかのぼることができます。
一般的な使用例
スパンリンクは、複数の操作が単一のスパンに集約されるファンインのシナリオで最も適用されます。単一のスパンは、集約される複数の操作にリンクします。
例:
Scatter-Gather と Map-Reduce: ここでは、スパンリンクが複数の並列プロセスをトレースし、それらを相関させ、最終的に単一のプロセスに結びつけます。並列プロセスの結果を、集約されたアウトプットに結び付けます。
メッセージ集約: Kafka Streams のようなシステムでは、スパンリンクがメッセージ群の各メッセージを集約された結果に結びつけ、個々のメッセージが最終的な出力にどのように寄与しているかを示します。
トランザクションメッセージング: メッセージキューのように、複数のメッセージが単一のトランザクションの一部である場合、スパンリンクが各メッセージと全体のトランザクションプロセスの関係をトレースします。
イベントソーシング: イベントソーシングにおけるスパンリンクは、複数の変更メッセージがエンティティの現在の状態にどのように影響を与えたかを追跡します。
スパンリンクの作成
アプリケーションが、
- OpenTelemetry SDK でインスツルメンテーションされている場合、使用する言語に応じて OpenTelemetry の手動インスツルメンテーションドキュメントに従ってください。例えば、Java 用のリンク付きスパンの作成を参照してください。
- Datadog SDK を使用している場合は、スパン リンクの追加 の例に従ってください。
最低限のサポート
注: このセクションでは、Datadog APM クライアントライブラリ (OpenTelemetry API 付き) を使用してスパンリンクを生成するための最低限のサポートについて説明します。OpenTelemetry SDK によって生成されたスパンリンクは、OTLP Ingest を通じて Datadog に送信されます。
Datadog トレーシングライブラリを使用してスパンリンクを生成するには、Agent v7.52.0 以降が必要です。スパンリンクのサポートは以下のリリースで導入されました。
言語 | トレーシングライブラリの最低バージョン |
---|
C++/Proxy | 未サポート |
Go | 1.61.0 |
Java | 1.26.0 |
.NET | 2.53.0 |
Node | 5.3.0 |
PHP | 0.97.0 |
Python | 2.5.0 |
Ruby | 2.0.0 |
スパンリンクの表示
Datadog の Trace Explorer からスパンリンクを表示できます。
参考資料