アプリ リクエストのレイテンシを表示する
アプリケーションからレイテンシ データを収集して表示する方法について説明します。
Google Cloud CLI を使用して Google Kubernetes Engine(GKE)クラスタを作成する。
サンプル アプリケーションをダウンロードしてクラスタにデプロイする。
サンプル アプリケーションに HTTP リクエストを送信してトレースを作成する。
作成したトレースのレイテンシ情報を表示する。
クリーンアップする。
このタスクを Google Cloud コンソールで直接行う際の順を追ったガイダンスについては、「ガイドを表示」をクリックしてください。
始める前に
-
組織で定義されているセキュリティの制約により、次の手順を完了できない場合があります。トラブルシューティング情報については、制約のある Google Cloud 環境でアプリケーションを開発するをご覧ください。
- Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Google Kubernetes Engine and Cloud Trace API を有効にします。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Google Kubernetes Engine and Cloud Trace API を有効にします。
GKE クラスタを作成する
ツールバーで、[terminal
Cloud Shell をアクティブにする ] をクリックして、Cloud Shell で次の操作を行います。クラスタを作成します。
gcloud container clusters create cloud-trace-demo --zone us-central1-c
上記のコマンド(完了するまでに数分かかる)により、
us-central1-c
ゾーンにcloud-trace-demo
という名前の標準クラスタが作成されます。Google Cloud CLI と同じ ID を使用するように認証情報を自動的に更新するように
kubectl
を構成します。gcloud container clusters get-credentials cloud-trace-demo --zone us-central1-c
クラスタへのアクセスを確認します。
kubectl get nodes
このコマンドの出力例は次のとおりです。
NAME STATUS ROLES AGE VERSION gke-cloud-trace-demo-default-pool-063c0416-113s Ready <none> 78s v1.22.12-gke.2300 gke-cloud-trace-demo-default-pool-063c0416-1n27 Ready <none> 79s v1.22.12-gke.2300 gke-cloud-trace-demo-default-pool-063c0416-frkd Ready <none> 78s v1.22.12-gke.2300
アプリケーションのダウンロードとデプロイ
Flask フレームワークと OpenTelemetry パッケージを使用する Python アプリケーションをダウンロードしてデプロイします。このアプリケーションについては、このページのアプリについてのセクションをご覧ください。
Cloud Shell で、次の操作を行います。
GitHub から Python アプリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
次のコマンドを実行して、サンプル アプリケーションをデプロイします。
cd python-docs-samples/trace/cloud-trace-demo-app-opentelemetry && ./setup.sh
setup.sh
スクリプトが完了するまでに数分かかります。このスクリプトは、事前にビルドされたイメージを使用して 3 つのサービスを構成し、すべてのリソースがプロビジョニングされるのを待ちます。ワークロードの名前は
cloud-trace-demo-a
、cloud-trace-demo-b
、cloud-trace-demo-c
です。このコマンドの出力例は次のとおりです。
deployment.apps/cloud-trace-demo-a is created service/cloud-trace-demo-a is created deployment.apps/cloud-trace-demo-b is created service/cloud-trace-demo-b is created deployment.apps/cloud-trace-demo-c is created service/cloud-trace-demo-c is created Wait for load balancer initialization complete...... Completed.
トレースデータを作成する
1 件のトレースは、アプリケーションが 1 つのオペレーションを完了するまでにかかる時間を表します。
トレースを作成するには、Cloud Shell で次のコマンドを実行します。
curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].status.loadBalancer.ingress[0].ip}')
前のコマンドのレスポンスは次のようになります。
Hello, I am service A
And I am service B
Hello, I am service C
curl
コマンドを複数回実行すると、複数のトレースを生成できます。
レイテンシ データを表示する
-
Google Cloud コンソールのナビゲーション パネルで [Trace] を選択し、次に [ Trace エクスプローラ] を選択します。
各トレースは、グラフ上のドットと表内の行で表されます。
次のスクリーンショットは、複数のトレースを示しています。
トレースの詳細を表示するには、グラフ内のドットまたは表内の行を選択します。
散布図が更新され、選択したドットが円で囲まれてハイライト表示されます。他のすべてのトレースを表す他のすべてのドットはグレー表示されます。
ガントチャートには、選択したトレースに関する情報が表示されます。ガントチャートの最初の行はトレース用であり、トレース内の各スパンに対して 1 行が存在します。1 つのスパンは、1 つのサブオペレーション全体の実行にかかる時間を表します。
スパンに関する詳細情報を表示するには、ガントチャートでスパンを選択します。
アプリケーションの概要
このクイックスタートで使用するサンプル アプリケーションは、GitHub リポジトリで入手できます。このリポジトリには、Cloud Shell 以外の環境でアプリケーションを使用する方法に関する情報が含まれています。サンプル アプリケーションは Python で記述されており、Flask フレームワークと OpenTelemetry パッケージを使用して、GKE クラスタ上で実行されます。
インストゥルメンテーション
GitHub リポジトリのファイル app.py
には、トレースデータをキャプチャして Google Cloud プロジェクトに送信するために必要なインストゥルメンテーションが含まれています。
アプリケーションはいくつかの OpenTelemetry パッケージをインポートします。
このアプリケーションは、トレース コンテキストでウェブ リクエストを処理し、他のサービスに対するリクエストや Flask ハンドラを自動的にトレースします。
このアプリケーションでは、Cloud Trace エクスポータをトレース プロバイダとして構成し、トレース コンテキストを Cloud Trace 形式で伝播します。
次のコード スニペットは、Python でリクエストを送信する方法を示しています。 OpenTelemetry は、送信リクエストとともにトレース コンテキストを暗黙的に伝播します。
アプリケーションの仕組み
わかりやすくするために、このセクションではサービス名から cloud-trace-demo
を省略しています。たとえば、サービス cloud-trace-demo-c
は c
として参照されます。
このアプリケーションは、a
、b
、c
という名前の 3 つのサービスを作成します。サービス a
はサービス b
を呼び出すように設定されており、サービス b
はサービス c
を呼び出すように設定されています。サービスの構成の詳細については、GitHub リポジトリの YAML ファイルをご覧ください。
このクイックスタートでサービス a
に HTTP リクエストを発行したときに、次の curl
コマンドを使用しました。
curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].status.loadBalancer.ingress[0].ip}')
curl
コマンドは次のように動作します。
kubectl
によって、cloud-trace-demo-a
という名前のサービスの IP アドレスが取得されます。- 次に、
curl
コマンドによってサービスa
に HTTP リクエストが送信されます。 - サービス
a
は HTTP リクエストを受信し、サービスb
にリクエストを送信します。 - サービス
b
は HTTP リクエストを受信し、サービスc
にリクエストを送信します。 - サービス
c
はサービスb
から HTTP リクエストを受け取り、文字列Hello, I am service C
をサービスb
に返します。 - サービス
b
はサービスc
からレスポンスを受信し、これを文字列And I am service B
に追加して結果をサービスa
に返します。 - サービス
a
はサービスb
からレスポンスを受信し、これを文字列Hello, I am service A
に追加します。 - サービス
a
からのレスポンスが Cloud Shell に出力されます。
クリーンアップ
このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を行います。
新しいプロジェクトを作成し、プロジェクトがもう必要でなくなった場合は、プロジェクトを削除します。
既存のプロジェクトを使用した場合は、次の手順を行います。
クラスタを削除するには、Cloud Shell で次のコマンドを実行します。
gcloud container clusters delete cloud-trace-demo --zone us-central1-c
次のステップ
- サポートされている言語とプラットフォームについては、Cloud Trace の概要をご覧ください。
アプリケーションを計測可能にする方法の詳細については、以下をご覧ください。
[Trace エクスプローラ] ウィンドウの詳細については、トレースを検索して表示するをご覧ください。
GKE クラスタの管理の詳細については、kubectl をご覧ください。