コンテンツに移動
Google Cloud

Stackdriver APM : Trace、Debugger、Profiler でアプリのパフォーマンスを分析し問題解決を支援

2018年5月10日
Google Cloud Japan Team

パフォーマンスの影響を受けやすいアプリケーションに対し、分散トレーシング、デバッグ、プロファイリング機能を提供

ユーザーを大切にしたいと思う開発者であれば、誰もがアプリケーションのパフォーマンスのことで頭がいっぱいになり、どうすればアプリケーションをさらに高速化し、信頼性を高められるかを考えていることでしょう。Stackdriver Monitoring および Logging などの監視ソフトやログ管理ソフトは、防御の最前線となってインフラストラクチャやセキュリティの潜在的問題を警告してくれますが、パフォーマンスの問題がそれよりもっと深いコードにある場合はどうすればよいのでしょうか。

コード内に潜むパフォーマンスの問題を追跡するのが難しいことは、私たち Google もよく知っています。特にアプリケーションが稼働中であればなおさらのことでしょう。そこでこのたび、Google が社内でアプリケーションのパフォーマンスを監視して調整する際に利用している、Application Performance Management(APM)機能を備えた新プロダクトを発表しました。新しいツールは十分にパワフルで、稼働場所を問わずどんなアプリケーションにも対応し、開発者であれば誰でも利用できるような料金設定になっています。

この APM ツールは、Stackdriver Trace および Debugger という 2 つの既存プロダクトをベースとしています。この 2 つは、ユーザー エクスペリエンスにまったく影響を与えることなく稼働中のアプリケーションを分析しデバッグする機能を備えています。

また、APM ツールキットには Stackdriver Profiler も加わっています。Stackdriver Profiler は、コードが実際に本番環境でどのように動くのかをプロファイリングし調査できるようにするもので、これを使用すればパフォーマンスの最適化やコンピュータの利用コスト削減につながります。

さらに、Stackdriver Debugger、GitHub Enterprise、GitLab 間でのインテグレーションも可能になりました。これにより、ローカルに保存されたソース コードに加えて、GitHub、Bitbucket、Google Cloud Repositories の既存のコード ミラーリング機能が強化されます。

これらのツールは、クラウド上で稼働しているコードやアプリケーションであればすべてに対応するほか、オンプレミスのインフラストラクチャにも対応しています。つまり、アプリケーションが稼働している場所に関係なく、一貫した API ツールキットにアクセスでき、アプリケーションのパフォーマンスを監視し管理できるようになるのです。

Stackdriver Profiler とは

プロダクション プロファイリングは非常にパワフルで、どの機能やどのコードがアプリケーション全体のパフォーマンスに影響しているかを測定できます。もし本番環境にてコードの実行を分析しない場合は、想定以上にリソースを必要とする機能によってレイテンシやウェブ サービスのコストが日々高まったとしても、それに誰も気づかず、対処もできないということになりかねません。

Google ではアプリケーションのプロファイリングを継続的に実施することで、非効率に書かれたコードの特定を行っており、社内で毎日のようにこうしたツールが使われています。ただし、Google 以外のサービス開発者の間では、このようなテクニックはあまり普及していません。その理由は以下のとおりです。

  1. クライアント アプリケーションのプロファイリングをローカル環境で行うと有益な結果が出るが、開発環境やテスト環境でサービスの実行を調査しても大した結果は得られない。
  2. 稼働中のサービスのパフォーマンスを従来の方法でプロファイリングすることは困難であり、パフォーマンスが落ちるリスクも生じる。
  3. 既存のプロダクション プロファイリング ツールは高価であり、それを使わなくても、パフォーマンスの悪いサービスの場合はコンピューティング能力を追加して単純にスケールアップする方法を選べる(この方法でも費用はかかる)。

Stackdriver Profiler は上記のような懸念事項を解消します。

  1. Stackdriver Profiler は、すべての環境でコードの実行を分析します。
  2. 継続的に実行され、統計的な手法を用いることで、ターゲットとするコードベースへの影響を最小限に抑えます。
  3. パフォーマンスの問題を特定し、それを修復することでコスト効率を高めます。スケールアップによって毎月の請求額が増加することもありません。

Stackdriver Profiler は、アプリケーションの全インスタンスにわたって稼動している軽量のサンプリング ベースの計測器を介してデータを収集します。こうして集められたデータはフレーム チャートとして表示され、その横軸には各関数の選択した指標(CPU 時間、実測時間、RAM 使用量、競合など)が、縦軸には関数呼び出しの階層が示されます。

https://storage.googleapis.com/gweb-cloudblog-publish/images/profiler_updated.max-700x700.png

早期試用プログラムに参加されたお客様は、Stackdriver Profiler をパフォーマンス向上およびコスト削減のために利用しています。

当社ではサービスのスケーラビリティを向上させる取り組みの一環として Stackdriver Profiler を利用しました。これにより、CPU 時間を最適化してコストを削減できる箇所を特定できるようになり、非常に役に立ちました。

Evan Yin 氏、Snap のソフトウェア エンジニア

Stackdriver Profiler によって、コード内のどこが非常に遅いのかを特定できました。巨大で複雑なバッチ プロセスの中に隠れていたのです。日々、何百ものバッチを実行しており、それぞれデータセットや設定が異なるため、クライアント固有の設定に関するパフォーマンスの問題を追跡することは難しいのですが、Stackdriver Profiler のおかげでとても助かりました。

Nicolas Fonrose 氏、Teevity の CEO

Stackdriver Profiler は現在パブリック ベータ版となっており、すべてのユーザーが利用できます。サポート対象は以下のとおりです。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen2BShot2B2018-03-282Bat2B10ddw0.max-700.max-700x700.png

Stackdriver Debugger で面倒なコードの問題を発見

Stackdriver Debugger は、稼働中のアプリケーションの場合でもお客様に影響を与えることなく、なじみ深いブレークポイント スタイルのデバッグ プロセスを提供します。

https://storage.googleapis.com/gweb-cloudblog-publish/original_images/552-GCP-Debugger2BGIF2BResizeixh1.GIF

また、Stackdriver Debugger のログポイント機能を使用すると、稼働中のアプリケーションを再デプロイすることなくログ ステートメントを即座に追加できます。

Video Thumbnail

Stackdriver Debugger は、見つけるのが難しいプロダクション コードの問題について、根本原因の分析を簡素化します。Debugger なしにこうした問題を見つけるには、新たなログ ステートメントをアプリケーション コードに手動で追加し、影響の出ているサービスを再デプロイする必要があります。そして、実際に何がおかしいのかを把握するためログを分析し、発見された問題を修復するか、さらにログ ステートメントを追加して同じことを繰り返さなくてはなりません。一方、Debugger を使用すれば、このような繰り返し作業は完全に必要なくなります。

Stackdriver Debugger は正式リリース(GA)されており、以下の言語とプラットフォームに対応しています。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen2BShot2B2018-03-272Bat2B9opdj.max-700x700.PNG

Stackdriver Trace でレイテンシを低減

Stackdriver Trace は、お客様のリクエストがどのようにアプリケーションに伝播するかを分析するもので、レイテンシを低減し根本原因を分析するのに非常に役立ちます。具体的には、継続的にリクエストをサンプリングし、伝播の様子やレイテンシを自動的にキャプチャします。そして結果を表示し、レイテンシ関連のトレンドを見つけ出します。Trace にカスタム メタデータを追加すれば、より詳細な分析も可能です。

https://storage.googleapis.com/gweb-cloudblog-publish/images/stackdriver-apm-2lq7g.max-600x600.PNG

Trace は Google の Dapper をベースとしています。Dapper は分散型トレーシングのコンセプト モデルの先駆けとなったもので、Google では今でも Dapper を日々利用してサービスを追跡し、信頼性の向上に努めています。

Stackdriver Trace は今後数週間以内にマルチプロジェクト対応となる予定です。これは以前からリクエストされていた機能で、複数の Google Cloud Platform(GCP)プロジェクトの全トレースを同時に表示できるようにします。詳細は近いうちにお知らせします。

Stackdriver Trace は正式リリース(GA)されており、サポート対象のプラットフォームと言語は以下のとおりです。

https://storage.googleapis.com/gweb-cloudblog-publish/images/Screen2BShot2B2018-03-272Bat2B91b3j.max-700x700.PNG

Stackdriver APM をお試しください

アプリケーションをリリースしたばかりであっても、もしくはすでに本番稼働しているとしても、APM ツールでパフォーマンスを監視し調整すれば状況は大きく変わるでしょう。Stackdriver APM の使用方法は簡単です。各ツールに適切な計測ライブラリをアプリケーションへとリンクし、分析のための遠隔測定を開始するだけです。Stackdriver Debugger は現在、ベータ版の Stackdriver Profiler と同様に無料で利用できます。また、Stackdriver Trace にはトレース送信が無料になる月間クォータが大量に含まれています。

詳細は、Stackdriver ProfilerDebuggerTrace のドキュメントをご覧ください。

* この投稿は米国時間 3 月 28 日、Product Manager の Morgan McLean によって投稿されたもの(投稿はこちら)の抄訳です。

- By Morgan McLean, Product Manager

投稿先