使ってみようStackdriver Trace on GKE
TL;DR: パフォーマンス管理がStackdriver Traceを利用すると簡単に始められます。Stackdriver loggingも併用するとより分析が詳細かつ手軽に行えるようになります。
アプリケーションのパフォーマンス管理とは
アプリケーションのパフォーマンス管理(Application Performance Management = APM、以下APM)とは、アプリケーションの性能に関するメトリクスを取得・分析する事です。これにより運用において、ビジネス要件の中の性能に関する要件を定常的に確認し、違反があった場合はそれを迅速に修正、違反が予期される場合は予防をする事が可能となります。
APMでは主に以下のタスクを行います。従来より、ロギングやモニタリングは一般的に行われておりましたが、分散コンピューティングの普及、アプリケーションを構成するコンポーネントの増加という背景により、一歩進んだタスク(トレーシング、プロファイリング、デバッグ)の実行が必要となるケースが増えてきました。
- ロギング(従来のログ監視)
- モニタリング(従来のリソース監視)
- 分散トレーシング
- プロファイリング
- デバッグ
今回はこちらの中からトレーシングに注目して、GCPでどうやって実現するかご紹介します。
分散トレーシングとは
マイクロサービスアーキテクチャの採用などにより、ユーザーからのリクエストを1つ処理する際、複数のサービス(アプリケーション)で処理を行いレスポンスを返すという形の処理モデルが普及しております。
こういった処理モデルでは多くの場合、アプリケーション同士を物理的/論理的に隔離して実行するため、ユーザーからのリクエストがどのアプリケーションでどのタイミングで処理されたか追跡することが困難になります。
分散トレーシングとはユーザーからのリクエストを追跡し、各アプリケーションにおける処理時間を記録する事を指します。GCPではStackdriver Traceを用いて実現することができます。
Stackdriver Traceとは
分散トレーシングを行うために利用できるサービスでGCP内外から利用する事が可能です。Stacdriver Traceを用いると分散トレーシングが実現できることに加え、以下を実現することができます。
- アプリケーション全体、もしくは詳細な1リクエスト毎の遅延情報把握
- 期間とバージョン毎の性能比較と深刻な性能変化の自動検知
Stackdriver Traceにトレース情報を送る場合は、プログラミング言語毎のライブラリを用いる方法が一般的です。利用は簡単ですぐに試すことができますので、こちらのStackdriver Traceの設定というページをご参考にお試しください。またこちらのサンプルアプリケーションをデプロイいただいいてもTraceのイメージをすぐにつかめるかと思います。
次にStackdriver Traceのデータモデルについて整理します。Stackdriver Traceではtraceとspanという2つの概念が存在します。traceとはユーザからリクエストを受け取り、レスポンスを返すまでの処理全体の 全体時間を意味します。一方でspanとは一つのアプリケーション(マイクロサービス)が行う処理の全体時間を意味します。spanはユーザーが柔軟に設定できますので、マイクロサービス毎や関数毎など様々な粒度で設定を行い、ユーザーが行いたい分析に合わせてカスタマイズができるようになっています。くわしくはこちらを御覧ください。
GKE上のアプリケーションの分散トレーシングを効率的に行う
最後に一点、GKE上のアプリケーションの分散トレーシングを行う際に実践するとよいTipsを一点お知らせしたいと思います。
- ログ情報とTrace情報のヒモ付を行う。
GKEではデフォルトでコンテナから出力メッセージがStackdriver Loggingに連携されるようになっています。出力されるメッセージを1行のjson形式にするとstackdriverに連携された際の形式が構造化されます。この構造化機能を利用し、以下の形式のメッセージを出力するとTraceの情報とLoggingの情報を紐付ける事ができます。詳細はこちらを御覧ください。
{"logging.googleapis.com/trace": "trace識別子", "logging.googleapis.com/spanId": "span識別子",
...}
trace識別子: traceのリソース名。相対パスの場合、//tracing.googleapis.com
. からの相対パスとして認識される。サンプル projects/my-projectid/traces/06796866738c859f2f19b7cfb3214824
span識別子: スパンID(16-character hexadecimal encoding of an 8-byte array)。 サンプル"000000000000004a"
サンプル
こちらにGo言語、Stackdriver Trace、GKEを使ったサンプルもありますので、実際の動きを簡単なサンプルコードとともに確認することも出来ます。ご興味ある方はぜひお試しください。
まとめ
パフォーマンス管理がStackdriver Traceを利用すると簡単に始められます。Stackdriver loggingも併用するとより分析が詳細かつ手軽に行えるようになります。ご興味ある方はまずチュートリアルやサンプルを実行してイメージをつかんでください。