分散トレース、ランタイムメトリクス、ログ分析、シンセティックテスト、リアルユーザーモニタリングに加え、より迅速に、そして簡単にパフォーマンスの問題をトラブルシューティングできる新たなアプリケーションデベロッパー用ツールが完成しました。本日ここに、常時接続型の本番環境プロファイラー、プロファイリングをご紹介します。プロファイリングを使用すると、最小限の付帯コストで環境全体のパフォーマンスをコードレベルで継続的に分析できます。プロファイルにより、CPU やメモリーなどリソースを最も消費している関数 (またはコード行数) が明らかになるため、これらを最適化することでエンドユーザーレイテンシーおよびクラウドプロバイダーの両方のコストを削減できます。
Datadog で、以下を実現できるようになりました。
- [すべてのスタックトレースを 1 つの画面で可視化する](#すべてのスタックトレースを 1 つの画面で可視化する)
- コードのボトルネックをすばやく見つける
- プロファイルと分散トレースの相関性を理解する
- パフォーマンスの改善に役立つ実用的な分析情報を得る
- 長期的なパフォーマンス傾向を追跡する
- タグを使用してプロファイルに的を絞る
Datadog プロファイリングで運用コードを分析し、パフォーマンスを改善しながらインフラストラクチャーコストを削減。
すべてのスタックトレースを一つの管理画面で可視化する
プロファイリングを使用すると、プログラムが本番環境でどのように実行されるか監視できるため、Java の OutOfMemoryError
例外やロック競合など、実際の条件下で発生するパフォーマンスの問題を効率的に診断して解決することができます。同時に、知らぬ間にアプリケーションに不要な付帯コストを追加しているコード行数を表面化できる可能性もあります。
プロファイリングは、分析対象が自分のコードか、サードパーティライブラリかにかかわらず、すべてのスタックトレースの典型的なサンプルを収集し、フレームグラフとして可視化します。各バーは関数を表し、プログラムの実行中に呼び出された順番で上から下へ垂直方向に並べられます。上記の Java プロファイルでは、各フレームの幅はリソースの消費量に相当し、色でパッケージを識別しています。
これらのスタックトレースを調査することで、関数がコールされるさまざまな方法を理解することができるうえ、どの関数がリソースを最も消費しているか把握できます。アプリケーションのスケールを拡大する際は、リソースを消費しているコードセクションを最適化することで、エンドユーザーレイテンシーとインフラストラクチャーコストを大幅に削減できます。使用しているプログラムの言語によっては、CPU、メモリー、ロック、I/O をはじめとするさまざまなプロファイルタイプを調査できます。
コードのボトルネックをすばやく見つける
右側のパネルの集計表を使用して、メソッド、スレッド、パッケージなどのさまざまな属性でコールスタックを絞り込むことができます。たとえば、Socket I/O プロファイルでは、読み込みデータ量や書き込みデータ量の多い順、または、プロセスの所要時間の長い順に並べ替えられたスレッド、IP アドレス、ホストの一覧を確認できます。これにより、フレームグラフを容易に絞り込んで特定のホストからの該当するコールスタックのみを表示し、特定の読み込みまたは書き込み操作を最適化する方法を断定できます。
プロファイルと分散トレースの相関性を理解する
プロファイリングの開発にあたり、プロファイリングが Datadog プラットフォームの他の機能と確実に統合できることを目指しました。分散トレースと APM により、サービス全体で各リクエストのパスを追跡し、ボトルネックを生み出しているステップ、または、エラーを引き起こしているステップを特定できます。パフォーマンスの問題をデバッグするためのコンテキストをさらに詳細に提供するため、APM とプロファイリング間でシームレスに分析できるよう取り組んでいます。
APM で特に遅いリクエストを調査する場合、クリック 1 つで関連するプロファイルを分析し、そのリクエストのリソースのボトルネックを特定できます。同様に、プロファイル内でリソースを最も消費するリクエストを特定して APM で調査し、より大きな視野から見たリクエストの状況 (例 : 他にはどのようなサービスがこのリクエストでコールされたか) や、ビジネスにどのような影響を与えるか (例 : リソースを最も多く使用しているカスタマーは誰か) などを把握することができます。
パフォーマンスの改善に役立つ実用的な分析情報を得る
Datadog はコードの発見的分析を自動的に実施し、分析ビューの上部に主な問題個所のサマリーを表示します。下記の例では、ブロックされているスレッド、非効率的なガベージコレクション、メモリーリークに対処することでパフォーマンスを最大限改善できることがわかります。さらに詳しい分析情報として、コードキャッシュ、クラスローディング、ヒープなどのカテゴリー別に内訳された完全なデータを見ることができます。
長期的なパフォーマンス傾向を追跡する
プロファイリングは、個々のマシンに繰り返しアクセスしなくても、すべてのホストから常時データを収集して長期的なパフォーマンスの傾向を監視できる非常に効果的な方法です。プロファイルのメトリクスタブでは、メソッドごとのトップ CPU 使用量、スレッドごとのトップメモリー割り当て、フェーズごとのガベージコレクションなど、主要メトリクスの概要を取得できます。
すべてのグラフに共通してプロファイル時間が表示されるため、例えばロックの待ち時間のスパイクが反復的 (上記の例) か 1 回限りの行動かを確認できるため、適切なアクションを取ることができます。さまざまなメトリクスを相互に関連付けることで、アプリケーションのパフォーマンスに関するより包括的な見解が得られます。また、興味深い傾向を発見した場合は、カスタムダッシュボードにグラフを追加したり、メトリクスがクリティカルなしきい値を超えて増減した時にチームに通知するアラートを作成したりできます。
タグを使用してプロファイルに的を絞る
プロファイリングは常時接続するよう設計されているため、サービス停止などの一刻を争う状況でも、ダウンタイム前および最中に保存されたプロファイルを取得して効率的に問題をデバッグできます。プロファイルの検索ビューではすべてのプロファイルが一つの管理画面で表示されるため、特定のホスト、サービス、バージョン、あるいはその組み合わせなど、プロファイルのさまざまな側面をすばやく詳細に解明できます。また、サイドバーのコントロールを使用すると、プロファイルを最大 CPU や最大メモリー消費量で絞り込めます。プロファイルをクリックすると、スタックトレースのフレームグラフが表示され、さらに詳細なビューをひと目で確認できます。
Datadogプロファイリングであらゆるコードのパフォーマンスを最適化
プロファイリングを開始する
プロファイリングを分散トレース、リアルユーザーモニタリング、ネットワークパフォーマンスモニタリング、Synthetics、ログ管理と併用すれば、より一層可視性を高めることができるため、本番環境コードのパフォーマンスの改善やクラウドインフラストラクチャーコストの削減に役立ちます。現在、プロファイリングは非公開ベータ版でご利用いただけます。また、Java、Python、Go に対応しています (.NET、Node.js、PHP に対応、Ruby には近日対応予定)。すでに Datadog でインフラストラクチャーの監視をしている場合は、こちらからサインアップしてアクセスできます。または、今すぐ 14 日間の無料トライアルをお試しください。