
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
Use Terraform to set up the necessary infrastructure
/ 50
Deploy demo application
/ 25
Generate Telemetry Data
/ 25
HTTP リクエストを処理したり、API を提供したりする本番環境システムをサポートする際には、エンドポイントのレイテンシを測定して、システムのパフォーマンスが仕様の範囲から外れたタイミングを検出することが重要です。モノリシック システムでは、こうした単一のレイテンシ測定が動作の問題の検出および診断に役立つ場合があります。ただし、最新のマイクロサービス アーキテクチャでは、1 回のリクエストが完全に処理されるまでに、そのリクエストから他のシステムに対する多数の追加リクエストが発生するため、こうした測定はずっと困難になります。
基盤となるシステムでパフォーマンスが悪化すると、そのシステムに依存しているその他すべてのシステムにも影響が及ぶ可能性があります。レイテンシはサービス エンドポイントごとに測定できますが、パブリック エンドポイントでの動作速度の低下を、動作に問題がある特定のサブサービスと相互に関連付けることは困難な場合があります。
次に、分散トレースについて説明します。分散トレースでは、リクエストと一緒に渡されたメタデータを使用して、サービス階層間でリクエストを相互に関連付けます。マイクロサービス アーキテクチャですべてのサービスからテレメトリー データを収集し、最初のリクエストのトレース ID をすべての従属リクエストに伝播すると、デベロッパーは、どのサービスが速度の低下を引き起こしてシステムの残り部分に影響を及ぼしているかをずっと容易に特定できます。
Google Cloud には、ロギング、モニタリング、分散トレースに対応するプロダクト スイートの Operations が用意されています。このラボでは、Kubernetes Engine へのデプロイを取り上げ、分散トレースを実装している多層アーキテクチャの具体例を示します。また、Terraform を利用して、必要なインフラストラクチャを構築します。
このラボは、GKE Binary Authorization に関する理解を深めていただくために GKE Helmsman のエンジニアによって作成されました。デモは、Cloud Shell で gsutil cp -r gs://spls/gke-binary-auth/* .
および cd gke-binary-auth-demo
コマンドを実行するとご覧いただけます。このアセットへのコントリビューションをぜひお寄せください。
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。 左側の [ラボの詳細] ペインには、以下が表示されます。
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
[ラボの詳細] ペインでもユーザー名を確認できます。
[次へ] をクリックします。
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
[ラボの詳細] ペインでもパスワードを確認できます。
[次へ] をクリックします。
その後次のように進みます。
その後、このタブで Google Cloud コンソールが開きます。
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
[承認] をクリックします。
出力は次のようになります。
出力:
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
一部の Compute Engine リソースは、リージョン内やゾーン内に存在します。リージョンとは、リソースを実行できる特定の地理的位置です。1 つのリージョンには 1 つ以上のゾーンがあります。
次のコマンドを実行して、ラボのリージョンとゾーンを設定します(最適なリージョンとゾーンを使用できます)。
このラボでは、最初に Kubernetes Engine クラスタをデプロイします。その後、このクラスタに対し、前段にロードバランサを伴う簡単なウェブ アプリケーションをデプロイします。このウェブアプリは、ユーザーが指定したメッセージを Cloud Pub/Sub トピックに公開します。このアプリケーションは計測可能になっており、自らに対する HTTP リクエストが結果としてトレースの作成につながり、そのトレースのコンテキストが Cloud Pub/Sub パブリッシュ API リクエストに反映されます。こうしたリクエストから得られる相互に関連するテレメトリー データは、Cloud Trace コンソールで参照できます。
Terraform は、Infrastructure as Code と不変のインフラの原則に従い、インフラストラクチャの望ましい状態を宣言型で記述することをサポートします。記述子を適用すると、Terraform は Google Cloud APIs を使用して、一致するリソースのプロビジョニングと更新を行います。Terraform は望ましい状態と現在の状態を比較することにより、すべてを削除してやり直さなくても増分変更を行うことができます。たとえば、Terraform は Google Cloud プロジェクトやコンピュート インスタンスなどの作成、Kubernetes Engine クラスタの設定とそのクラスタへのアプリケーションのデプロイも行うことができます。要件が変わった場合は記述子を変更すると、Terraform はそれに応じてクラウド インフラストラクチャを調整します。
この例では、Terraform を使用して Kubernetes Engine クラスタを起動します。その後、Kubernetes コマンドを使用して、このクラスタにデモ アプリケーションをデプロイします。 デフォルトでは、Google Cloud 内の Kubernetes Engine クラスタは、事前に構成された Fluentd ベースのコレクタとともに起動します。このコレクタは、該当するクラスタのロギング イベントを Cloud Monitoring に転送します。このデモアプリを操作すると、Cloud Trace UI に表示されるトレース イベントが生成されます。
このデモには、3 つの Terraform ファイルが付属します。これらのファイルは、プロジェクトの /terraform
サブディレクトリにあります。最初の main.tf
ファイルは Terraform を使うための出発点です。このファイルは、使用される機能、操作されるリソース、結果として得られる出力を記述します。2 番目のファイルは provider.tf
です。このファイルは、どのクラウド プロバイダおよびバージョンが Terraform コマンドのターゲットになるか(今回は Google Cloud)を示します。最後のファイル variables.tf
には、Terraform への入力として使用される変数のリストが格納されています。main.tf
で参照されている変数のうち、デフォルト設定が variables.tf
で構成されていないものについては、実行時にプロンプトが表示されます。
認証が前述のように構成されていた場合は、インフラストラクチャのデプロイを今すぐ開始できます。
provider.tf
スクリプト ファイルから Terraform のプロバイダ バージョンを削除します。
provider.tf
スクリプト ファイルを編集します。google
プロバイダの静的バージョン文字列がある場合は削除します。変更後の provider.tf
スクリプト ファイルは次のようになります。
この場所から Terraform の初期化を行います。
すると、Terraform に必要な依存関係として、デモ アプリケーションのデプロイ先となる Google Cloud プロジェクトと Google Cloud ゾーンがダウンロードされます。Terraform 側でこれらの値が不明の場合は、その入力を求めるメッセージが表示されます。デフォルトでは、Terraform が terraform.tfvars
というファイル、または接尾辞 .auto.tfvars
の付いたファイルを現在のディレクトリ内で探して、これらの値を取得します。
このデモには、プロジェクトおよびゾーンの指定を促し、それらの値を terraform.tfvars
ファイルに保存する、便利なスクリプトが用意されています。
このスクリプトは、gcloud
コマンドから得られる事前に構成された値を使用します。そうした値が構成されていない場合は、その設定方法を示すエラー メッセージが表示されます。既存の値は、次のコマンドによって表示できます。
terraform.tfvars
ファイル内の値を適切な値に変更します。このコマンドを使用すると、設定が正しいことを視覚的に確認できます。エラーが検出された場合にはそれも確認できます。必須ではありませんが、Terraform を使用しているインフラストラクチャの変更前には、必ずこのコマンドを実行することをおすすめします。
行われる変更の内容が表示され、yes
による確認を求められます。
ビルドの完了を待っている間に、このラボの後半で使用する Cloud Monitoring ワークスペースを設定します。
[進行状況を確認] をクリックして、実行したタスクを確認します。Terraform に必要なインフラストラクチャが正常にデプロイされていれば、評価スコアが表示されます。
Google Cloud プロジェクトに関連付けられた Monitoring の指標スコープを設定します。次の手順に沿って、Monitoring を無料でお試しいただける新しいアカウントを作成します。
Monitoring の [概要] ページが開いたら、指標スコープのプロジェクトの準備は完了です。
Cloud Shell に戻って「Apply complete!
」というメッセージが表示されたら、コンソールに戻ります。
ナビゲーション メニューで、[Kubernetes Engine] > [クラスタ] の順に選択してクラスタを表示します。
ナビゲーション メニューをクリックし、[分析] セクションが表示されるまで下方向にスクロールし、[Pub/Sub] をクリックして [トピック] と [サブスクリプション] を確認します。
ここで、Kubernetes の kubectl
コマンドを使用してデモ アプリケーションをデプロイします。
デプロイしたアプリケーションは、[Kubernetes Engine] > [ワークロード] で確認できます。また、このアプリケーション用に作成されたロードバランサは、コンソールの [Services と Ingress] セクションで確認できます。
下の画像のように「Does not have minimum availability」というステータスが [ワークロード] コンソールに表示されると、アプリケーションがデプロイされるまでに数分かかる場合があります。
ちなみに、次のコマンドを使用すると、エンドポイントをプログラムによって取得できます。
[進行状況を確認] をクリックして、実行したタスクを確認します。デモ アプリケーションが正常にデプロイされている場合は、評価スコアが表示されます。
デモ アプリケーションのデプロイが完了すると、公開サービスのリストが表示されるはずです。
tracing-demo
というロードバランサの横に表示されているエンドポイントをクリックすると、ブラウザの新しいタブでデモアプリのウェブページが開きます。なお、実際に表示される IP アドレスは、おそらく上の例とは異なるものになります。表示されるページは、次のように単純なものです。
?string=CustomMessage
という文字列を追加し、メッセージが表示されるようにします。ご覧のように、string
パラメータが指定されていない場合には、デフォルト値 Hello World
が使用されます。このアプリは、トレース テレメトリー データの生成に使用されます。
[進行状況を確認] をクリックして、実行したタスクを確認します。テレメトリー データが正常に生成されている場合は、評価スコアが表示されます。
コンソールで、ナビゲーション メニュー > [トレース] > [Trace エクスプローラ] を選択します。縦軸の指標をレイテンシとしてタイムライン上にトレース イベントがプロットされたグラフが表示されるはずです。
[自動再読み込み] 切り替えボタンをクリックして、最新のデータを表示します。
上のバーは、ルートスパンと呼ばれ、HTTP リクエストの期間、すなわちリクエストの最初のバイトが到着してからレスポンスの最後のバイトが送信されるまでの時間を表します。下のバーは、メッセージを Pub/Sub トピックに送信する際に行われたリクエストの期間を表します。
HTTP リクエストの処理は Pub/Sub API の呼び出しによってブロックされるので、HTTP リクエストの期間内に費やされる時間のほとんどを Pub/Sub インタラクションが占めていることは明らかです。つまり、アプリケーションの各層を計測可能にすることで、ボトルネックがどこにあるかを容易に特定できます。
このドキュメントの「アーキテクチャ」セクションで述べたように、デモアプリで生成されたメッセージは Pub/Sub トピックに公開されます。
こうしたメッセージは、gcloud
CLI を使用してトピックから消費できます。
出力:
メッセージをトピックから pull しても、トレースにはまったく影響しません。ここでは、確認のためにメッセージの消費者を示しただけです。
Cloud によるモニタリングとロギングは今回のデモの範囲外ですが、デプロイしたアプリケーションが Cloud Logging にログを、Cloud Monitoring に指標をそれぞれ公開することは知っておくとよいでしょう。
コンソールで、ナビゲーション メニュー > [Monitoring] > [Metrics Explorer] を選択します。
[指標を選択してください] フィールドで [VM インスタンス] > [インスタンス] > [CPU 使用率] を選択し、[適用] をクリックします。
クラスタで実行中の各 Pod について、この指標をプロットしたグラフが表示されるはずです。
ログを表示するには、ナビゲーション メニュー > [ロギング] を選択します。
[ログのフィールド] セクションで、次のように設定します。
Kubernetes Container
tracing-demo-space
default
考えられるいくつかのエラーは kubectl
コマンドを使用して診断できます。
たとえば、デプロイは次のようにして表示できます。
出力:
describe
を指定すると、より詳細な情報を表示できます。
次のコマンドは、デプロイ済み Pod のリストを表示します。
出力:
この場合も、describe
によって Pod の詳細を確認できます。
Pod 名を次のステップ用にメモします。
Pod 名がわかったら、その名前を使用してログをローカルで表示します。
出力:
Terraform の実行中に、インストール スクリプトの実行が「アクセスが拒否されました
」というエラーで失敗することがあります。
Terraform で使用している認証情報には、選択されているプロジェクトでリソースを作成するのに必要な権限がありません。gcloud config list
で表示されるアカウントに、リソースの作成に必要な権限があることを確認してください。権限がある場合は、gcloud auth application-default login
を実行してアプリケーションのデフォルト認証情報を生成し直してください。
apply
の場合と同様、yes
による確認を求めるメッセージが Terraform によって表示されます。
Terraform は作成したリソースのトラッキングを行っているので、クラスタ、Pub/Sub トピック、Pub/Sub サブスクリプションを破棄することができます。
以下に、さらに詳しく調査するための関連資料を示します。
Kubernetes とは、マイクロサービス アーキテクチャでよく使用されるコンテナ オーケストレーション プラットフォームです。Google Cloud には、Kubernetes Engine というマネージド バージョンの Kubernetes が用意されています。
OpenCensus は、トレース テレメトリー データのキャプチャおよび公開のための標準化されたライブラリを提供しています。ライブラリは使用頻度の高い複数の言語で提供され、Cloud Monitoring や Zipkin など、多数のトレース プラットフォームがサポートされています。このドキュメントで説明したデモは、OpenCensus を使用してテレメトリー データを Cloud Monitoring に公開しています。
Spring Sleuth は、広く普及している Spring フレームワークを使用した Java アプリケーションの計測手法を提供します。Spring Sleuth は分散トレース テレメトリー コレクタに対する抽象化をサポートしているので、デベロッパーは Zipkin や Cloud Monitoring、その他のトレース エンジンの切り替えをシームレスに行うことができます。
Operations は、ロギング、モニタリング、トレース、関連機能を提供する Google Cloud のツールスイートです。このドキュメントとデモでは、Cloud が提供する Cloud Trace 機能に重点が置かれています。
Terraform は宣言型の Infrastructure as Code ツールであり、構成ファイルを使って、クラウドでインフラストラクチャを自動的にデプロイして進化させます。
Zipkin は分散トレースの普及に貢献した分散トレースツールです。
すでに Zipkin 向けに計測可能になっているアプリケーションでは、Zipkin コレクタを使用して Zipkin テレメトリー データを Cloud Monitoring イベントに適合させることができます。Zipkin コレクタは、次のようにして Kubernetes Engine にデプロイできます。
このコマンドは、よく知られている Zipkin ポート 9411
にコレクタをデプロイします。ローカルポート上でこのコレクタを探しているアプリケーションは、コレクタと Zipkin サーバーを区別できませんが、テレメトリー データは Cloud Trace に表示されます。
ラボが完了したら、[ラボを終了] をクリックします。ラボのプラットフォームから、アカウントと使用したリソースが削除されます。
ラボの評価を求めるダイアログが表示されたら、星の数を選択してコメントを入力し、[送信] をクリックします。
星の数は、それぞれ次の評価を表します。
フィードバックを送信しない場合は、ダイアログ ボックスを閉じてください。
フィードバックやご提案の送信、修正が必要な箇所をご報告いただく際は、[サポート] タブをご利用ください。
マニュアルの最終更新日: 2023 年 9 月 28 日
ラボの最終テスト日: 2023 年 9 月 28 日
Copyright 2024 Google LLC. 本ソフトウェアは「現状有姿」で提供されており、いかなる使用および目的に関しても保証および表明は伴いません。本ソフトウェアのご利用には、Google との契約が適用されます。
このコンテンツは現在ご利用いただけません
利用可能になりましたら、メールでお知らせいたします
ありがとうございます。
利用可能になりましたら、メールでご連絡いたします
One lab at a time
Confirm to end all existing labs and start this one