クイックスタート

次の操作を行って、Cloud Trace の使用方法を学習します。

  1. サンプル アプリケーションを Google Kubernetes Engine(GKE)クラスタにデプロイする。

  2. サンプル アプリケーションに HTTP リクエストを送信してトレースを作成する。

  3. Cloud Trace インターフェースを使用して、作成したトレースのレイテンシ情報を表示する。


このタスクを Cloud Console で直接行う際の順を追ったガイダンスについては、[ガイドを表示] をクリックしてください。

ガイドを表示


以降のセクションでは、[ガイドを表示] をクリックした場合と同じ手順について説明します。

始める前に

組織が Google Cloud 環境に制約を適用すると、このドキュメントの一部の手順が正しく機能しない場合があります。その場合、パブリック IP アドレスやサービス アカウント キーを作成するようなタスクを完了できない場合があります。制約に関するエラーを返すリクエストを行う場合は、制約がある Google Cloud 環境でアプリケーションを開発する方法をご覧ください。

課金を有効にしてプロジェクトを作成します。

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  5. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する

アプリケーションのダウンロードとデプロイ

アプリケーションをダウンロードしてデプロイする方法は次のとおりです。

  1. Cloud Shell を開くには、Google Cloud Console のツールバーで [Cloud Shell をアクティブにする] をクリックします。

    Cloud Shell をアクティブにします。

    しばらくすると、Google Cloud Console 内で Cloud Shell セッションが開きます。

    Cloud Shell セッション。

  2. GitHub からソースコードをダウンロードするには、次のコマンドを実行します。

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  3. Google Kubernetes Engine API を有効にするには、Cloud Shell で次のコマンドを発行します。

    gcloud services enable container.googleapis.com
    
  4. demo という名前の GKE クラスタを作成するには、Cloud Shell で次のコマンドを実行します。

    gcloud container clusters create demo --zone us-west1-b
    

    このコマンドが完了するまでに 3~5 分かかります。正常に完了すると、Google Cloud プロジェクトに demo という名前の GKE クラスタが含まれます。Google Cloud プロジェクトで外部アクセス権を持つクラスタを作成する権限が必要です。Google Cloud が組織またはフォルダ内にある場合、プロジェクト オーナーであっても、これらの権限がない可能性があります。このコマンドが失敗した場合、システム管理者にお問い合わせください。

  5. 正常に作成されたことを確認するには、次の kubectl コマンドを実行します。

    kubectl get nodes
    

    このコマンドの出力例は次のとおりです。

    NAME                                  STATUS   ROLES    AGE   VERSION
    gke-demo-default-pool-24680f3d-bzvg   Ready    <none>   26m   v1.14.10-gke.27
    gke-demo-default-pool-24680f3d-hfnq   Ready    <none>   26m   v1.14.10-gke.27
    gke-demo-default-pool-24680f3d-qnh6   Ready    <none>   26m   v1.14.10-gke.27
    
  6. クラスタ コンテキストを設定するには、次のコマンドを実行します。

    gcloud container clusters get-credentials demo --zone us-west1-b
    
  7. 次のコマンドを実行して、サンプル アプリケーションをデプロイします。

    cd python-docs-samples/trace/cloud-trace-demo-app && ./setup.sh
    

    このプロジェクトの一部であるスクリプト setup.sh は、cloud-trace-demo-acloud-trace-demo-bcloud-trace-demo-c というラベルの付いた 3 つの異なるサービスを構成します。セットアップ スクリプトは一度に 1 つのサービスを構成するため、構成が完了するまでに数分かかります。実行中にスクリプトが Cloud Shell に出力する内容の例を次に示します。

     Creating service a
     deployment.apps/cloud-trace-demo-a unchanged
     service/cloud-trace-demo-a unchanged
     Fetching the external IP of service a
     Passing external IP for the first service 34.82.132.95 to the second service template
     deployment.apps/cloud-trace-demo-b created
     service/cloud-trace-demo-b created
     Fetching the external IP of service b
     Passing external IP for the service b 35.230.0.131 to the service c
     deployment.apps/cloud-trace-demo-c created
     service/cloud-trace-demo-c created
     

トレースを作成する

1 件のトレースは、アプリケーションが 1 つのオペレーションを完了するまでにかかる時間を表します。各トレースは、1 つ以上のスパンから構成されます。1 つのスパンは、1 つのサブオペレーション全体の実行にかかる時間を表します。たとえば、ユーザーから受信リクエストを処理してレスポンスを返すまでにかかる時間を 1 件のトレースで表すことができます。スパンは、特定の RPC 呼び出しに必要な時間を表す場合もあります。詳細については、Cloud Trace のデータモデルをご覧ください。

トレースを作成するには、次のコマンドを実行します。

curl $(kubectl get svc cloud-trace-demo-c -ojsonpath='{.status.loadBalancer.ingress[0].ip}')

curl コマンドによって、HTTP GET リクエストが生成され、cloud-trace-demo-c という名前のサービスに送信されます。このリクエストが完了すると、Helloworld! がシェルに出力されます。

curl コマンドを複数回実行すると、複数のトレースを生成できます。

トレースデータを表示する

Cloud Trace インターフェースを開くには、Google Cloud Console で [ナビゲーション メニュー] をクリックし、[トレース] を選択するか、次のボタンをクリックします。

[トレース] に移動

概要ウィンドウ

[概要] ウィンドウが Trace のデフォルト ビューです。 このウィンドウには、分析レポートなどのレイテンシ データとサマリー情報が表示されます。新しいプロジェクトを作成した場合、[概要] ウィンドウの最も興味深いペインは [最近のトレース] というラベルが付いたペインです。

[最近のトレース] ペイン。最新のトレースとそのレイテンシが表示されます。

このペインには、最新のトレースとそのレイテンシが一覧表示されます。トレースの詳細を表示するには、当該トレースのリンクをクリックします。

トレースリスト ウィンドウ

[トレース] ナビゲーション ペインで、[ トレースリスト] をクリックします。

クイックスタートのトレースリスト ウィンドウ。

このウィンドウにはグラフと表が表示されます。グラフ上の各ドットはトレースを表します。また、各ドットはテーブルの行と対応します。上のスクリーンショットでは、curl コマンドが複数回実行されたことを示す複数のトレースが表示されています。

トレースを詳細に表示するには、グラフ内のドットまたは表内の行を選択します。 この操作により 2 つのペインが開き、選択したトレースの詳細が表示されます。

クイックスタートでのウォーターフォールの表示。

1 つのペインにトレースがウォーターフォール グラフで表示され、そのペインに詳細が表示されます。ウォーターフォール グラフの各行はスパンに対応しています。トレースラベル、メソッド、コマンド レイテンシに関する概要情報など、スパンの詳細が詳細テーブルに表示されます。スパンについての詳細を表示するには、ウォーターフォール グラフで対応する行をクリックします。スパンは 3 つの異なる IP アドレス用であり、これらは、3 つのサービスの IP アドレスに対応することに注意してください。このトレースから、サービス名 cloud-trace-demo-c によって受信された HTTP リクエストが、サービス cloud-trace-demo-b に渡され、それから cloud-trace-demo-a に渡されることがわかります。

詳細の表には、Cloud Logging に送信されたデータへのリンクが含まれる場合があります。Cloud Logging インターフェースに情報を表示するには、[表示] をクリックします。次のスクリーンショットは、トレース データによって生成されたログの例を示しています。

クイックスタートからのトレースの LogEntry。

ウォーターフォール ビューに表示される IP アドレスは、cloud-trace-demo-acloud-trace-demo-b という名前のサービスの IP アドレスに対応しています。

分析レポート ウィンドウ

レポートを表示または作成するには、[トレース] ナビゲーション パネルで [分析レポート] をクリックします。トレースにより日次レポートが自動的に作成されます。このプロジェクトの場合、新しいレポートを作成するのに十分なデータがありません。

アプリケーションの概要

このクイックスタートで使用するサンプル アプリケーションは、GitHub リポジトリで入手できます。このリポジトリには、Cloud Shell 以外の環境でアプリケーションを使用する方法に関する情報が含まれています。サンプル アプリケーションは Python で記述されており、Flask フレームワークと OpenCensus パッケージを使用して、Google Kubernetes Engine クラスタ上で実行されます。

アプリケーション作成者は Flask フレームワークを使用することを選択しました。これを使用するとアプリケーション開発が簡略化され、アプリケーション作成者が OpenCensus Flask ミドルウェアを使用することを希望していたためです。Python を使用している場合は、Flask フレームワークを使用する必要はありません。

インストゥルメンテーション

GitHub リポジトリのファイル app.py には、トレースデータをキャプチャして Google Cloud プロジェクトに送信するために必要なインストゥルメンテーションが含まれています。

  • アプリケーションのインポート ステートメントには、Flask といくつかの OpenCensus パッケージのステートメントが含まれています。StackdriverExporter は、トレースデータを Google Cloud プロジェクトに送信するオブジェクトです。

    from flask import Flask
    from opencensus.ext.flask.flask_middleware import FlaskMiddleware
    from opencensus.ext.stackdriver.trace_exporter import StackdriverExporter
    from opencensus.trace import execution_context
    from opencensus.trace.propagation import google_cloud_format
    from opencensus.trace.samplers import AlwaysOnSampler
  • このアプリケーションによって、Flask を HTTP フレームワークとして使用するミドルウェア コンポーネントが作成されます。

    propagator = google_cloud_format.GoogleCloudFormatPropagator()
    
    def createMiddleWare(exporter):
        # Configure a flask middleware that listens for each request and applies automatic tracing.
        # This needs to be set up before the application starts.
        middleware = FlaskMiddleware(
            app,
            exporter=exporter,
            propagator=propagator,
            sampler=AlwaysOnSampler())
        return middleware

    このアプリケーションでは、フィールド sampler は OpenCensus メソッド AlwaysOnSampler() によって設定されます。このメソッドは、サンプリングの決定ごとに True を返し、すべてのリクエストがトレースされるようにします。本番環境では、すべてのリクエストをサンプリングすることはおすすめしません。詳細については、サンプリング レートをご覧ください。

  • アプリケーションの main 関数で、StackdriverExporter() を使用する Flask ミドルウェアを作成します。

    createMiddleWare(StackdriverExporter())
  • アプリケーションに不要な変更がもう 1 つあります。この変更はどちらかといえば説明的なものです。アプリケーションでは、ルート / へのレスポンスに X-Cloud-Trace-Context ヘッダーが含まれます。

    trace_context_header = propagator.to_header(execution_context.get_opencensus_tracer().span_context)
    response = requests.get(
        url,
        params=data,
        headers={
          'X-Cloud-Trace-Context' : trace_context_header}
    )

    X-Cloud-Trace-Context ヘッダーは、トレース ID など現在のトレースに関する情報を含む HTTP ヘッダーです。複数のサービスがスパン情報を同じトレースに追加できるようにするには、これらのサービスがトレース ID を識別できる必要があります。デフォルトでは、OpenCensus パッケージはこのコンテキストを自動的にレスポンス ヘッダーに含めます。

アプリケーションの仕組み

わかりやすくするために、このセクションではサービス名から cloud-trace-demo を省略しています。たとえば、サービス cloud-trace-demo-cc として参照されます。

このアプリケーションは、abc の 3 つのサービスを作成します。これは、サービス c がサービス b を呼び出すように構成し、サービス b がサービス a を呼び出すように構成します。サービスの構成の詳細については、GitHub リポジトリの YAML ファイルをご覧ください。

このクイックスタートでサービス c に HTTP リクエストを発行したときに、次の curl コマンドを使用しました。

curl $(kubectl get svc cloud-trace-demo-c -ojsonpath='{.status.loadBalancer.ingress[0].ip}')

curl コマンドは次のように動作します。

  1. kubectl によって、cloud-trace-demo-c という名前のサービスの IP アドレスが取得されます。
  2. 次に、curl コマンドによってサービス c に HTTP リクエストが送信されます。
  3. サービス c は HTTP リクエストを受信し、サービス b にリクエストを送信します。
  4. サービス b は HTTP リクエストを受信し、サービス a にリクエストを送信します。
  5. サービス a はリクエストを受信し、文字列 Hello を返します。文字列 Hello は、このサービスにデフォルトの引数として渡されるキーワードです。
  6. サービス b はサービス a からレスポンスを受信し、文字列 world を追加して Helloworld を返します。文字列 world は、このサービスにデフォルトの引数として渡されるキーワードです。
  7. サービス c はサービス b からレスポンスを受信し、! を追加して Helloworld! を返します。
  8. サービス c からのレスポンスが Cloud Shell に出力されます。

クリーンアップ

このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を行います。

  • このクイックスタートで新しい Google Cloud プロジェクトを作成した場合は、課金が発生しないようにプロジェクトを削除します。プロジェクトを削除するには、次の手順を行います。

    1. Google Cloud Console で [ナビゲーション メニュー] をクリックし、[ホーム] を選択します
    2. [プロジェクト情報] ペインで、[プロジェクト設定に移動] をクリックします。
    3. [設定] ウィンドウで [シャットダウン] をクリックし、残りの手順を完了します。
  • このクイックスタートで新しい Google Cloud プロジェクトを作成しなかった場合は、次のコマンドを実行して demo という名前の Google Kubernetes Engine クラスタを削除します。

    gcloud container clusters delete demo --zone us-west1-b
    

次のステップ