チェックポイント
Use Terraform to set up the necessary infrastructure
/ 50
View Logs in BigQuery
/ 50
Kubernetes Engine での Cloud Logging
GSP483
概要
Cloud Logging を使用すると、すべての Google Cloud リソースと、他のプラットフォーム上のあらゆるカスタム リソースからログを集約して、すべてのログと指標を 1 か所で保存できます。集約されたログは Cloud Logging UI 内で確認できます。また、より特殊なユースケースに対応するためにログをシンクにエクスポートすることも可能です。現在、Cloud Logging は次のシンクへのエクスポートに対応しています。
- Cloud Storage
- Pub/Sub
- BigQuery
このラボでは、Terraform を使用してサンプル アプリケーションを Kubernetes Engine にデプロイし、ログイベントを Cloud Logging に転送します。Terraform は、構成ファイルを使ってクラウド内でのインフラストラクチャのデプロイと進化を自動化できる宣言型の Infrastructure as Code ツールです。ログデータのエクスポート先となる Cloud Storage バケットと BigQuery データセットもこの構成によって作成されます。
このラボは、Cloud Logging について理解を深めていただくことを目的に、GKE Helmsman のエンジニアが作成したものです。Cloud Shell で gsutil cp -r gs://spls/gke-binary-auth/* .
と cd gke-binary-auth-demo
コマンドを実行してデモを確認できます。アセットにぜひ貢献していただければ幸いです。
アーキテクチャ
この Terraform 構成から構築される Kubernetes Engine クラスタが生成するログと指標は、Stackdriver に取り込むことができます。スクリプトからは Cloud Storage 用、BigQuery 用、Cloud Pub/Sub 用のログ エクスポート シンクも作成されます。
これをデータフローを使って図に示したのが次の画像です。
設定
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
- ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウでリンクを開く] を選択します)。
ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。 -
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}} [ラボの詳細] パネルでも [ユーザー名] を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}} [ラボの詳細] パネルでも [パスワード] を確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。 -
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
- Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン をクリックします。
接続した時点で認証が完了しており、プロジェクトに各自の PROJECT_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。
gcloud
は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
-
[承認] をクリックします。
-
出力は次のようになります。
出力:
- (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
出力:
出力例:
gcloud
ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。
タスク 1. デモのクローンを作成する
- Cloud Shell の上部のリボンにある [新しいウィンドウで開く] をクリックします。
- 次のコマンドを実行して Google Cloud プロジェクト ID を設定します。このとき
<YOUR_PROJECT_ID>
は Qwiklabs のプロジェクト ID に置き換えます。
- このラボに必要なリソースのクローンを作成します。
- このデモ用のディレクトリに移動します。
リージョンとゾーンを設定する
一部の Compute Engine リソースは、リージョン内やゾーン内に存在します。リージョンとは、リソースを実行できる特定の地理的位置です。1 つのリージョンには 1 つ以上のゾーンがあります。
次のコマンドを実行して、ラボのリージョンとゾーンを設定します(最適なリージョンとゾーンを使用できます)。
タスク 2. デプロイ
Terraform では、Infrastructure as Code と不変のインフラストラクチャの原則に従い、インフラストラクチャの望ましい状態を宣言型で記述することがサポートされています。記述子が適用されると、Terraform は Google Cloud API を使用して、一致するリソースのプロビジョニングと更新を行います。
Terraform は望ましい状態と現在の状態を比較することにより、すべてを削除してやり直すことなく増分変更を行うことができます。たとえば、Google Cloud プロジェクトやコンピューティング インスタンスなどを作成できるだけでなく、Kubernetes Engine クラスタを設定してアプリケーションをデプロイすることもできます。要件が変わった場合は記述子を変更すると、Terraform はそれに応じてクラウド インフラストラクチャを調整します。
このラボでは、Kubernetes Engine クラスタを起動してそこにシンプルなサンプル アプリケーションをデプロイします。デフォルトでは、Google Cloud 内の Kubernetes Engine クラスタは、Cloud Logging にログを転送するよう事前に構成された Fluentd ベースのコレクタを使用してプロビジョニングされます。サンプル アプリケーションを操作すると、Cloud Logging や他のログイベント シンクで確認できるログが生成されます。
provider.tf ファイルを更新する
-
provider.tf
スクリプト ファイルから Terraform のプロバイダ バージョンを削除します。 -
Cloud Shell エディタのタブで、[File] > [Open] を選択してから [Open] をクリックします。左側のメニューで
/gke-logging-sinks-demo/terraform/provider.tf
ファイルを開きます。 -
バージョンを
~> 2.19.0
に設定します。変更後のprovider.tf
スクリプト ファイルは次のようになります。
- ファイルを保存して閉じます。
クラスタをデプロイする
このラボの例では 3 つの Terraform ファイルを使います。
最初の main.tf
ファイルは Terraform を使うための出発点です。このファイルは、使用される機能、操作されるリソース、結果として得られる出力を記述します。
2 番目の provider.tf
ファイルは、Terraform コマンドのターゲットになるクラウド プロバイダとバージョンを示します(この例では Google Cloud)。
最後の variables.tf
ファイルには、Terraform への入力として使用される変数のリストが格納されています。main.tf
で参照されている変数のうち、デフォルト設定が variables.tf
で構成されていないものについては、実行時にプロンプトが表示されます。
-
main.tf
を少し変更します。左側のメニューで/gke-logging-sinks-demo/terraform/main.tf
ファイルを開きます。 -
110 行目までスクロールして「Create the Stackdriver Export Sink for Cloud Storage GKE Notifications」を見つけます。
-
フィルタの
resource.type
を container から k8s_container に変更します。 -
bigquery-sink についても 119 行目で同様の変更を行います。次に進む前に、この 2 つのエクスポート シンク セクションが次の内容であることを確認します。
-
ファイルを保存して閉じます。
-
次の
make
コマンドを実行して、実行可能な環境を構築します。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。Terraform を使用して必要なインフラストラクチャが正常にデプロイされていれば、評価スコアが表示されます。
タスク 3. 検証
デプロイ中にエラーが表示されなければ、数分後に Kubernetes Engine クラスタが Cloud コンソールに表示されます。
-
ナビゲーション メニュー > [Kubernetes Engine] > [クラスタ] に移動し、サンプル アプリケーションがデプロイされたクラスタを確認します。
-
デモが正しくデプロイされたかどうかを確認するには、次のコマンドを実行します。
出力は次のようになります。
アプリケーションが Kubernetes Engine にデプロイされたので、ログデータを生成して Cloud Logging などのツールで表示することができます。
タスク 4. ログの生成
Terraform によってデプロイされたサンプル アプリケーションは、シンプルなウェブページを提供します。
このアプリケーションをブラウザで開くたびに、アプリケーションから Cloud Logging にログイベントが公開されます。ページを数回更新すると、複数のログイベントが生成されます
アプリケーション ページの URL を取得する方法は次のとおりです。
- Cloud コンソールのナビゲーション メニューで、[ネットワーキング] にある [ネットワーク サービス] をクリックします。
- デフォルトの [ロード バランシング] ページで、設定されている TCP ロードバランサの名前をクリックします。
- [ロードバランサの詳細] ページの上部に、[フロントエンド] というラベルのセクションがあります。
- [フロントエンド] で
IP:Port
の URL 値をコピーします。別のブラウザを開き、URL を貼り付けます。ブラウザの画面に次のような内容が表示されます。
タスク 5. Cloud Logging におけるログ
Cloud Logging にはログイベントを表示するための UI が備わっています。検索とフィルタの基本機能が用意されており、システムの問題をデバッグするときに便利です。
Cloud Logging は最近のログイベントを調べるのに適しています。ログイベントを長期にわたって保存する必要がある場合は、この後で紹介する別のツールの使用を検討してください。
Cloud Logging コンソールへのアクセス方法は次のとおりです。
- Cloud コンソールのナビゲーション メニューで、[オペレーション] にある [ロギング] をクリックします。
- このページで、
Resource type
は [Kubernetes コンテナ]、cluster_name
は [stackdriver-logging] を選択します。
- [クエリを実行] をクリックします。
- [クエリ結果] で、箇条書きのログアイテムを展開してログエントリの詳細を確認できます。
Logging コンソールでは、クエリビルダーを使用してクエリを作成したり、ログのフィールドやタイムゾーンなどのさまざまな機能を試したりすることができます。
タスク 6. ログ エクスポートの表示
Terraform 構成によって 2 つのログ エクスポート シンクが作成されています。シンクを確認する方法は次のとおりです。
- 引き続き [ロギング] ページを使用します。
- 左側のナビゲーション メニューで [ログルーター] をクリックします。
- ログ エクスポートの一覧に 4 つのシンクがあるのを確認します。
- シンクの右側にあるコンテキスト メニュー(その他アイコン)をクリックし、[シンクを編集] オプションを選択すると、シンクを表示して編集できます。
- ナビゲーション ウィンドウの上部にある [シンクの作成] オプションをクリックすれば、追加のカスタム エクスポート シンクを作成することもできます。
タスク 7. Cloud Storage におけるログ
ログイベントは、データのアーカイブに適したオブジェクト ストレージ システムの Cloud Storage に保存できます。
Cloud Storage バケットにポリシーを設定すれば、たとえば、古くなったデータを期限切れにして削除する一方で、最近のデータは価格や可用性の異なるさまざまなストレージ クラスに保存できます。
Terraform 構成により、中長期的なアーカイブを目的にログがエクスポートされる stackdriver-gke-logging- という名前の Cloud Storage バケットが作成されています。
この例では、通常の本番環境におけるログのアクセス頻度が低いので、バケットのストレージ クラスが Nearline に設定されています(この設定なら中期的なストレージ コストを低く抑えることができます)。本番のシナリオでは、バケットにライフサイクル ポリシーを設定して、より低コストで長期間ログを保存できる Coldline Storage にコンテンツを移動させることもできます。
Cloud Storage に保存されたログにアクセスする方法は次のとおりです。
- Cloud コンソールのナビゲーション メニューで [Cloud Storage] をクリックします。
-
stackdriver-gke-logging-<random-Id>
という名前のバケットを見つけてクリックします。 - シンクが Cloud Storage に反映されるまでには時間がかかるため、バケットのログの詳細は表示されない可能性があります。
ラボの終盤にこのバケットに戻れば、クラスタで実行されている Pod に対応するフォルダ(autoscaler、dnsmasq など)が表示される場合があります。
いずれかのフォルダをクリックすると、heapster、kubedns、sidecar などの特定のログの詳細な情報を確認できます。
タスク 8. BigQuery におけるログ
ログイベントを BigQuery に公開するように設定できます。BigQuery は、大規模なデータセットに対して迅速で高度なクエリを実行できるデータ ウェアハウス ツールです。
Terraform 構成によって gke_logs_dataset
という名前の BigQuery データセットが作成されます。このデータセットは、直近の 1 時間内(データセットの [デフォルトのテーブルの有効期限] による設定値)に生成されたすべての Kubernetes Engine 関連ログを保存するように設定されます。Kubernetes Engine コンテナのログはこのデータセットに push されます。
BigQuery に保存されたログにアクセスする方法は次のとおりです。
-
ナビゲーション メニューの [ビッグデータ] で [BigQuery] をクリックします。[
Cloud コンソールの BigQuery へようこそ
] メッセージ ボックスが開いたら、[完了] をクリックします。 - 左側のメニューで、使用するプロジェクト名をクリックします。gke_logs_dataset というデータセットが表示されます。このデータセットを展開すると、存在するテーブルを確認できます(注: データセットはすぐに作成されますが、テーブルはログが書き込まれて新しいテーブルが必要になった時点で生成されます)。
- テーブルの一つをクリックして内容を表示します。
- テーブルのスキーマを見て、列の名前とデータ型を確認します。この情報は、次のステップでテーブルにクエリを実行してデータを調べるときに使います。
- 右上にある [クエリ] > [新しいタブ] をクリックして、テーブルに対してカスタムクエリを実行します。
- これでクエリがクエリエディタに追加されますが、このクエリには構文エラーがあります。
- クエリを編集し、Select の後にアスタリスク(*)を追加して、現在のテーブルからすべての情報が pull されるようにします。注:
Select *
クエリを実行すると一般にコストが高くなるので、おすすめしません。このラボで使うデータセットには直近 1 時間分のログしか含まれないため、データの量は多くありません。 - [実行] をクリックしてクエリを実行し、テーブルから結果を取得します。
結果ウィンドウに行や列が表示されます。取得されたデータの行をスクロールして参照できます。必要に応じて、最初のクエリで表示された結果に基づいて特定のデータに絞り込むカスタムクエリを実行します。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。BigQuery シンクによって BigQuery データセットにログが書き込まれている場合は、評価スコアが表示されます。
タスク 9. 破棄
- このラボで使用したすべてのリソースは Qwiklabs によってシャットダウンされますが、次の方法で自身の環境をクリーンアップすれば、費用を抑えてクラウドにおけるマナーを保つことができます。
Terraform は作成したリソースを追跡しているため、それらをすべて破棄することができます。
タスク 10. 本番環境におけるトラブルシューティング
Terraform の実行中にインストール スクリプトが Permission denied
で失敗する
Terraform で使用している認証情報には、選択されているプロジェクトでリソースを作成するのに必要な権限がありません。
-
gcloud config list
で表示されるアカウントに、リソースの作成に必要な権限があることを確認してください。 -
権限がある場合は、
gcloud auth application-default login
を実行してアプリケーションのデフォルト認証情報を生成し直してください。
Cloud Storage バケットにデータが取り込まれない
Terraform 構成が完了すると、Cloud Storage バケットが作成されますが、ログデータが Kubernetes Engine クラスタからすぐに取得されるとは限りません。
最初のエントリが表示されるまでに 2~3 時間かかることがあるので、しばらく時間をおいてください。Cloud Storage の詳細については、シンクの宛先でログを表示する方法に関するドキュメントをご覧ください。
BigQuery データセットにテーブルが作成されない
Terraform 構成が完了すると、BigQuery データセットが作成されますが、結果を確認しようとした時点でテーブルがデータセットに作成されているとは限りません。
テーブルにデータがすぐに入力されることはまれです。
正しく機能しないと判断する前に、少し時間(最短でも 5 分)をおいてください。
お疲れさまでした
クエストを完了する
このセルフペース ラボは、「Google Cloud's Operations Suite on GKE」クエストと「Google Cloud Logging」クエストの一部です。クエストとは学習プログラムを構成する一連のラボのことで、修了するとその成果が認められてバッジが贈られます。バッジは公開して、オンライン レジュメやソーシャル メディア アカウントにリンクできます。このラボの修了後、次のクエストに登録すれば、すぐにクレジットを受け取ることができます。受講可能なすべてのクエストについては、Google Cloud Skills Boost カタログをご覧ください。
次のステップと詳細情報
- Kubernetes Engine のロギング
- ログの表示
- 高度なログフィルタ
- ログのエクスポートの概要
- Cloud Dataflow を使用した大規模なログの処理
- Terraform Google Cloud Provider
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2023 年 10 月 18 日
ラボの最終テスト日: 2023 年 10 月 20 日
Copyright 2024 Google LLC. 本ソフトウェアは「現状有姿」で提供されており、いかなる使用および目的に関しても保証および表明は伴いません。本ソフトウェアのご利用には、Google との契約が適用されます。