Java 診断エージェントの始め方
この記事では、Java 診断エージェントの使用を開始する方法について説明します。 また、IntelliJ IDEA 用の AKS プラグインの Java 診断ツールについても説明します。
Java 診断エージェントは、Java プロセスをトラブルシューティングするための Java エージェントです。 アプリケーションをリビルド、再デプロイ、または再起動する必要はありません。 現時点では、Java クラスの関数に関するログの追加がサポートされています。 関数が呼び出されると、関数によって消費された合計時間の計算と共にログが出力されます。
前提 条件
あなたのクラスターに diag4j がインストールされていること。
Java LTS バージョン 11、17、または 21。
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
と共に一覧表示されているポッドを表示します。 - [更新] を選択してポッド テーブルを更新します。 クラスターを切り替えた後、テーブルを更新して、新しいクラスターにポッドを読み込む必要があります。
エージェントの接続
ポッド コンテナーには /tmp フォルダーが必要であり、/tmp フォルダーへの書き込みアクセス許可が必要です。
JVM でエージェントのアタッチを有効にするには、JVM オプションに -XX:+DisableAttachMechanism
を追加しないようにしてください。
バックエンド診断サーバーは、6 時間後に閉じられます。
エージェントをアタッチするには、エージェントをアタッチするポッドをクリックし、コンテナーを選択します。 エージェントは、ポッド内の 1 つのコンテナーにのみアタッチできます。 次に、添付ファイルの処理が完了するまで待ちます。
アクティブなポッド コンテナーを設定する
エージェントを正常にアタッチしたら、トラブルシューティングに使用できます。
複数のポッドによってエージェントが挿入された可能性があるため、アクティブなポッドを設定する必要があります。 IntelliJ IDEA の [診断] タブでポッドを右クリックし、[アクティブなポッドとして選択] を選択します。
クラス関数に関するログ記録を追加する
構成されたログは、30 分後に自動的に削除されます。
このツールを使用すると、クラス関数に関するログ記録を追加できますが、インターフェイスやコンストラクターなどを追加することはできません。
関数にログ記録を追加するには、エディターで関数を右クリックし、次のスクリーンショットに示すように、Java Diagnostic>Add AroundLogを選択します。
この例では、ログ記録を追加した後、<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 コンポーネントを使い始めよう