トラブルシューティング

このページには、Trace のトラブルシューティング情報が記載されています。

Trace インターフェースにデータがない

トレースデータがあるはずなのに Google Cloud プロジェクトでトレースを表示できない場合は、次の手順をお試しください。

  1. Enable the Cloud Trace API.

    Enable the API

  2. Google Cloud コンソールで、[API とサービス] ページに移動します:

    [API とサービス] に移動

    [Cloud Trace API] というラベルの付いた行を見つけたら、次のことを試します。

    • [リクエスト] というラベルが付いた列に数値情報が表示されていない場合、Google Cloud プロジェクトにトレースデータが送信されていません。

      この問題を解決するには、アプリケーションとプロキシが正しいプロジェクトにトレースを送信するように構成されていることを確認します。

    • [Cloud Trace API] を選択し、[指標] タブを選択して、[API メソッド別のエラー] というラベルの付いたグラフを見つけます。

      • 書き込みが失敗した場合は、認証情報を提供するサービス アカウントに Cloud Trace エージェント(roles/cloudtrace.agent)のロールを付与します。このロールには、権限 cloudtrace.traces.patch が含まれています。この権限により、アプリケーションがスパンデータを Google Cloud プロジェクトに書き込むことができます。

        詳しくは、Cloud Trace IAM のロールをご覧ください。

      • 読み取りが失敗する場合は、Google Cloud プロジェクトの IAM ロールに Cloud Trace ユーザー(roles/cloutrace.user)ロールの権限が含まれていることを確認します。このロールの権限の一覧については、Cloud Trace の IAM ロールをご覧ください。

OpenTelemetry を使用するように Go アプリを更新した後のトレースデータがない

アプリケーションがトレースをキャプチャするためにクライアント ライブラリを使用しており、OpenTelemetry を使用するようにアプリケーションを更新した後、Cloud Trace データが表示されなくなりました。

Go 用の一部の Google クライアント ライブラリは OpenCensus と統合されているため、OpenCensus ブリッジを使用する必要があります。ブリッジで解決される問題の詳細については、OpenCensus Bridge をご覧ください。

Go 用 Google クライアント ライブラリの更新については、問題 #4237 をご覧ください。

デプロイされたアプリのトレースデータがない

Cloud Trace API を使用して Google Cloud プロジェクトにデータを送信するアプリをデプロイしましたが、トレースデータが収集されません。

次のようにしてください。

  • Google Cloud コンソールの [Trace エクスプローラ] ページをにデータが表示されない場合は、Trace インターフェースにデータがないというタイトルのセクションの手順に沿って作業します。

  • アプリが Google Cloud にデプロイされていない場合や、サービス アカウントを使用して認証情報を提供する場合は、サービス アカウントに Cloud Trace エージェント(roles/cloudtrace.agent)のロールが付与されていることを確認してください。

    このロールには、アプリケーションがスパンデータを Google Cloud プロジェクトに書き込むことができる権限 cloudtrace.traces.patch が含まれています。

  • アプリが OpenTelemetry に依存している場合は、次のようにします。

    • ルートサービスの場合、OpenTelemetry がサンプリング レート 0.5traceidratio サンプラーを使用するように、環境変数の更新を試みます。

      export OTEL_TRACES_SAMPLER="traceidratio"
      export OTEL_TRACES_SAMPLER_ARG="0.5"
      
    • 他のすべてのサービスでは、デフォルトのサンプラー(parentbased_always_on)を使用するように、OTEL_TRACES_SAMPLER 環境変数を未設定のままにします。デフォルトの設定では、スパンのサンプリング決定は、親スパン(存在する場合)から継承されます。親スパンが存在しない場合、スパンはサンプリングされます。

    アプリケーションが常にすべてのスパンをサンプリングしない限り、一般に、リクエストをエンドツーエンドでトレースすることはできません。それは、エンドツーエンド リクエストの各コンポーネントはサンプリングの決定を独自に行うためです。ただし、トレース ヘッダーに sampled フラグを追加し、このフラグを true に設定することで、この決定に影響を与えることができます。この設定は、リクエストをサンプリングするように子コンポーネントにヒントを与えます。トレース ヘッダーの詳細については、コンテキスト伝播のプロトコルをご覧ください。

トレースにスパン ID メッセージが見つからない

トレースに「スパン ID が見つかりません」というメッセージが含まれています。

分散トレース システムでは、不完全なトレースが想定されます。サンプリングされたスパンに、受信されていない別のスパンへの参照が含まれている場合、トレースは不完全です。未解決の参照は、次の理由で発生する可能性があります。

  • 参照されたスパンがサンプリングされませんでした。
  • 参照されたスパンがサンプリングされましたが、Cloud Trace でまだ受信されていないか、スパンを受信したが保存されていません。

不完全なトレースを表示すると、Cloud Trace のトレースの詳細ペインに「Missing span ID」というメッセージが表示されます。

「スパン ID がありません」というメッセージが常に表示される場合は、次のことをお試しください。

  • 管理するコンポーネントでは、このフィールドが存在する場合、ヘッダーの sampled フラグを尊重し、伝播するようにしてください。この設定は、リクエストをサンプリングするように子コンポーネントにヒントを与えます。トレース ヘッダーの詳細については、コンテキスト伝播のプロトコルをご覧ください。

    通常、Google Cloud サービスでは、このヒントが尊重されます。ただし、トレースデータの書き込みレートも制限されます。

  • Cloud Service Mesh を使用している場合は、それらの構成におけるトレース コンテキストの伝播についてのガイダンスに従ってください。Cloud Service Mesh のガイダンスについては、トレース コンテキストの伝播をご覧ください。