コンテンツに移動
クラウド オペレーション

SRE のベスト プラクティスを実現: Cloud Logging における新たなコンテクストのトレース

2021年11月26日
https://storage.googleapis.com/gweb-cloudblog-publish/images/cloud_logging_OUrfE4R.max-2600x2600.jpg
Google Cloud Japan Team

※この投稿は米国時間 2021 年 11 月 11 日に、Google Cloud blog に投稿されたものの抄訳です。

企業のデジタル トランスフォーメーションが進む中、オンライン サービスをサポートするための関連性の高いコンテクストのあるテレメトリー データの必要性がこの 10 年間で高まっています。これらのデータは、アプリケーションのパフォーマンス問題を積極的に解決するか、コストのかかるサービスダウンタイムを回避するかの分かれ目となります。分散トレースは、SRE のベストプラクティスでも指摘されているように、アプリケーションのパフォーマンスと信頼性を向上させるための重要な機能です。トレース情報を Cloud Logging で直接利用できるようにすることで、アプリケーション内で何が起こっているのかを簡単に理解できるようになりました。

トレースは、伝搬したリクエストの視点からイベントに関する関連情報を合成することで、分散アーキテクチャで動作するアプリケーションの全体的なパフォーマンスを把握するための重要な情報を提供します。  これらのイベントはスパンと呼ばれ、トレース オブジェクトの構成要素となっています。

ログとトレースを使った知見と相互関係の高速化

分散トレースは、ログ情報と分散システムのソース レイテンシを関連付けることで、平均修復時間(MTTR)を短縮するユニークな機能を提供します。この機能は、ユーザーが Google Kubernetes Engine(GKE)のような分散コンピューティング環境でワークロードを実行したり、それらと相互作用する場合に特に重要となります。

アプリケーションが構造化されたログ出力を生成するようにインストルメンテーションされている場合、Google Cloud Logging ライブラリOpenTelemetry を使ってトレースを生成すると、Cloud Logging 内のログラインにトレース ファセットが自動的に表示されます。これにより、因果関係のあるイベントをすばやく理解できます。

この機能を説明するために、以下のような状況のトラブルシューティングの簡単さを考えてみましょう。これは、Cloud Run インスタンスが GKE クラスタに検索をかけ、さらに Cloud SQL で管理されるデータベース レイヤに検索をかけるものです。Cloud Run で呼び出しを行うアプリケーションは Go で、GKE の中間ティアは Python(Flask)でデプロイしています。

https://storage.googleapis.com/gweb-cloudblog-publish/images/1_Cloud_Logging.max-800x800.jpg

この例では、サポート スタッフの一人が、Google Cloud Console のアクティビティ ログに、マイクロサービス ベースのアプリケーションが大幅にスローダウンしたという通知を確認します。この問題を解決する一般的な方法は、その時間帯のすべてのソリューション ログを調べて、根本的な原因を見つけることです。しかし、オペレーション チームがすべてのワークロードをインストルメンテーションしてトレースを生成していれば、アプリケーション オーナーはその情報をもとに、問題の原因がどのサービスにあるのかを絞り込むことができます。遅れているサービスを特定した後、サービス オーナーをフォローアップしてトラブルシューティングを行うことで、MTTR を大幅に削減できます。

以下の動画キャプチャでは、Cloud Logging プロダクトのログ エクスプローラにトレース情報を統合する方法を紹介します。

https://storage.googleapis.com/gweb-cloudblog-publish/original_images/2_Cloud_Logging.gif

Google Cloud サービスでのトレースの生成方法

上記のサンプルのトレースを作成するために、Cloud Trace のバックエンドは、異なる Google Cloud サービス(Cloud Run、GKE、Cloud SQL)を介してリクエストが伝播する際に生成されたすべてのスパンを合成しました。そして、そのデータを Cloud Logging のログ エクスプローラに表示しました。各サービスでのスパンの作成方法の概要は以下の通りです。

  • Cloud Run: 生成されたスパンはすぐに使用できる(OOTB)機能であり、先行するロードバランサと Cloud Run のコンピューティング インスタンスの内向きと外向きのアウトを代表するもの。

  • GKE Pod: Python の Flask アプリケーションは、デベロッパーが OpenTelemetry Flask Instrumentor をアプリケーションに実装した結果、スパンを生成する。

  • Cloud SQL: SQL ステートメントが Sqlcommenter で補強されている場合、クエリの実行時間に合わせてスパンが自動的に生成される。

結果として、ログラインに埋め込まれたトレース階層のサンプルを以下に示します。

https://storage.googleapis.com/gweb-cloudblog-publish/images/3_Cloud_Logging.max-1000x1000.jpg

使ってみる

Cloud Logging でトレースを表示するには、まず Google Cloud 上で動作するアプリケーションを計測し、構造化されたログ出力トレースを生成する必要があります。GKE は標準出力と標準エラーに書き込まれたログを自動的にキャプチャします。または、Google Cloud Logging ライブラリを使用して、Cloud Logging API を使用できます。トレースをキャプチャするには、OpenTelemetry でアプリケーションをインストールすることをおすすめします。この Codelab では、OpenTelemetry でアプリケーションをインストールし、そのトレースを Cloud Trace に送信することを体験できます。

ご質問やフィードバックがございましたら、Google Cloud Community ページをご覧いただき、コメントをお寄せください。

- Google Cloud プロダクト マネージャー、Eyamba Ita

- Cloud Developer Relations 担当デベロッパー アドボケイト、Yoshi Yamaguchi

投稿先