分散トレーシング FAQ
分散トレーシングは Istio でどのように機能しますか?
Istio は、Envoy ベースのトレーシングを使用して分散トレーシングシステムと統合します。Envoy ベースのトレーシング統合では、アプリケーションは、後続の送信リクエストのトレーシングヘッダーを転送する責任があります。
追加情報については、Istio 分散トレーシング ( Jaeger, Lightstep, Zipkin) タスクと、Envoyトレーシングドキュメントを参照してください。
Istio での分散トレーシングに必要なものは何ですか?
Istio を使用すると、メッシュ内のワークロード間の通信のトレーススパンをレポートできます。ただし、トラフィックフローの完全なビューのためにさまざまなトレーススパンを結合するには、アプリケーションが受信リクエストと送信リクエストの間でトレースコンテキストを伝播する必要があります。
特に、Istio はアプリケーションが B3 トレースヘッダー、および Envoy が生成したリクエスト ID を伝播することに依存しています。これらのヘッダーには以下が含まれます。
x-request-id
x-b3-traceid
x-b3-spanid
x-b3-parentspanid
x-b3-sampled
x-b3-flags
b3
Lightstep を使用している場合は、次のヘッダーも転送する必要があります。
x-ot-span-context
OpenTelemetry または Stackdriver を使用している場合は、次のヘッダーも転送する必要があります。
traceparent
tracestate
ヘッダー伝播は、Zipkin や Jaeger などのクライアントライブラリを通じて行うことができます。また、分散トレーシングタスクに記載されているように、手動で行うこともできます。
Envoy ベースのトレーシングはどのように機能しますか?
Envoy ベースのトレーシング統合の場合、Envoy (サイドカープロキシ) は、プロキシされているアプリケーションに代わって、トレーシング情報をトレーシングバックエンドに直接送信します。
Envoy
- プロキシを通過するリクエストのたびにリクエスト ID およびトレースヘッダー (例:
X-B3-TraceId
) を生成します。 - リクエストおよびレスポンスのメタデータ (例: レスポンス時間) に基づいて、各リクエストのトレーススパンを生成します。
- 生成されたトレーススパンをトレーシングバックエンドに送信します。
- トレースヘッダーをプロキシされたアプリケーションに転送します。
Istio は、Lightstep および Zipkin の Envoy ベースの統合、および Jaeger を含むすべての Zipkin API 互換バックエンドをサポートしています。
分散トレーシングに必要な最小限の Istio 設定は何ですか?
Istio が Zipkin 互換バックエンドと統合するために必要なのは、トレーシングが有効になっているIstio の最小限のプロファイルだけです。
初期の Zipkin (B3) HTTP ヘッダーは誰が生成しますか?
Istio サイドカープロキシ (Envoy) は、リクエストによって提供されない場合、初期ヘッダーを生成します。
なぜ Istio はアプリケーションの代わりにヘッダーを伝播できないのですか?
Istio サイドカーは、関連付けられたアプリケーションインスタンスのインバウンドとアウトバウンドの両方のリクエストを処理しますが、アウトバウンドリクエストをそれらを引き起こしたインバウンドリクエストと関連付ける暗黙的な方法はありません。この関連付けを実現する唯一の方法は、アプリケーションがインバウンドリクエストからアウトバウンドリクエストに関連情報を (つまり、ヘッダーを) 伝播することです。ヘッダー伝播は、クライアントライブラリを使用するか、手動で行うことができます。詳細については、Istio での分散トレーシングに必要なものは何ですか?をご覧ください。
リクエストがトレースされないのはなぜですか?
Istio 1.0.3 以降、トレーシングのサンプリングレートは、default
構成プロファイルで 1% に削減されました。これは、Istio によってキャプチャされた 100 個のトレースインスタンスのうち 1 つだけがトレーシングバックエンドにレポートされることを意味します。demo
プロファイルのサンプリングレートは、引き続き 100% に設定されています。サンプリングレートの設定方法の詳細については、このセクションを参照してください。
それでもトレースデータが表示されない場合は、ポートが Istio のポート命名規則に準拠していること、およびサイドカープロキシ (Envoy) によるトラフィックキャプチャを有効にするために、適切なコンテナポートが (例えば、ポッドスペックを介して) 公開されていることを確認してください。
エグレスプロキシに関連付けられたトレースデータのみが表示され、イングレスプロキシに関連付けられたトレースデータが表示されない場合、それは Istio のポート命名規則に関連している可能性があります。Istio 1.3以降、アウトバウンドトラフィックのプロトコルは自動的に検出されます。
トレースの量をどのように制御できますか?
Istio は Envoy を介して、トレース生成のパーセンテージベースのサンプリング戦略を現在サポートしています。このサンプリングレートの設定方法の詳細については、このセクションを参照してください。
トレーシングを無効にするにはどうすればよいですか?
すでにトレーシングが有効になっている Istio をインストールしている場合は、次のようにして無効にできます。
# Fill <istio namespace> with the namespace of your istio mesh.Ex: istio-system
TRACING_POD=`kubectl get po -n <istio namespace> | grep istio-tracing | awk '{print $1}'`
$ kubectl delete pod $TRACING_POD -n <istio namespace>
$ kubectl delete services tracing zipkin -n <istio namespace>
# Now, manually remove instances of trace_zipkin_url from the file and save it.
次に、分散トレーシングタスクのクリーンアップセクションの手順に従います。
トレーシング機能がまったく不要な場合は、Istio のインストール時にトレーシングを無効にしてください。
Istio はトレーシング情報を外部の Zipkin 互換バックエンドに送信できますか?
そのためには、Zipkin 互換インスタンスの完全修飾ドメイン名を使用する必要があります。例:zipkin.mynamespace.svc.cluster.local
。
Istio は vert.x イベントバスメッセージのリクエストトレーシングをサポートしていますか?
Istio は現在、pub/sub およびイベントバスプロトコルのサポートを提供していません。これらのテクノロジーの使用はベストエフォートであり、破損する可能性があります。