次の方法で共有


Java 診断エージェントの始め方

この記事では、Java 診断エージェントの使用を開始する方法について説明します。 また、IntelliJ IDEA 用の AKS プラグインの Java 診断ツールについても説明します。

Java 診断エージェントは、Java プロセスをトラブルシューティングするための Java エージェントです。 アプリケーションをリビルド、再デプロイ、または再起動する必要はありません。 現時点では、Java クラスの関数に関するログの追加がサポートされています。 関数が呼び出されると、関数によって消費された合計時間の計算と共にログが出力されます。

前提 条件

  • あなたのクラスターに diag4j がインストールされていること。

  • IntelliJ IDEA

  • Java LTS バージョン 11、17、または 21。

  • IntelliJ IDEA プラグイン (ローカルで [設定]>[プラグイン]>[ディスクからプラグインをインストール] でインストール)。

    Azure Toolkit for IntelliJ プラグインが選択され、[ディスクからプラグインをインストール] メニュー項目が強調表示されている IntelliJ IDEA 設定ページのスクリーンショット。

  • トラブルシューティングに使用する Java アプリケーション。 詳細については、「Spring Boot アプリケーションを Azure Kubernetes Serviceにデプロイする」を参照してください。

ポートフォワーディングを設定する

次のコマンドを使用して、エージェント サービスへのポート転送を確立します。

kubectl port-forward svc/diag4j-agent-service -n <namespace> <port>:8080

IntelliJ IDEA 用の AKS プラグインで Java 診断ツールを使用する

AKS プラグイン上の Java 診断ツールを使用して、Azure Kubernetes Service (AKS) クラスター上のポッド コンテナーで実行されている Java アプリケーションに Java 診断エージェントをアタッチできます。

エージェントをアタッチすると、クラス関数の周囲にログを追加するなどのトラブルシューティング タスクを実行できます。 このログを使用して、関数が実行されるかどうかをテストし、関数に費やされた合計時間を計算できます。 この分析は、アプリケーションでパフォーマンスのボトルネックを見つけるのに役立ちます。

プラグインの構成は、[診断] タブに表示されます。ここで、次の作業を行うことができます。

  • エージェント サービスに転送するローカル ポートを構成します。
  • ローカル環境で kubeconfig と共に一覧表示されているポッドを表示します。
  • [更新] を選択してポッド テーブルを更新します。 クラスターを切り替えた後、テーブルを更新して、新しいクラスターにポッドを読み込む必要があります。

IntelliJ IDEA の [診断] タブのスクリーンショット。

エージェントの接続

ポッド コンテナーには /tmp フォルダーが必要であり、/tmp フォルダーへの書き込みアクセス許可が必要です。

JVM でエージェントのアタッチを有効にするには、JVM オプションに -XX:+DisableAttachMechanism を追加しないようにしてください。

バックエンド診断サーバーは、6 時間後に閉じられます。

エージェントをアタッチするには、エージェントをアタッチするポッドをクリックし、コンテナーを選択します。 エージェントは、ポッド内の 1 つのコンテナーにのみアタッチできます。 次に、添付ファイルの処理が完了するまで待ちます。

[コンテナーの選択] ダイアログ ボックスが開いている [診断] タブを示す IntelliJ IDEA のスクリーンショット。

アクティブなポッド コンテナーを設定する

エージェントを正常にアタッチしたら、トラブルシューティングに使用できます。

複数のポッドによってエージェントが挿入された可能性があるため、アクティブなポッドを設定する必要があります。 IntelliJ IDEA の [診断] タブでポッドを右クリックし、[アクティブなポッドとして選択] を選択します。

ポッドが選択され、[アクティブとして選択] というメニュー項目が表示されている IntelliJ IDEA 診断タブのスクリーンショット。

クラス関数に関するログ記録を追加する

構成されたログは、30 分後に自動的に削除されます。

このツールを使用すると、クラス関数に関するログ記録を追加できますが、インターフェイスやコンストラクターなどを追加することはできません。

関数にログ記録を追加するには、エディターで関数を右クリックし、次のスクリーンショットに示すように、Java Diagnostic>Add AroundLogを選択します。

[Add AroundLog]\(周囲ログの追加\) メニュー オプションが強調表示されている関数に対して開かれたコンテキスト メニューを示す IntelliJ IDEA のスクリーンショット。

この例では、ログ記録を追加した後、<host>/infor を呼び出して、関数が呼び出される前と後の次の例のような出力を確認できます。

===== START ===== Method: updateInformation Start Time: 2024-12-12T07:37:55.404107848Z
Done with the validation
Done with the DB access
Done with the data filtering
===== END ===== Method: updateInformation End Time: 2024-12-12T07:37:55.404316940Z Total Time: 0 milliseconds

構成されているすべてのログを削除する

エージェントによって追加されたすべてのログを削除するには、すべてのAroundLogsを削除を選択します。

手記

バックエンド Java エージェントは、ポッド内のエフェメラル コンテナーによって使用されます。 ポッドの再起動後、エージェントは削除されます。

トラブルシューティング

この機能をまだ有効にしていないノードで実行されているポッドにエージェントをアタッチしようとすると、タイムアウトが発生する可能性があります。 タイムアウトは、ノードが最初にエージェント イメージを取得する必要があるために発生する可能性があり、これが原因で遅延が発生します。 これが発生した場合は、更新 を選択して、エージェントがアタッチされているかどうかを確認するか、エージェントのアタッチをもう一度試すことができます。

添付ファイルが失敗した場合は、エフェメラル コンテナー内の diagnostic-container-<hashcode> という名前のログを確認できます。

プラグインの操作に関する情報は、diag4j-agent-service-<hashcode>という名前のポッド コンテナーのログにあります。

次の手順

AKS 上で Java 診断ツール (diag4j) の Spring Boot Admin コンポーネントを使い始めよう