このエントリは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以上 |
JVM | JDK 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の組み合わせ。
