arrow_back

Kubernetes エンジンを使った Cloud ロギング (Logging)

参加 ログイン

Kubernetes エンジンを使った Cloud ロギング (Logging)

1時間 クレジット: 1

GSP483

Google Cloud セルフペース ラボ

概要

Cloud Logging を使うと、すべての GCP リソースと(他のプラットフォームにある)カスタムのリソースからログを集約して、すべてのログと指標を 1 つの場所に保存することができます。ログは集約され、提供された Cloud Logging UI 内で表示できるようになります。ログはシンクにエクスポートして、特定のユースケースに利用することもできます。現在、Cloud Logging は次のシンクのエクスポートに対応しています。

  • Cloud Storage
  • Pub/Sub
  • BigQuery

このラボでは、サンプルのアプリケーションを Kubernetes Engine にデプロイし、ログイベントを Cloud Logging に転送します。ここでは Terraform という宣言型の Infrastructure as Code ツールを使用します。このツールにより、クラウド内のインフラストラクチャのデプロイと更新を自動化する構成ファイルを使用することができます。同様に、ログデータのエクスポート先となる Cloud Storage バケットと BigQuery データセットもこの構成によって作成されます。

このラボは、Cloud Logging に関する理解を深めるために GKE Helmsman のエンジニアによって作成されました。このデモは Github でご覧いただけます。このアセットへのコントリビューターをお待ちしています。

アーキテクチャ

この Terraform 構成から構築される Kubernetes Engine クラスタが生成するログと指標は、Stackdriver に取り込むことができます。スクリプトからは Cloud Storage 用、BigQuery 用、Cloud Pub/Sub 用のログ エクスポート シンクも作成されます。この操作を、データフローを使って図に示したのが次の画像です。

Logging Architecture

設定

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

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

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

必要なもの

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

  • 標準的なインターネット ブラウザ(Chrome を推奨)
  • ラボを完了するために十分な時間

注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、ラボでは使用しないでください。

注: Chrome OS デバイスを使用している場合は、シークレット ウィンドウを開いてこのラボを実行してください。

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

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

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

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

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

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

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

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

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

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

Google Cloud Shell の有効化

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

GCP Console の右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

Cloud Shell アイコン

[続行] をクリックします。

cloudshell_continue

環境のプロビジョニングと接続には少し時間がかかります。接続すると、すでに認証されており、プロジェクトは PROJECT_ID に設定されています。例えば:

Cloud Shell 端末

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

次のコマンドを使用すると、有効なアカウント名を一覧表示できます。

gcloud auth list

出力:

ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net
To set the active account, run:
    $ gcloud config set account `ACCOUNT`
	

次のコマンドを使用すると、プロジェクト ID を一覧表示できます。

gcloud config list project
	

出力:

[core]
project = <project_ID>
	

出力例:

[core]
project = qwiklabs-gcp-44776a13dea667a6
	

デモのクローンを作成する

Cloud Shell で新しいセッションを開きます。下の画像にあるアイコンをクリックして、コードエディタを開きます。

code-editor.png

新しいタブでエディタと Cloud Shell セッションが開きます。次のコマンドを実行して、GCP Project ID を設定します。<YOUR_PROJECT_ID> は自分の Qwiklabs Project ID に置き換えてください。

gcloud config set project <YOUR_PROJECT_ID>

このラボに必要なリソースをクローンします。

git clone https://github.com/GoogleCloudPlatform/gke-logging-sinks-demo

このデモ用のディレクトリに移動します。

cd gke-logging-sinks-demo

リージョンとゾーンを設定する

一部の Compute Engine リソースは、リージョン内やゾーン内に存在します。リージョンとは、リソースを実行できる特定の地理的な場所です。1 つのリージョンには 1 つまたは複数のゾーンがあります。

次のコマンドを実行して、ラボのリージョンとゾーンを設定します(最適なリージョンとゾーンを使用できます)。

gcloud config set compute/region us-central1
gcloud config set compute/zone us-central1-a

デプロイ

Terraform は、Infrastructure as Code不変のインフラの原則に従い、インフラストラクチャの望ましい状態の宣言型の記述をサポートします。記述子を適用すると、Terraform は GCP API を使用して、一致するリソースのプロビジョニングと更新を行います。Terraform は望ましい状態と現在の状態を比較することにより、すべてを削除してやり直すことなく増分変更を行うことができます。たとえば、Terraform は GCP プロジェクトやコンピュート インスタンスなどの作成、Kubernetes Engine クラスタの設定とそのクラスタへのアプリケーションのデプロイも行うことができます。要件が変わった場合は記述子を変更すると、Terraform はそれに応じてクラウド インフラストラクチャを調整します。

この例では、Kubernetes Engine クラスタを起動してそこにシンプルなサンプル アプリケーションをデプロイします。デフォルトでは、GCP 内の Kubernetes Engine クラスタは、事前に構成された Fluentd ベースのコレクタを使用してプロビジョニングされます。このコレクタによって Cloud Logging にログが転送されます。サンプル アプリケーションを操作すると、Cloud Logging や他のログイベント シンクから見えるログが生成されます。

provider.tf ファイルを更新する

provider.tf スクリプト ファイルから Terraform のプロバイダ バージョンを削除します。

左側のメニューで「/gke-logging-sinks-demo/terraform/provider.tf.」というファイルを開きます。

バージョンを 〜> 2.19.0 に設定します。変更後の provider.tf スクリプト ファイルは以下のようになります:

....
provider "google" {
  project = var.project
  version = "~> 2.19.0"
}

ファイルを保存して閉じます。

クラスタをデプロイする

このラボでは 3 つのサンプル Terraform ファイルを使います。最初の main.tf ファイルは Terraform を使うための出発点です。このファイルは、使用される機能、操作されるリソース、結果として得られる出力を記述します。2 番目のファイルが provider.tf です。このファイルは、どのクラウド プロバイダおよびバージョンが Terraform コマンドのターゲットになるか(今回は GCP)を示します。

最後のファイル variables.tf には、Terraform への入力として使用される変数のリストが格納されています。main.tf で参照されている変数のうち、デフォルト設定が variables.tf で構成されていないものについては、ランタイムにユーザーへのメッセージ表示が行われます。

main.tf を少し変更します。左側のメニューで「/gke-logging-sinks-demo/terraform/main.tf」ファイルを開きます。106 行目までスクロールして「"// Create the Cloud Logging Export Sink for Cloud Storage GKE Notifications"」セクションを見つけます。

フィルタの resource.typecontainer から k8s_container に変更します。

116 行目で上記と同様の操作を実行します。先に進む前に、これら 2 つのエクスポート シンク セクションが次のようになっていることを確認してください。

sinks.png

ファイルを保存して閉じます。

環境を作成するには次の make コマンドを実行します。

make create

完了したタスクをテストする

[進行状況を確認] をクリックして、実行したタスクを確認します。 Terraform を使用して必要なインフラストラクチャを正常にデプロイすると、評価スコアが表示されます。

Terraform を使用して必要なインフラストラクチャをセットアップする

検証

デプロイ中にエラーが表示されなければ、数分後に Kubernetes Engine クラスタが GCP Console に表示されます。

[ナビゲーション メニュー] > [Kubernetes Engine] > [クラスタ] をクリックすると、デプロイされたサンプル アプリケーションがあるクラスタを確認できます。

デモが正しくデプロイされたかどうかを確認するには、次のコマンドを実行します。

make validate

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

make_valid.png

アプリケーションが Kubernetes Engine にデプロイされたので、ログデータを生成し、Cloud Logging などのツールでログを表示することができます。

ログの生成

Terraform によってデプロイされたサンプル アプリケーションは、シンプルなウェブページとなります。このアプリケーションをブラウザで開くたびに、ログイベントがアプリケーションから Cloud Logging に公開されます。ログイベントが数件生成されるようにページを数回更新してください。

アプリケーション ページの URL を取得する方法は次のとおりです。

  1. GCP Console でナビゲーション メニューを開き、[ネットワーキング] セクションで [ネットワーク サービス] をクリックします。
  2. デフォルトの [負荷分散] ページで、設定されている TCP ロードバランサをクリックします。
  3. [ロードバランサの詳細] ページの上部セクションには [フロントエンド] とラベルが付けられています。
  4. [IP:ポート] の URL 値をコピーします。別のブラウザを開き、URL を貼り付けます。ブラウザの画面に次のような内容が表示されます。

サンプル アプリケーションの画面

Cloud Logging におけるログ

Cloud Logging にはログイベント表示用の UI があります。検索とフィルタの基本機能は、システムの問題をデバッグするときに便利です。Cloud Logging が特に役立つのは、比較的最近のログイベントを調べる場合です。ログイベントを長期にわたって保存する必要がある場合は、この後で紹介する別のツールの使用を検討してください。

Cloud Logging コンソールを開く方法は次のとおりです。

  1. GCP Console でナビゲーション メニューを開き、[OPERATIONS] セクションで [Logging] をクリックします。
  2. ページ上でリソース フィルタを [Kubernetes コンテナ] > [stackdriver-logging] > [default] に変更します(stackdriver-logging はクラスタであり、default は名前空間です)。

Stack_clustername_default.png

  1. この画面で箇条書きのログアイテムを展開して、詳細なログ情報を確認できます。

Stackdriver_GKE_error-log.png

Logging コンソールでは任意の種類のテキスト検索を実行したり、ログタイプ、ログレベル、期間などを基準にフィルタを適用したりできます。

ログ エクスポートの表示

Terraform の構成によって 2 つのログ エクスポート シンクが作成されます。シンクを確認する方法は次のとおりです。

  1. [Logging] ページがまだ開いていると仮定します。

  2. 左側のナビゲーション メニューで [ログラウター] メニュー オプションをクリックします。

  3. [エクスポート] ページが表示されます。ログ エクスポートの一覧に 2 つのシンクがあるのを確認してください。

  4. シンクの右側にあるコンテキスト メニュー(その他アイコン)をクリックし、[シンクを編集] オプションを選択すると、シンクを編集または表示できます。

  5. また、ナビゲーション ウィンドウの上部にある [シンクを作成] オプションをクリックすれば、他のカスタム エクスポート シンクを作成できます。

Cloud Storage におけるログ

ログイベントは、データのアーカイブ化に適したオブジェクト ストレージ システムである Cloud Storage に保存できます。Cloud Storage バケットにポリシーを設定すれば、たとえば、古くなったデータを期限切れにして削除したり、より新しいデータの保存には、価格や可用性の異なるさまざまなストレージ クラスを選んで使うことも可能です。

Terraform 構成によって stackdriver-gke-logging- という名前の Cloud Storage バケットが作成され、このバケットに対して中長期のアーカイブとしてログがエクスポートされます。この例ではバケットのストレージ クラスを Nearline に設定しました。これはログが通常の本番環境で頻繁にアクセスされないからです(この設定なら中期的なストレージ コストを低く抑えることができます)。本番のシナリオでは、コンテンツをより低コストで長期間のログの保存に適した Coldline ストレージに移動させるライフサイクル ポリシーをバケットに設定することもできます。

Cloud Storage に保存された Cloud Logging ログにアクセスする方法は次のとおりです。

  1. GCP Console でナビゲーション メニューを開き、[Storage] をクリックします。
  2. stackdriver-gke-logging-<random-Id> という名前のバケットを見つけてクリックします。
  3. エクスポート シンクが GCS に伝達するにはしばらく時間がかかるため、バケットにはログの詳細情報が表示されないはずです。

empty-buck.png

ラボの最後に GCS に戻ると、クラスタで実行中のポッドに対応するフォルダが表示されるはずです(autoscaler や dnsmasq など)。

Cloud Storage バケット

heapster、kubedns、sidecar など、いずれかのフォルダをクリックして特定のログの詳細な情報を確認できます。

BigQuery におけるログ

構成により、Cloud Logging ログイベントを BigQuery に公開できます。BigQuery は大きなデータセットに対して迅速で高度なクエリを実行できるデータ ウェアハウス ツールです。

Terraform 構成によって gke_logs_dataset という名前で BigQuery データセットが作成されます。このデータセットは、直近の 1 時間内(データセットの [デフォルトのテーブルの有効期限] による設定値)に生成されたすべての Kubernetes Engine 関連ログを保存するように設定されます。Kubernetes Engine コンテナログをこのデータセットに push する Cloud Logging エクスポートが作成されます。

BigQuery に保存された Cloud Logging ログにアクセスする方法は次のとおりです。

注: BigQuery Export はすぐに値が設定されません。ログが表示されるまで少し時間がかかります。

  1. GCP Console でナビゲーション メニューを開き、[ビッグデータ] セクションで [BigQuery] をクリックします。
  2. 左側のメニューで、使用するプロジェクト名をクリックします。gke_logs_dataset というデータセットが表示されます。このデータセットを展開すると、存在するテーブルを確認できます(注: データセットはすぐに作成されますが、テーブルはログが書き込まれて新しいテーブルが必要になった時点で生成されます)。
  3. テーブルの 1 つをクリックして内容を表示します。
  4. テーブルのスキーマを見て、列の名前とデータ型を確認します。この情報は、次のステップでテーブルにクエリを実行してデータを調べるときに使います。

BQ_logs_dataset.png

  1. このテーブルにカスタムクエリを実行するために、右上にある [テーブルをクエリ] をクリックします。
  2. これでクエリがクエリエディタに追加されますが、このクエリには構文エラーがあります。
  3. クエリを編集し、SELECT の後にアスタリスク(*)を追加して、現在のテーブルからすべての情報が取得されるようにします。注: SELECT * クエリを実行すると一般にリソースが大量に消費されるので、おすすめできません。このラボで使うデータセットには直近 1 時間分のログしか含まれないため、データの量は多くありません。
  4. [実行] をクリックしてクエリを実行し、テーブルから結果を取得します。

結果ウィンドウに行や列が表示されます。取得されたデータの行をスクロールして参照できます。必要に応じて、最初のクエリで表示された結果に基づいて特定のデータに絞り込むカスタムクエリを実行します。

完了したタスクをテストする

[進行状況を確認] をクリックして、実行したタスクを確認します。 BigQuery が BigQuery データセットに書き込まれたログをシンクする場合、評価スコアが表示されます。

BigQuery でログを表示する

破棄

このラボで使用したすべてのリソースのシャットダウンは Qwiklabs によって行われますが、クラウドのマナーを守りながら費用を節約するために、独自の環境のクリーンアップに必要な操作を以下に示します。

make teardown

Terraform は作成したリソースを追跡しているため、それらをすべて破棄することができます。

本番環境におけるトラブルシューティング

Terraform の実行中に、インストール スクリプトの実行が「アクセスが拒否されました」というエラーで失敗することがあります。 Terraform で使用している認証情報には、選択されているプロジェクトでリソースを作成するのに必要な権限がありません。gcloud config list で表示されるアカウントに、リソースの作成に必要な権限があることを確認してください。権限がある場合は、gcloud auth application-default login を実行してアプリケーションのデフォルトの認証情報を生成し直してください。

Cloud Storage バケットに値が設定されていません Terraform 構成が完了すると、Cloud Storage バケットが作成されますが、ログデータが Kubernetes Engine クラスタからすぐに取得されるとは限りません。最初のエントリが表示されるまでに 2~3 時間かかることがあるので、しばらく時間をおいてください [https://cloud.google.com/logging/docs/export/using_exported_logs]。

BigQuery データセットにテーブルが作成されません Terraform 構成が完了すると、BigQuery データセットが作成されますが、結果を確認しようとした時点でテーブルがデータセットに作成されているとは限りません。テーブルに情報がすぐに設定されることはまれです。正しく機能しないと判断する前に、少し時間(最短でも 5 分)をおいてください。

お疲れさまでした

Enterprise-Customers.pngstackdriver-logging-badge.png

クエストを完了する

このセルフペース ラボは、Qwiklabs のクエストである Google Kubernetes Engine のベスト プラクティスCloud Loggingの一部です。 クエストとは、学習パスを構成する一連のラボで、クエストを完了すると、成果が認められて上のバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクさせることができます。このラボを終えてこちらのクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なその他の Qwiklabs のクエストもご覧ください

次のステップと詳細情報

Google Cloud Training & Certification

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

マニュアルの最終更新日: 2020 年 5 月 6 日
ラボの最終テスト日: 2020 年 5 月 6 日

Copyright 2020 Google LLC. 本ソフトウェアは現状のまま提供されており、いかなる使用および目的に対しても保証および表明をいたしません。本ソフトウェアのご利用については、Google との契約が適用されます。