Azure Monitor (Application Insights) のJava Profilerを使う

このエントリは2022/11/24現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容との乖離が発生する可能性があります。

2022年10月、Azure MonitorのコンポーネントであるApplication Insightsで、Java Profiler機能がPublic Previewになった。これは、Application InsightsでProfilerを実行するトリガーを設定しておき、監視対象のサービスがトリガーとして指定したしきい値を超えた場合に、JDK Flight Recorderを使ったProfilingを自動的に開始する、というもの。元々.NETランタイム用にあった機能をJavaにも拡張したものである。

Announcing Preview: Java Profiler for Azure Monitor Application Insights
https://techcommunity.microsoft.com/t5/azure-observability-blog/announcing-preview-java-profiler-for-azure-monitor-application/ba-p/3650053

ドキュメントはこちら。

Java Profiler for Azure Monitor Application Insights
https://learn.microsoft.com/azure/azure-monitor/app/java-standalone-profiler

設定方法はドキュメントに記載されている通りなので、それほど迷うことはない(はず)が、前提条件には注意が必要。とにもかくにも、いつまでもJava 8を使わずに早急にアップデートしてください。

Application Insightsのエージェントバージョン3.4.1以上
JVMJDK Flight Recorder (JFR) を使用できること。
Java 8 Update 262 以後
Java 11 以後
ただしOpenJ9は対象外


この機能はJavaで動作するアプリケーションやPaaSサービスで利用可能。つまりApp ServiceやFunctions、Spring Appsだけでなく、Kubernetes ServiceやContainer Instance、Container Apps、果てはVirtual Machineにおいても利用できる。

プロファイルのための条件を設定するには

Azure Monitor > Application Insights > 【調査/Investigate】>【パフォーマンス/Performance】 を開くと、Application Insightsで監視しているアプリケーション(群)の状況を確認できる。

表示されるグラフの上にある【プロファイラー/Profiler】をクリックすると、設定したトリガーに従って自動的にプロファイルされたJFRの記録がリストで並んでいる。オレンジでマークした【今すぐプロファイル/Profile now】をクリックすると、トリガー設定とは無関係にオンデマンドでプロファイルを開始できる。

トリガー元(Triggered By)は表記で識別できるようになっている。

  • CPUトリガー : JFR-CPU
  • メモリトリガー: JFR-MEMORY
  • オンデマンド : JFR-MANUAL

プロファイル開始のトリガーを構成するには、緑色でマークした【トリガー/Triggers】をクリックすると、Azure Portalの右側から、CPU、メモリ、サンプリングに対するトリガー設定を構成できる画面が出てくる。

ただ2022/11/25時点では、CPUとメモリに対してのみトリガーを設定でき、サンプリングの設定は効果がない点に注意が必要。トリガー設定に関する内容は以下のドキュメントを参照。

CPU
https://learn.microsoft.com/azure/azure-monitor/app/java-standalone-profiler#cpu

メモリ / Memory
https://learn.microsoft.com/azure/azure-monitor/app/java-standalone-profiler#memory

取得したいイベントを指定するには

Application Insightsエージェントと一緒に渡すapplicationinsights.jsonにて、どのプロファイルを使ってイベントを収集するかを指定できる。デフォルトだとprofile-without-env-dataだが、それ以外にJFRのデフォルトprofileを利用することも、カスタムプロファイルを作成して指定することもできる。詳細はドキュメントの構成ファイルの項を参照。

構成ファイル / Configuration file
https://learn.microsoft.com/azure/azure-monitor/app/java-standalone-profiler#configuration-file

JFRファイルを取得するには

Application Insights Profilerの画面に現れる【最近のプロファイリング セッション / Recent profiling sessions】に現れるリスト右にある【ダウンロード / Download】をクリックすると、JFRファイルをダウンロードできる。

あとはMission Controlを使って内容を確認する、といういつものJFR + Mission Controlの組み合わせ。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中