分散トレーシングと双方向ドリルダウン
25 minutesこのセクションでは、ThousandEyesとSplunkの統合を真の調査ワークフローに変えます。前のセクションでは、ThousandEyesが合成メトリクスをSplunk Observability Cloudにストリーミングしました。このセクションでは、サポートされている ThousandEyes <-> Splunk APM 分散トレーシング統合 を有効にし、ネットワーク、プラットフォーム、アプリケーションチームが同じリクエストを見ながら両方のツール間を行き来できるようにします。
これが重要な理由
これは、2つの環境間で 双方向アクセス を可能にする部分です。ThousandEyesからSplunk APMの関連トレースを開くことができ、Splunk APMから元のThousandEyesテストに戻ることができます。
学習内容
このセクションを終了すると、以下のことができるようになります:
- 内部サービスを計装してSplunk APMにトレースを送信する
- ThousandEyesの HTTP Server または API テストで分散トレーシングを有効にする
- Splunk APM用のThousandEyes Generic Connector を設定する
- ThousandEyesの Service Map を開き、対応するSplunkトレースに直接ジャンプする
- Splunk APMのThousandEyesメタデータを使用して、元のThousandEyesテストに戻る
サポートされているワークフロー
この学習シナリオは、ThousandEyesとSplunkがドキュメント化しているサポートされたワークフローに従います:
- ThousandEyesは、分散トレーシングが有効になっている場合、HTTP Server および API テストに
b3、traceparent、tracestateヘッダーを自動的に挿入します。 - 監視対象のエンドポイントは、ヘッダーを受け入れ、OpenTelemetryで計装され、トレースコンテキストを伝播し、オブザーバビリティバックエンドにトレースを送信する必要があります。
- Splunk APMの場合、ThousandEyesは
https://api.<REALM>.signalfx.comを指し、API スコープ のSplunkトークンで認証する Generic Connector を使用します。 - Splunk APMは、
thousandeyes.test.idやthousandeyes.permalinkなどのThousandEyes属性で一致するトレースを強化し、ThousandEyesへの逆ジャンプを可能にします。
これらのヘッダーの実際の意味
この部分は見落としがちですが、そうすべきではありません。トレース相関は、サービスがThousandEyesが挿入するヘッダーを理解し、トレースを正しく継続する場合にのみ機能します。
traceparentとtracestateはW3C Trace Contextヘッダーです。b3はZipkin B3シングルヘッダー形式です。- ThousandEyesは両方を挿入します。これは、実際の環境には、同じ伝播形式を好まないプロキシ、メッシュ、ゲートウェイ、アプリランタイムが混在していることが多いためです。
OpenTelemetryの用語では、重要な設定はプロパゲーターリストです:
これは2つのことを行います:
- サービスが受信ThousandEyesリクエストから B3 または W3C コンテキストのいずれかを抽出できるようにします。
tracecontextを有効にしておくことで、W3Ctracestateを保持します。
重要な詳細
tracestate を別のOpenTelemetryプロパゲーターとして追加する必要は ありません。tracecontext プロパゲーターが traceparent と tracestate の両方を処理します。
「正しく行う」とはどういうことか
コレクターはこのセットアップの一部に過ぎません。Kubernetesでの正しいThousandEyesトレーシングデプロイメントには 3 つのレイヤー があります:
- Deployment アノテーション - OpenTelemetry Operatorがランタイム固有の計装を挿入するため。
- Instrumentation リソース - 挿入されたSDKがトレースの送信先と使用するプロパゲーターを知るため。
- Collector トレースパイプライン - OTLPトレースが実際に受信され、Splunk APMにエクスポートされるため。
最も一般的な間違いは、コレクターだけに焦点を当てることです。コレクターは生の b3、traceparent、または tracestate リクエストヘッダーを直接見ることはありません。アプリケーションまたは自動計装ライブラリがまずそれらのヘッダーを抽出し、スパンコンテキストを継続し、次にOTLP経由でコレクターにスパンを送信する必要があります。
現在のクラスターからの実際の設定
以下の例は、このワークショップを現在実行しているライブクラスターからトリミングされたものです。これらは、今日Kubernetesで実際に機能しているパターンを示しています。
1. Deployment アノテーション
ライブクラスターでは、teastore アプリケーションは teastore/default Instrumentationリソースを指しています:
これは、ThousandEyesリクエストがトレースに変換されない場合に最初に確認する場所です。
2. Instrumentation リソース
これは teastore からのライブ Instrumentation オブジェクトで、ThousandEyesに関係するフィールドにトリミングされています:
これがThousandEyesシナリオの重要な部分です:
endpointはクラスターローカルのOTelエージェントサービスにスパンを送信します。b3はThousandEyes B3ヘッダーの抽出を可能にします。tracecontextはtraceparentとtracestateを保持します。parentbased_always_onは、ThousandEyesがリクエストを開始するとトレースが継続することを保証します。
3. 挿入された Pod が実際に取得するもの
実行中の teastore-webui-v1 Podでは、オペレーターが以下の環境変数を挿入しました:
これは有用な検証チェックポイントです。プロパゲーターが抽象的な設定オブジェクトで宣言されているだけでなく、ワークロードに適用されていることを証明するためです。
4. Agent Collector トレースパイプライン
otel-splunk のライブエージェントコレクターは、OTLP、Jaeger、Zipkinトラフィックを受信し、上流にトレースを転送しています。これは実行中のConfigMapからのトリミングされた抜粋です:
ThousandEyesの場合、重要な部分はコレクターの特別なB3オプションではありません。重要な部分は、コレクターが 4317 と 4318 でOTLPを公開していること、およびサービスがそこにスパンをエクスポートしていることです。
5. Gateway Collector の Splunk APM へのエクスポート
ライブゲートウェイコレクターは、トレースをSplunk Observability Cloudに転送します。これは実行中のゲートウェイConfigMapの関連部分です:
これは、スパンをSplunk APMに送信する部分です。このパイプラインが壊れている場合、ThousandEyesはリクエストにヘッダーを挿入できますが、相関トレースがSplunkに表示されることはありません。
現在のクラスターのポイント
ライブクラスターでは、teastore/default InstrumentationリソースがThousandEyesで従うべきパターンです。これは b3 と tracecontext を明示的に含んでいるためです。これが、このシナリオで複製したい設定です。
重要
このセクションではブラウザページのURLを使用 しないでください。ThousandEyesのドキュメントによると、ブラウザはこのワークフローに必要なカスタムトレースヘッダーを受け入れません。代わりに、HTTP Server または API テストの背後にある計装されたバックエンドエンドポイントを使用してください。
ステップ 1:ワークロードが Splunk APM にトレースを送信していることを確認する
アプリケーションがすでに計装されていて、トレースがSplunk APMに表示されている場合は、ステップ2にスキップできます。そうでない場合、Kubernetesでの最速の学習パスは、ゼロコード計装用のオペレーターを有効にしたSplunk OpenTelemetry Collectorを使用することです。
Splunk OpenTelemetry Collector とオペレーターをインストールする
自動計装用に Deployment にアノテーションを付ける
Javaワークロードの場合、一般的な例は次のようになります:
他のランタイムの場合は、言語に合ったアノテーションを使用してください:
instrumentation.opentelemetry.io/inject-nodejsinstrumentation.opentelemetry.io/inject-pythoninstrumentation.opentelemetry.io/inject-dotnet
コレクターがアプリケーションと同じ名前空間にインストールされている場合、公式のSplunkドキュメントでは "true" をアノテーション値として使用することもサポートしています。
このワークショップ環境の ライブクラスターパターン に従いたい場合、アノテーション値は名前空間修飾され、teastore/default Instrumentationオブジェクトを指します:
トレースが存在することを検証する
デプロイメントのロールアウトが完了するまで待ちます:
複数のサービスを横断するバックエンドエンドポイントに対していくつかのリクエストを生成します。例:
現在のワークショップクラスターでは、
http://teastore-webui.teastore.svc.cluster.local:8080/のようなサービスが適切なターゲットです。これは、いくつかの下流アプリケーションサービスをフロントエンドし、単純なヘルスチェックよりも有用なエンドツーエンドトレースを生成するためです。続行する前に、Splunk APM にトレースが到着していることを確認してください。
学習のヒント
トレーシング演習には、純粋な /health エンドポイントではなく、ビジネストランザクションを使用してください。マルチサービスリクエストは、ThousandEyesでより良いService Mapを提供し、Splunk APMでより有用なトレースを提供します。
ステップ 2:ThousandEyes テストで分散トレーシングを有効にする
ステップ1の計装されたバックエンドエンドポイントをターゲットとする HTTP Server または API テストを作成または編集します。
- ThousandEyesで、HTTP Server または API テストを作成します。
- Advanced Settings を開きます。
- Distributed Tracing を有効にします。
- テストを保存し、すでにSplunk APMにトレースを送信しているのと同じエンドポイントに対して実行します。
テストが実行された後、ThousandEyesはトレースヘッダーを挿入し、そのリクエストのトレースコンテキストをキャプチャします。
ステップ 3:ThousandEyes で Splunk APM コネクターを作成する
前のセクションのメトリックストリーミング統合は Ingest トークンを使用します。このステップは異なります:ThousandEyesはSplunk APMにクエリを実行してトレースリンクを構築する必要があるため、代わりにSplunk API トークンを使用します。
- Splunk Observability Cloudで、API スコープを持つアクセストークンを作成します。
- ThousandEyesで、Manage > Integrations > Integrations 2.0 に移動します。
- 以下の設定で Generic Connector を作成します:
- Target URL:
https://api.<REALM>.signalfx.com - Header:
X-SF-Token: <your-api-scope-token>
- Target URL:
- 新しい Operation を作成し、Splunk Observability APM を選択します。
- オペレーションを有効にして、統合を保存します。
ステップ 4:双方向調査ループを検証する
テストが実行され、コネクターが有効になったら、両方向でワークフローを検証します。
ThousandEyes から始める
- ThousandEyesでテストを開きます。
- Service Map タブに移動します。
- トレースパス、サービスレイテンシー、下流のエラーが表示されることを確認します。
- ThousandEyesから Splunk APM へのリンクを使用して、完全なトレースを検査します。
Splunk APM で続ける
Splunk APM内で、トレースに以下のようなThousandEyesメタデータが含まれていることを確認します:
thousandeyes.account.idthousandeyes.test.idthousandeyes.permalinkthousandeyes.source.agent.id
thousandeyes.permalink フィールドまたはトレースウォーターフォールビューの Go to ThousandEyes test ボタンを使用して、元のThousandEyesテストに戻ります。
推奨される学習シナリオ
ワークショップ中に以下のフローを使用してください:
- 複数のサービスを呼び出す内部APIルートに対するThousandEyesテストを作成します。
- ThousandEyesに最初に問題を表示させ、クラスがネットワークと合成モニタリングの観点から始められるようにします。
- ThousandEyesで Service Map を開き、レイテンシーやエラーがどこから始まるかを特定します。
- スパンレベルの分析のために Splunk APM にジャンプします。
- テスト、エージェント、ネットワークパスを再度検査するために ThousandEyes に戻ります。
これは、異なるチームが実際に作業する方法を反映しているため、強力な教育ループです:
- ネットワークおよびエッジチームは、ThousandEyesから始めることが多いです。
- SREおよびプラットフォームチームは、Splunkダッシュボードまたはアラートから始めることが多いです。
- アプリケーションチームは、通常Splunk APMのトレースを求めます。
この統合が整っていれば、全員がコンテキストを失うことなく切り替えることができます。
よくある落とし穴
- テストがSplunkダッシュボードに表示されていても、トレース相関がない場合があります。これは通常、メトリクス ストリームのみが設定されており、Splunk APM Generic Connector が設定されていないことを意味します。
- 監視対象のエンドポイントがトレースヘッダーを下流に伝播しない場合、トレースがSplunk APMに存在してもThousandEyesに表示されない場合があります。
/healthのような浅いエンドポイントは、設定が正しくても限られたトレース価値しか生成しないことがよくあります。




