Cloud Trace と Cloud Service Mesh

Cloud Trace は、アプリケーションからレイテンシ データを収集し、ほぼリアルタイムで表示する分散トレース システムです。これにより、分散システムを介してサンプル リクエストを実行できます。また、ネットワーク呼び出しの監視や、エンドツーエンドのシステム プロファイリングを行うことができます。

Cloud Trace は、次のプラットフォームの Cloud Service Mesh インストールでご利用いただけます。

  • Google Cloud 上の GKE
  • Cloud Service Mesh 認証局を使用してインストールした場合、オンプレミスの GKE Enterprise クラスタ

Cloud Trace はデフォルトで無効になっています。有効にすると、Google Cloud コンソールの Cloud Service Mesh ページにクラウド トレース ページのトレースへのリンクが表示されます。料金の詳細については、Cloud Trace の料金ページをご覧ください。

Cloud Trace を有効にする

このセクションでは、Cloud Trace を有効にする方法について説明します。

マネージド(TD)

このセクションでは、マネージド Cloud Service Mesh コントロール プレーンを使用して Cloud Service Mesh で Cloud Trace を有効にする方法について説明します。

  1. 次のコマンドを実行して Cloud Trace を有効にします。

    cat <<EOF | kubectl apply -n istio-system -f -
    apiVersion: telemetry.istio.io/v1alpha1
    kind: Telemetry
    metadata:
       name: enable-cloud-trace
       namespace: istio-system
    spec:
       tracing:
       - providers:
         - name: stackdriver
    EOF
    

マネージド(Istiod

このセクションでは、マネージド Istiod コントロール プレーンを使用して Cloud Service Mesh で Cloud Trace を有効にする方法について説明します。

  1. 次のコマンドを実行します。

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    data:
       mesh: |-
          defaultConfig:
            tracing:
              stackdriver: {}
    kind: ConfigMap
    metadata:
       name: istio-release-channel
       namespace: istio-system
    EOF
    

    release-channel は、リリース チャンネルasm-managedasm-managed-stable または asm-managed-rapid)です。

  2. 次のコマンドを実行して ConfigMap を表示します。

    kubectl get configmap istio-release-channel -n istio-system -o yaml
    
  3. Cloud Trace が有効になっていることを確認するには、次の行が mesh: セクションに表示されることを確認します。

    ...
    apiVersion: v1
    data:
       mesh: |
       ....
       defaultConfig:
          tracing:
             stackdriver:{}
    ...
    
  4. プロキシを再起動します。

    トレーサー構成はプロキシ ブートストラップ構成の一部になっているため、トレーサーの更新を取得するためには、各 Pod を再起動して、再挿入する必要があります。たとえば、次のコマンドを使用して Deployment に属する Pod を再起動します。

    kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

クラスタ内

このセクションでは、クラスタ内コントロール プレーンを使用して Cloud Service Mesh で Cloud Trace を有効にする方法について説明します。

Cloud Trace を有効にするには、次のオーバーレイ ファイルを使用して顧客管理のコントロール プレーンを再デプロイします。オーバーレイ ファイルの詳細については、オーバーレイ ファイルについてをご覧ください。

デフォルト

次のコマンドを実行して Cloud Trace を有効にします。

 ./asmcli install \
    OTHER_FLAGS \
    --option cloud-trace

このコマンドは、次のオーバーレイ ファイルを適用して、デフォルトのオプションでトレースを有効にします。デフォルトのサンプリング レートは 1% であることに注意してください。デフォルトをオーバーライドする場合は、代わりに --custom-overlay を使用する必要があります。

 apiVersion: install.istio.io/v1alpha1
 kind: IstioOperator
 spec:
   meshConfig:
     enableTracing: true
   values:
     global:
       proxy:
         tracer: stackdriver

オプションの一覧については、anthos-service-mesh パッケージをご覧ください。

カスタム

デフォルト値は、tracing.sampling の値を指定してオーバーライドできます。値は 0.01 単位で、0.0~100.0 の範囲から設定してください。たとえば、10,000 件ごとに 5 件のリクエストをトレースするには、0.05 を使用します。

次の例は、100& のサンプリング レートを示しています(この操作は、デモまたはトラブルシューティングの目的でのみ行います)。

 apiVersion: install.istio.io/v1alpha1
 kind: IstioOperator
 spec:
   meshConfig:
     enableTracing: true
     defaultConfig:
        tracing:
        sampling: 100
   values:
     global:
       proxy:
         tracer: stackdriver

次のコマンドを実行して Cloud Trace を有効にします。

 ./asmcli install \
    OTHER_FLAGS \
    --custom_overlay PATH_TO_FILE

トレーサー構成はプロキシ ブートストラップ構成の一部になっているため、トレーサーの更新を取得するためには、Pod を再起動して、再挿入する必要があります。次のコマンドを使用して、Deployment に属する Pod を再起動します。

kubectl rollout restart deployment -n NAMESPACE DEPLOYMENT_NAME

トレース コンテキストの伝播

サイドカー プロキシは、トレーススパンを自動的に送信できますが、トレース全体を関連付けるにはなんらかの情報が必要になります。このため、プロキシがスパン情報の送信時にスパンを 1 つのトレースに正しく関連付けられるように、適切な HTTP ヘッダーを伝播する必要があります。

これを行うには、受信リクエストから適切なヘッダーを収集し、発信リクエストに反映する必要があります。Cloud Service Mesh Stackdriver のトレース構成は、次のいずれかのヘッダー形式を受け入れ、次のすべての形式を伝播します。

  • B3(x-b3-traceidx-b3-spanidx-b3parentspanidx-b3-sampledx-b3-flags
  • W3C TraceContext(traceparent
  • Google Cloud Trace(x-cloud-trace-context
  • gRPC TraceBin(grpc-trace-bin

アプリケーションは、これらの形式のいずれかを使用してトレース コンテキストを伝播できます。これにより、トレースを適切に生成して Stackdriver に設定できます。

元のリクエストの traceparent ヘッダーを使用した HTTP-Get リクエストの例を次に示します。プロキシによって追加されたトレース コンテキストのヘッダーに注意してください。

$ kubectl exec -it sleep-557747455f-n6flv -- curl "httpbin:8000/anything?freeform=" -H "accept: application/json" -H "Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01" -vv
*   Trying 10.12.3.52:8000...
* Connected to httpbin (10.12.3.52) port 8000 (#0)
> GET /anything?freeform= HTTP/1.1
> Host: httpbin:8000
> User-Agent: curl/7.80.0-DEV
> accept: application/json
> Traceparent: 00-7543d15e09e5d61801d4f74cde1269b8-604ef051d35c5b3f-01
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< server: envoy
< date: Wed, 10 Nov 2021 20:36:04 GMT
< content-type: application/json
< content-length: 1032
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 5
<
{
  "args": {
    "freeform": ""
  },
  "data": "",
  "files": {},
  "form": {},
  "headers": {
    "Accept": "application/json",
    "Grpc-Trace-Bin": "AAB1Q9FeCeXWGAHU90zeEmm4AaDHmGRtdM7wAgE",
    "Host": "httpbin:8000",
    "Traceparent": "00-7543d15e09e5d61801d4f74cde1269b8-a0c798646d74cef0-01",
    "User-Agent": "curl/7.80.0-DEV",
    "X-B3-Sampled": "1",
    "X-B3-Spanid": "a0c798646d74cef0",
    "X-B3-Traceid": "7543d15e09e5d61801d4f74cde1269b8",
    "X-Cloud-Trace-Context": "7543d15e09e5d61801d4f74cde1269b8/11585396123534413552;o=1",
    "X-Envoy-Attempt-Count": "1",
    "X-Forwarded-Client-Cert": "<REDACTED>"
  },
  "json": null,
  "method": "GET",
  "origin": "127.0.0.6",
  "url": "http://httpbin:8000/anything?freeform="
}

返されたリクエスト ヘッダーのセットには、トレース コンテキスト ヘッダーの完全なセットが含まれています。

ヘッダーの伝播例については、トレース コンテキストの伝播をご覧ください。

カスタム ID を使用してクライアントからトレースを作成する

カスタム ID を使用してクライアントからトレースを作成するには、curl コマンドを使用して外部クライアントを含むリクエストを作成し、強制的にトレースを表示します。次に例を示します。

curl $URL --header "x-client-trace-id: 105445aa7843bc8bf206b12000100000"

x-client-trace-id の詳細については、Envoy のドキュメントをご覧ください。

アクセスのトレース

Service のトレース サンプルを表示する

アプリ内の Service のトレースのサンプリングを表示するには、次の操作を行います。

  1. Google Cloud コンソールで [Cloud Service Mesh] ページに移動します。

    [Cloud Service Mesh] ページに移動

  2. [サービス] で、検査するサービスの名前を選択します。

    次のスクリーンショットは、frontend Service の例を示しています。

    Cloud Service Mesh トレースのグラフ

  3. [リクエストのトレース] でトレースをクリックすると、詳細が表示されます。

    次のスクリーンショットは、トレース リクエストのサブパネルの例を示しています。

    Cloud Service Mesh トレースのサブパネル

すべてのトレースを表示する

Service のすべてのトレースを表示するには、次の手順を実施します。

  1. Google Cloud コンソールで [Cloud Service Mesh] ページに移動します。

    [Cloud Service Mesh] ページに移動

  2. [サービス] で、検査するサービスの名前を選択します。

  3. [指標] ページに移動します。

  4. [期間] プルダウン メニューから期間を指定するか、タイムラインを使用してカスタムスパンを設定します。

  5. [トレースを表示] をクリックします。

Cloud Service Mesh のサービスのトレースには、次の情報が含まれます。

  • メッシュ内のさまざまなサービス間のリクエストのレイテンシ。
  • ID、URL、サイズ、レイテンシ、プロトコルなどの HTTP リクエスト プロパティ。
  • istio.canonical_serviceistio.namespaceistio.mesh_id の各ラベルの一部としてのサービス名、名前空間、メッシュの ID。

次のステップ