arrow_back

Google Cloud のログ分析

ログイン 参加
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Google Cloud のログ分析

Lab 1時間 universal_currency_alt クレジット: 1 show_chart 入門
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP1088

Google Cloud セルフペース ラボ

概要

このラボでは、アプリケーションの分析情報を取得するために Cloud Logging で提供されている機能とツールについて学びます。

学習内容

  • Cloud Logging を効果的に使用して、GKE で動作しているアプリケーションに関する分析情報を取得する方法
  • ログ分析を使用してクエリを効果的に作成および実行する方法

ラボで使用されているデモ アプリケーション

具体例を示すために、GKE クラスタにデプロイされているこのマイクロサービス デモ サンプルアプリに基づいたシナリオを使用します。このデモアプリには、さまざまなマイクロサービスと、その依存関係が含まれています。

さまざまなマイクロサービスとその依存関係を示すチャート

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
  • ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。

  4. [ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。

    重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  5. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後このタブで Cloud Console が開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 ナビゲーション メニュー アイコン

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to YOUR_PROJECT_ID

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

  2. 出力は次のようになります。

出力:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = <project_ID>

出力例:

[core] project = qwiklabs-gcp-44776a13dea667a6 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

タスク 1. インフラストラクチャ設定

GKE クラスタを確認する

Google Kubernetes Engine クラスタに接続し、そのクラスタが正しく作成されていることを確認します。

1. Cloud Shell で、gcloud のゾーンを設定します。

gcloud config set compute/zone {{{project_0.default_zone|placeholder}}}
  1. 次のコマンドを使用して、クラスタのステータスを表示します。
gcloud container clusters list

次のようなステータスが表示されます。

NAME: day2-ops LOCATION: {{{project_0.default_zone|placeholder}}} MASTER_VERSION: 1.24.3-gke.2100 MASTER_IP: 34.68.183.6 MACHINE_TYPE: e2-standard-2 NODE_VERSION: 1.24.3-gke.2100 NUM_NODES: 4 STATUS: RUNNING

クラスタのステータスは「RUNNING」です。まだ「PROVISIONING」の場合は、少し待ってから上記のコマンドを再び実行します。ステータスが「RUNNING」になるまでこれを繰り返してください。

Cloud コンソールのナビゲーション メニュー > [Kubernetes Engine] > [クラスタ] で、進行状況を確認することもできます。

  1. クラスタのステータスが「RUNNING」になったら、クラスタの認証情報を取得します。
gcloud container clusters get-credentials day2-ops --region {{{project_0.default_region|placeholder}}}

(出力)

Fetching cluster endpoint and auth data. kubeconfig entry generated for day2-ops.
  1. ノードが作成されていることを確認します。
kubectl get nodes

出力は次のようになります。

NAME STATUS ROLES AGE VERSION gke-day2-ops-default-pool-b3081059-bskv Ready <none> 3m32s v1.24.3-gke.2100 gke-day2-ops-default-pool-b3081059-dt73 Ready <none> 3m30s v1.24.3-gke.2100 gke-day2-ops-default-pool-b3081059-g1m3 Ready <none> 3m31s v1.24.3-gke.2100 gke-day2-ops-default-pool-b3081059-wq4b Ready <none> 3m31s v1.24.3-gke.2100

タスク 2. アプリケーションのデプロイ

次に、Online Boutique というマイクロサービス アプリケーションをクラスタにデプロイし、モニタリング可能な実際のワークロードを作成します。

  1. 次のコマンドを実行してリポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
  1. microservices-demo ディレクトリに移動します。
cd microservices-demo
  1. kubectl を使用してアプリをインストールします。
kubectl apply -f release/kubernetes-manifests.yaml
  1. すべてが正しく動作していることを確認します。
kubectl get pods

次のような出力になっている必要があります。次のステップに進む前に、すべての Pod が「Running」のステータスになるまでコマンドを再実行してください。

NAME READY STATUS RESTARTS AGE adservice-55f94cfd9c-4lvml 1/1 Running 0 20m cartservice-6f4946f9b8-6wtff 1/1 Running 2 20m checkoutservice-5688779d8c-l6crl 1/1 Running 0 20m currencyservice-665d6f4569-b4sbm 1/1 Running 0 20m emailservice-684c89bcb8-h48sq 1/1 Running 0 20m frontend-67c8475b7d-vktsn 1/1 Running 0 20m loadgenerator-6d646566db-p422w 1/1 Running 0 20m paymentservice-858d89d64c-hmpkg 1/1 Running 0 20m productcatalogservice-bcd85cb5-d6xp4 1/1 Running 0 20m recommendationservice-685d7d6cd9-pxd9g 1/1 Running 0 20m redis-cart-9b864d47f-c9xc6 1/1 Running 0 20m shippingservice-5948f9fb5c-vndcp 1/1 Running 0 20m
  1. 次を実行して、アプリケーションの外部 IP を取得します。IP アドレスは、サービスがデプロイされると返されます。そのため、外部 IP アドレスが割り当てられるまでこのコマンドを繰り返さなくてはならない場合があります。
export EXTERNAL_IP=$(kubectl get service frontend-external -o jsonpath="{.status.loadBalancer.ingress[0].ip}") echo $EXTERNAL_IP

(出力例)

35.222.235.86
  1. 最後に、アプリが起動して稼働していることを確認します。
curl -o /dev/null -s -w "%{http_code}\n" http://${EXTERNAL_IP}

確認結果は次のようになります。

200

アプリケーションがデプロイされたら、Cloud コンソールに移動してステータスを表示することもできます。

  1. [Kubernetes Engine] > [ワークロード] ページに、すべての Pod に問題がないことが表示されます。
Pod のステータスが OK になっている [ワークロード] ページ
  1. 次に [Services と Ingress] をクリックして、すべてのサービスに問題がないことを確認します。

アプリケーションを開く

[Services と Ingress] で、サービス frontend-externalエンドポイント IP をクリックします。

frontend-external サービスの外部 IP アドレスのハイライト表示

アプリケーションが開いて、次のようなページが表示されます。

デモ アプリケーションのウェブページ

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 アプリケーションをデプロイする

タスク 4. ログバケットの管理

ログ分析を有効にする方法は 2 つあります。一つは既存のバケットをアップグレードする方法で、もう一つはログ分析を有効にした新しいログバケットを作成する方法です。

既存のバケットをアップグレードする

既存のログバケットをアップグレードするには、以下の手順を行います。

  1. 左側のメニューで [ロギング] を開き、[ログストレージ] をクリックします。

  2. 既存のバケット(_Default バケットなど)の [UPGRADE] をクリックします。

2 つのチェックボックスがオンになっているバケットの詳細パネル
  1. ポップアップ ウィンドウで、[アップグレード] をクリックします。

  2. アップグレードが完了するまで待ちます。最初にステータスが [アップグレード対象外です] に変更されてから、[アップグレード済み] ステータスが表示されます。

  3. [開く] プルダウン ボタンをクリックします。

  4. ビュー _AllLogs を選択すると、[Log Analytics] ページが開きます。

新しいログバケットを作成する

別の方法として、ログ分析を有効にした新しいログバケットを作成するように Cloud Logging を構成することもできます。

  1. 左側のメニューで [ロギング] を開き、[ログストレージ] をクリックします。

  2. 上部にある [ログバケットを作成] をクリックします。

  3. バケットに対して「day2ops-log」のような名前を入力します。

  4. [Upgrade to use Log Analytics] と [このバケットにリンクする新しい BigQuery データセットを作成する] の両方をオンにします。

  5. day2ops_log」のようなデータセット名を入力します。

2 つのチェックボックスがオンになっているバケットの詳細パネル

[このバケットにリンクする新しい BigQuery データセットを作成する] を選択すると、BigQuery でデータセットが作成されます(存在しない場合)。これにより、必要に応じて BigQuery でクエリを実行できます。

  1. 最後に、[バケットを作成] をクリックしてログバケットを作成します。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 ログバケットを作成する

新しいログバケットに書き込む

新しいログバケットを使用するためにログシンクを作成できます。これは [ログルーター] から直接行うことができます。また、[ログ エクスプローラ] からも簡単に作成できます。ログクエリを実行して目的のログを選択およびフィルタし、シンクを作成することができます。このアプローチの長所は、ログクエリがシンクの構成にフィルタとして自動的にコピーされることです。

  1. [ログ エクスプローラ] の右上で [クエリを表示] を有効にして、クエリ フィールドで次のクエリを実行します。
resource.type="k8s_container"
  1. [シンクの作成] をクリックします。
[シンクの作成] ボタンがハイライト表示されている [ログ エクスプローラ] ページ
  1. シンク名として「day2ops-sink」のような名前を入力します。

  2. [次へ] をクリックします。

  3. シンクサービスのプルダウン リストで [Logging バケット] を選択します。

  4. 先ほど作成した新しいログバケットを選択します。

  5. [次へ] をクリックします。

フィルタにはすでにリソースタイプのクエリが表示されています。

リソースタイプが表示されている [シンクの詳細]
  1. [シンクを作成] をクリックします。

少し待つとシンクが作成されます。

[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。 ログシンクを作成する

新しいログバケットから読み取る

ログ エクスプローラに戻ります。以下のスクリーンショットでハイライト表示されているように、ログにはさまざまなリソースタイプがあります。

リソースタイプと [範囲を絞り込む] ボタンのハイライト表示
  1. 新しいログバケット内のログを表示するには、ページ上部にある [範囲を絞り込む] をクリックします。

  2. [ストレージによるスコープ] を選択し、先ほど作成した新しいログバケットを選択します。

  3. [適用] をクリックします。

リソースタイプとして Kubernetes コンテナのみが表示され、ログエントリが大幅に少なくなっています。これは、フィルタされたログのみがバケットに送信されるためです。

タスク 5. ログの分析

  • 左側の [ロギング] で [ログ分析] をクリックしてログ分析機能にアクセスします。次のような画面が表示されます。
a7afa6a91515d206.png

クエリ フィールドが空の場合、または使用するテーブルを忘れた場合は、[Query] ボタンをクリックしてサンプルクエリを再表示できます。

これで、クエリ フィールドで独自のクエリを実行できるようになりました。以下に、いくつかの例を示します。

重要: FROM 句のログビュー名は、ログバケットによって異なります。正しいビュー名を使用していることを確認する必要があります。確認するには、前の手順を使用します。

最新のエラーを見つけるには:

最新のエラーをコンテナから見つけます。

SELECT TIMESTAMP, JSON_VALUE(resource.labels.container_name) AS container, json_payload FROM `logs_day2ops_US._AllLogs` WHERE severity="ERROR" AND json_payload IS NOT NULL ORDER BY 1 DESC LIMIT 50

クエリを実行すると、次のような出力が表示されます。

最近のエラーを見つけるためのクエリ結果

最小、最大、平均のレイテンシを見つけるには:

フロントエンド サービスの期間における最小、最大、平均のレイテンシを表示できます。

SELECT hour, MIN(took_ms) AS min, MAX(took_ms) AS max, AVG(took_ms) AS avg FROM ( SELECT FORMAT_TIMESTAMP("%H", timestamp) AS hour, CAST( JSON_VALUE(json_payload, '$."http.resp.took_ms"') AS INT64 ) AS took_ms FROM `logs_day2ops_US._AllLogs` WHERE timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 24 HOUR) AND json_payload IS NOT NULL AND SEARCH(labels, "frontend") AND JSON_VALUE(json_payload.message) = "request complete" ORDER BY took_ms DESC, timestamp ASC ) GROUP BY 1 ORDER BY 1

クエリを実行すると、次のような出力が表示されます。

最小、最大、平均のレイテンシを見つけるためのクエリ結果

プロダクト ページのアクセス数

ユーザーが過去 1 時間に特定のプロダクト ページにアクセスした回数を調べます。

SELECT count(*) FROM `logs_day2ops_US._AllLogs` WHERE text_payload like "GET %/product/L9ECAV7KIM %" AND timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR)

クエリを実行すると、次のような出力が表示されます。

プロダクト ページのアクセス数のクエリ結果

ショッピング カートで購入手続きが行われたセッション

次のクエリを実行して、購入手続き(/cart/checkout サービスに対する POST 呼び出し)が行われたセッションの数を表示できます。

SELECT JSON_VALUE(json_payload.session), COUNT(*) FROM logs_day2ops_US._AllLogs WHERE JSON_VALUE(json_payload['http.req.method']) = "POST" AND JSON_VALUE(json_payload['http.req.path']) = "/cart/checkout" AND timestamp > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR) GROUP BY JSON_VALUE(json_payload.session)

クエリを実行すると、次のような出力が表示されます。

ショッピング カートでの購入手続きのクエリ結果

お疲れさまでした

Cloud Logging を使用して GKE で動作しているアプリケーションに関する分析情報を取得し、ログ分析を使用してクエリを作成および実行しました。

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2022 年 9 月 26 日

ラボの最終テスト日: 2022 年 9 月 26 日

Copyright 2024 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。