本番環境でアプリケーションパフォーマンスを監視したり問題をトラブルシューティングしたりするときは、コンテキストを知ることが重要です。入手した情報が多ければ多いほど、ユーザーに影響する問題をよりすばやく回避または検出できます。オブザーバビリティツールには、データのコンテキスト調査に役立つさまざまな機能が用意されています。その1つがコードプロファイリングです。このブログ記事では、コードプロファイリングの概要と使用例をご紹介します。
サービスのパフォーマンスに問題が発生したときにコードプロファイリングを使用すれば、エンジニアはリソースのボトルネックをコードレベルで可視化してトラブルシューティングに役立てることができます。さらに、コードがCPUやメモリーの使用率に与える影響を継続的に測定して、サービスのパフォーマンス低下の原因になっていないかを確認できます。コードプロファイリングについて具体的に説明する前に、いくつかの用語の定義を示します。
コードプロファイリングによって本番環境からコールスタックが収集され、そのコールスタックの定期的なスナップショットがエージェントからコレクター経由でバックエンドのAPMに送られます。その後、APMソリューションによって、エンジニアが理解しやすいチャートやフレームグラフの形式でコードのパフォーマンスが可視化されます。
Splunk APMでは、AlwaysOn Profiling®ツールを介してコードプロファイリング機能を利用できます。2022年のAWS re:Inventで開催されたAWS GameDayでは、パフォーマンスに影響を与えているコードの問題をSplunk APMとAlwaysOn Profilingを使って特定、解決するというセッションが行われました。
GameDayの参加チームには、実行に時間のかかるコールが隠されたJava Webアプリケーションが渡されました。Splunk APMとSplunk AlwaysOn Profilingツールを設定してコードを調査することで、問題のあるファイルとその中のコード行を突き止めることができます。
セッションが始まると、チームはまずSplunk Observability Cloud UIに表示されるガイドに従ってSplunk APMをすばやくセットアップする必要があります。アプリケーションをOpenTelemetryでインストルメント(計装)してデータをSplunk APMに送信するように設定すると、数分以内にアプリケーションのメトリクス、サービスマップ、ビジネスワークフローが表示されます。
次に、トラブルシューティングの追加情報を得るために、アプリケーションを起動するコマンド行を少し変更してAlwaysOn Profilingを実装します。AlwaysOn Profilingが有効になると、Splunk APMでアプリケーションサービスのコールスタックが表示されます。
ここまでの準備ができたら、トラブルシューティングを開始して、アプリケーションのパフォーマンスに影響を与えている実行時間の長いコールを特定できます。AlwaysOn Profilingでは、コールスタック情報が表形式とフレームグラフ形式で表示されます。コールスタックを見れば、目的のサービスフロー内のコードで実行された個々のメソッドとコールの情報を確認できます。
左の表には、実行されたメソッドの名前、そのコールの実行にかかった時間、コールスタック内でのそのコールの実行回数が表示されます。この表から、「sleep」のコールに時間がかかっていることがすぐにわかります。「sleep」コールを選択して展開すると、あるトレースの実行時間が他のトレースよりも大幅に長いことがわかります。
最も時間がかかっている「sleep」コールを選択すると、このコールのスタックトレースが右側に表示されます。スタックトレースを見ると、このコールがDoorChecker.javaの36行目にある「precheck」メソッド内で実行されていることがわかります。ここまで問題を特定できたら、あとはアプリケーションのコードを変更して時間のかかっているコールを修正するだけです。
このように、Splunk APMを使ってAlwaysOn Profilingを有効にすることで、問題をすばやく調査、特定、解決できます。アプリケーションの問題はシステムのダウンタイムの問題ほど単純でないことがあります。しかも、パフォーマンスの低下は顧客満足度の低下につながります。APMとコードプロファイリングツールでパフォーマンスとコードレベルのインサイトが得られれば、問題をすばやく解決し、アプリケーションコードを最適化できます。
現在、AlwaysOn Profiling機能はJava、.NET、Node.jsアプリケーションに対応しており、他の言語も順次サポートされる予定です。Goとその他いくつかの言語ではプロファイリングがサポートされていませんが、自動インストルメンテーションが可能です。コードプロファイリングの便利さと問題解決の速さを実際に体験したい場合は、Splunk Observability Cloudの無料トライアル版をご利用ください。
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。