GKE アプリのトラブルシューティングに便利な Cloud Logging の 10 個の新機能(パート 1)
Google Cloud Japan Team
※この投稿は米国時間 2023 年 6 月 7 日に、Google Cloud blog に投稿されたものの抄訳です。
Google Cloud は、開発者の時間の貴重さをよく理解しており、生産性を向上させる方法を常に模索しています。この投稿では、Cloud Logging で問題箇所のログをすばやく特定して解決するために導入された 10 個の新機能を紹介します。
Cloud コンソールの Google Kubernetes Engine(GKE)のログ表示を改善 - Cloud コンソールの GKE セクションの表示が改善され、ログをフィルタできるようになりました
ログエントリを基軸とした操作 - ログエントリを固定して、関連するログを簡単に見つけられるようになりました
重大度でフィルタ - 簡単に重大度(エラーまたはそれ以上など)でフィルタして、エラーログを表示できるようになりました
ヒストグラムでフィルタ - ヒストグラムを使って簡単にログをフィルタできるようになりました
類似するログエントリの非表示 / 表示 - 類似するログを非表示にして、繰り返しを回避できます
日時の新しいオプション - 日時をすばやく選べるオプションが追加されました
新しい SEARCH 関数 + インデックス - ログから文字列を検索する新しい関数が追加されました。インデックスを使って、クエリにかかる時間を短縮できます
ログの結果を検索 / ハイライト表示 - ログの結果から特定の値を検索できます
ログのコピー、貼り付けの改善 - コピー、貼り付けのフォーマットが改善されました
Error Reporting の変更 - Error Reporting の GKE リソースをフィルタして、Cloud コンソールの GKE セクションに統合できます
このブログ投稿では、アラートまたはダッシュボードで問題が見つかった場合の対処方法について説明します。具体例を使って、サンプル アプリケーションのトラブルシューティング手順を説明しながら、新機能が追加されたことでトラブルシューティングがどのように簡単になったかを示します。新機能は多岐にわたるため、今回は最初の 5 個の機能のみを取り上げ、残りの機能については第二弾の投稿で紹介します。
GKE のトラブルシューティングの改善点 - 具体例
具体例をあげて、ログをすばやく特定するために役立つ新機能を紹介します。ここでは、GKE でマイクロサービス ベースの e コマース アプリケーションをデプロイしているとしましょう。マイクロサービスがそれぞれ生成するログに基づいて、システムの動作を把握することができます。アプリケーションで断続的に発生しているエラーについて、トラブルシューティングを行って根本原因を突き止めましょう。
まず、GKE でサービスを確認します。GKE のワークロードとクラスタのページの [オブザーバビリティ] タブと [ログ] タブに、指標とログが表示されます。つまり、GKE から直接、インフラストラクチャの指標と、アプリケーションのログを確認することができます。以下のスクリーンショットは、フロントエンド サービスのエラーログです。
1. GKE の [ログ] タブの新しいデザイン
この最新リリースでは、ログを展開すると、JSON 全体の構造とすべてのログフィールドが表示され、エラーの詳細をすぐに確認できます。重大度による基本的なフィルタとテキスト検索によって、ログを絞り込むことができます。より高度なフィルタ機能やヒストグラムを使用したい場合は、ログ エクスプローラのリンクをクリックして画面を開きます。ログ エクスプローラでは、コンテナのログを完全修飾名で検索することもできます。トラブルシューティングにおいて重要となってくるのが、問題に関連するログを特定して、その背景情報を見つけ出すことです。特定のログエントリを基軸とした操作を行うことによって、ログの背景情報を詳しく把握できます。たとえば、エラーを生成した特定のリクエストについて、該当箇所のログ全体を確認することで、システムの動作の詳細がわかります。
2. ログエントリを基軸とした操作
各ログエントリに固定アイコンがあり、その横のプルダウンをクリックすると、関連ログを見つけるための以下の 2 つの新オプションが表示されます。
- 同じ resource.type - 同じリソースタイプのログをすべて表示します(この例では k8s_container)
- 同じ resource.labels - 同じリソースによって生成されたログをすべて表示します(この例では frontend コンテナ)
この例で [同じ resource.labels] を使うと、このコンテナによって生成されたすべてのログとともにエラーログが表示されます。元のログエントリは固定され、ログリストの一番上に常に表示されるため、他のログエントリと簡単に比較できます。このように表示することによって、エラーだけでなく、正常に実行されているリクエストも多数あることや、それぞれのリクエストの詳細を簡単に確認できます。
ログの主要な属性である「重大度」に基づいてフィルタしてみるのも参考になります。最新リリースでは、重大度セレクタを使って、デバッグログを非表示にしたり、重大度がエラーまたはそれ以上のログを絞り込んで表示したりできます。
3. ログエントリを重大度でフィルタする
この例では [デバッグ エントリを非表示] を使って、必要なコンテキストがすでに提供された後のログをすべて非表示にしています。[重大度] プルダウンでも同様の機能を使用できます。
トラブルシューティングで困難な作業の一つとして、無数のログの中から特定のシグナルを見つけ出すことがあります。最新リリースでは、[類似エントリを隠す] オプションを使って、不要なログを非表示にできます。
4. 類似したログを非表示にする
この例では、不要なログを非表示にする [類似エントリを隠す] が、ログの結果内の紫色の行に表示されています。[類似エントリを隠す] を選択すると、特定のログを除外するためのフィルタが元のクエリに適用されます。[プレビュー] オプションを使用すると、クエリの詳細とログの例が表示されます。
各ログエントリでも、同様のフィルタを使用できます。この最新リリースでは、クエリフィルタを適宜追加して類似エントリを非表示、表示、プレビューして、不要なログを除外することができます。
トラブルシューティングでは、ログに含まれるエラーやイベントの頻度を把握することも重要です。ログ エクスプローラでヒストグラムを使うと、重要なログについて簡単に調べることができます。
5. ヒストグラムを使ってログをフィルタする
- ヒストグラムの拡大表示 - ヒストグラムを拡大表示して、頻度を詳しく確認できます
- スクロールと連動 - ログをスクロールすると、ヒストグラムでもログと同じ時間帯が表示されます
- ズームイン / ズームアウト - ログの時間帯を絞り込んだり、広げたりできます
- 時間に合わせてスクロール / ズーム - 特定の時間帯に絞り込むか、時間に合わせてスクロールできます
この例では、エラーログにおいて頻度が高い箇所を中心に時間帯を絞り込み、特定の構成の問題に関するログだけを表示しています。これで、構成を変更して問題を解決するために十分な情報を入手することができます。
次のステップ
ここで紹介した Cloud Logging の新機能は、重要なログをすばやく見つけるために役立ちます。しかし、それだけではありません。この第一弾の投稿では、Cloud Ops でトラブルシューティングを行う開発者のために、開発者によって設計された新機能を紹介しました。第二弾では、Logging と Error Reporting に加えられたその他の新しい改善点について紹介する予定です。それまでの間、ログ エクスプローラをまだ使ったことがない場合は、ぜひお試しください。
- プロダクト マネージャー Charles Baer