クイックスタート

このクイックスタートでは、Cloud Shell を使用してサンプル アプリケーションを Google Kubernetes Engine(GKE)クラスタにデプロイします。このアプリケーションは Python で記述されています。デプロイが完了したら、curl を使用して HTTP リクエストを発行します。このアクションを行うと、トレースがキャプチャされ、Google Cloud プロジェクトに送信されます。最後に、Cloud Trace インターフェースを使用して、生成したトレースのレイテンシ情報を表示します。

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

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

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

  3. Google 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. 次のコマンドを実行して、サンプル アプリケーションをデプロイします。

    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 つ以上のスパンによって構成されます。スパンは、完全なサブオペレーションの実行にかかる時間を表します。たとえば、トレースは、ユーザーからの受信リクエストを処理してレスポンスを返すまでにかかる時間を表します。スパンは、特定の 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

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

  • アプリケーションの 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
    

次のステップ