JDK 17 で実行されている Java アプリケーションを Application Real-Time Monitoring Service (ARMS) に接続した後、ARMS コンソールにモニタリングデータが表示されない場合があります。この問題は、ARMS エージェントのバージョンが JDK 17 をサポートしていない場合、または古い Servlet API の依存関係がエージェントのインストルメンテーションロジックを妨げている場合に発生します。
原因 1:ARMS エージェントのバージョンが JDK 17 をサポートしていない
JDK 17 のサポートは、ARMS エージェント V2.8.3 で導入されました。ご利用のエージェントが V2.8.3 より古い場合、JDK 17 で実行されているアプリケーションをインストルメント化できず、モニタリングデータは収集されません。
バージョン要件
| アプリケーションフレームワーク | ARMS エージェントの最小バージョン |
|---|---|
| JDK 17 (Spring Boot 3.0 なし) | V2.8.3 |
| JDK 17 と Spring Boot 3.0 | V2.9.1.2 |
ARMS エージェント V2.8.3 は JDK 17 をサポートしていますが、Spring Boot 3.0 はサポートしていません。Spring Boot 3.0 には JDK 17 が必要です。アプリケーションで Spring Boot 3.0 を使用している場合は、ARMS エージェントを V2.9.1.2 以降にアップグレードしてください。
ソリューション
ARMS エージェントを、ご利用のアプリケーションフレームワークに適合するバージョンにアップグレードします。アップグレード手順については、ARMS エージェントのアップグレードに関するドキュメントをご参照ください。
修正の確認
アップグレード後、アプリケーションを再起動します。
ARMS エージェントの起動ログを調べて、正しいエージェントバージョンがロードされていることを確認します。エージェントのバージョン番号を含むログエントリを探してください。
ARMS コンソールを開き、アプリケーションのモニタリングページに移動します。
数分以内にモニタリングデータが表示されることを確認します。
原因 2:古い Servlet API の依存関係による不適切なインストルメンテーション
Spring Boot 3.0 以降、組み込みの Apache Tomcat は Tomcat 10 にアップグレードされ、Servlet 5.0 を使用するようになりました。このバージョンでは、Servlet API のパッケージ名が javax から jakarta に変更されました。
ARMS エージェントは、Servlet API のパッケージ名を使用して、インストルメンテーションを適用する場所を決定します。アプリケーションの POM の依存関係に、アプリケーションが実際には使用しない古い Servlet API バージョン (javax パッケージ名を使用するもの) が含まれている場合、エージェントは誤ったパッケージ名を検出し、jakarta の代わりに javax にインストルメンテーションを適用します。その結果、インストルメンテーションは有効にならず、コンソールにはモニタリングデータが表示されません。
確認方法
プロジェクトの pom.xml を調べて、javax 名前空間を使用する Servlet API の依存関係がないか確認します:
<!-- 例:問題を引き起こす古い依存関係 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>お使いの Spring Boot 3.0 アプリケーションにこのような依存関係が含まれているものの、実際には使用されていない場合、ARMS エージェントがインストルメンテーションのターゲットを誤って識別する可能性があります。
ソリューション
次のいずれかのアプローチを選択します:
未使用の Servlet API の依存関係を削除する。 アプリケーションで不要な場合は、
pom.xmlからjavax.servletの依存関係を削除します。これにより、ARMS エージェントが正しいjakartaパッケージ名を検出できるようになります。ARMS エージェントを V3.2.0 以降にアップグレードする。 ARMS エージェント V3.2.0 では、POM 内の古い依存関係に関係なく、アクティブな Servlet API パッケージ名を正しく識別することで、この問題が修正されています。V3.2.0 にアップグレードするには、チケットを送信してください。
修正の確認
未使用の依存関係を削除するか、ARMS エージェントをアップグレードした後、アプリケーションを再起動します。
ARMS エージェントの起動ログを調べて、エージェントが正常にロードされたことを確認します。
ARMS コンソールを開き、アプリケーションのモニタリングページに移動します。
数分以内にトレースやメトリックなどのモニタリングデータが表示されることを確認します。
クイックリファレンス
| 症状 | 考えられる原因 | 修正方法 |
|---|---|---|
| データなし、ARMS エージェントが V2.8.3 より古い | エージェントが JDK 17 をサポートしていない | V2.8.3 以降にアップグレード |
| データなし、Spring Boot 3.0 アプリ、ARMS エージェントが V2.9.1.2 より古い | エージェントが Spring Boot 3.0 をサポートしていない | V2.9.1.2 以降にアップグレード |
データなし、Spring Boot 3.0 アプリ、POM に古い javax.servlet 依存関係あり | エージェントが誤ったパッケージ名にインストルメンテーションを適用 | 古い依存関係を削除するか、V3.2.0 以降にアップグレード |