分散トレーシングと双方向ドリルダウン

分散トレーシングと双方向ドリルダウン

インストルメンテーションの設定

10 minutes

必要な変更の概要

ThousandEyes のドキュメント 、特に Splunk Observability APM のページ に、分散トレーシングに必要な内容が記載されています。

Propagators について:

さらに、sampler を parentbased_always_on に設定することで、ThousandEyes がリクエストを開始した後もトレースが継続されます。

重要なポイント

テストの結果(少なくともこの執筆時点では)、propagators の順序が重要であり、デフォルトの順序では動作しないことが確認されています。そのため、正しい順序にパッチを適用する必要があります。

以下の変更を行います:

ステップ 1: OTel Collector の変更

インストルメンテーションの設定を確認しましょう:

bash
kubectl describe instrumentation splunk-otel-collector

Propagators の下に必要なものが設定されていることが確認できますが、正しい順序にするためにパッチを適用します。

ステップ 2: インストルメンテーションのパッチ(デフォルトの解決)

ここではパッチで対応しますが、将来のアップグレードでこの変更は失われます。正しい方法は values.yaml ファイルを更新して、常にこの設定が適用されるようにすることです。

bash
kubectl patch instrumentation splunk-otel-collector \
  --type=merge \
  -p '{
    "spec": {
      "propagators": ["baggage", "b3", "tracecontext"],
      "sampler": {
        "type": "parentbased_always_on"
      }
    }
  }'

Propagators が正しい順序になっていること、および sampler が追加されていることを確認できます:

bash
kubectl describe instrumentation splunk-otel-collector

ステップ 3: アプリケーションのパッチ

まず、デプロイされているコンテナイメージを確認しましょう:

bash
kubectl describe pods api-gateway | grep Image:

api-gateway にはコンテナが1つだけあることが確認できます。アプリケーションにパッチを適用すると、複数のコンテナイメージ(api-gateway 用とインストルメンテーション用)が表示されるようになります。

Java インストルメンテーションを注入しましょう。(注意: config-serverdiscovery-serveradmin-server は既にパッチが適用されているため、変更はありません。):

bash
kubectl get deployments -l app.kubernetes.io/part-of=spring-petclinic -o name | xargs -I % kubectl patch % -p "{\"spec\": {\"template\":{\"metadata\":{\"annotations\":{\"instrumentation.opentelemetry.io/inject-java\":\"default/splunk-otel-collector\"}}}}}"

他のランタイムの場合

他のランタイムの場合は、言語に対応するアノテーションを使用してください。例:

  • instrumentation.opentelemetry.io/inject-nodejs
  • instrumentation.opentelemetry.io/inject-python
  • instrumentation.opentelemetry.io/inject-dotnet

インストルメンテーションがデプロイされたことを確認できます:

bash
kubectl describe pods api-gateway | grep Image:

また、この Pod で Java インストルメンテーションが有効になっており、propagators に baggageb3tracecontext が正しい順序で含まれていることも確認できます:

bash
kubectl describe pods api-gateway | grep OTEL_PROPAGATORS

すべての Pod を再起動

一部の Pod には既にインストルメンテーションが注入されているため、正しいインストルメンテーションを適用するにはすべてを再起動することが重要です。

以下を実行します:

bash
kubectl rollout restart deployment

これで、ThousandEyes Enterprise Agent が実行されている namespace からクラスター内の API パスを検証できます。

以下を実行してみてください:

bash
kubectl run te-petclinic-curl \
  --rm -it \
  --restart=Never \
  --image=curlimages/curl \
  --command -- curl -sS http://api-gateway.default.svc.cluster.local:82/api/customer/owners

お待ちください

期待される出力が得られるまで、しばらく時間がかかる場合があります。

デプロイメント環境は以下の通りです:

bash
echo "thousandeyes-$INSTANCE"

Splunk Observability Cloud に完全な環境が表示されるはずです(環境 thousandeyes-shw-xxxx でフィルタリングしてください)。

ThousandEyes Service Map

Last Modified ·