トラブルシューティング

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

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

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

  1. Enable the required 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 クライアント ライブラリの更新については、Issue #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"
      
    • 他のすべてのサービスでは、OTEL_TRACES_SAMPLER 環境変数を設定せずに、デフォルトのサンプラー(parentbased_always_on)を使用します。デフォルト設定では、スパンのサンプリング決定が親スパンから継承されます(そのようなスパンが存在する場合)。親スパンが存在しない場合は、スパンがサンプリングされます。

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

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

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

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

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

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

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

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

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

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