トラブルシューティング ガイド: Azure Monitor Application Insights for Java

この記事では、Application Insights の Java エージェントを使用して Java アプリケーションをインストルメント化するときに発生する可能性がある一般的な問題を解決するためのトラブルシューティング情報を提供します。 Application Insights は、Azure Monitor プラットフォーム サービスの機能です。

自己診断ログ ファイルを確認する

既定では、Application Insights Java 3 です。x は、 applicationinsights-agent-3.2.11.jar ファイルを保持するのと同じディレクトリに applicationinsights.log という 名前のログ ファイルを生成します。

このログ ファイルは、発生している可能性がある問題に関するヒントをチェックする最初の場所です。

Application Insights でログ ファイルが生成されない場合は、applicationinsights-agent-3.2.11.jar ファイルを保持するディレクトリに対する書き込みアクセス許可が Java アプリケーションに付与されていることを確認チェック

それでも Application Insights でログ ファイルが生成されない場合は、Java アプリケーションからログをstdoutチェックしてエラーを確認します。 Application Insights Java 3。x は、ログ内の通常の場所にログを記録できないようにするエラーをログに記録する stdout 必要があります。

接続の問題のトラブルシューティング

Application Insights SDK とエージェントは、インジェスト エンドポイントで REST 呼び出しとして取り込むテレメトリを送信します。 Web サーバーまたはアプリケーション ホスト コンピューターからインジェスト サービス エンドポイントへの接続をテストするには、PowerShell から生の REST クライアントを使用するか、 curl コマンドを実行します。 「Azure Monitor Application Insights で不足しているアプリケーション テレメトリのトラブルシューティング」を参照してください。

Application Insights Java エージェントによって接続の問題が発生する場合は、次のオプションを検討してください。

  • Application Insights 構成の接続文字列を確認します。

  • Application Insights Java バージョン 3.4.6 以降のバージョンを使用して、Java キーストアに必要な証明書が含まれていることを確認します。 これを行うには、レベルで自己診断機能TRACE有効にします。 Application Insights ログに、次のエントリが表示されますか?

    TRACE c.m.applicationinsights.agent - Java キーストアの Application Insights ルート証明書: false

    このエントリが表示される場合は、「 SSL 証明書のインポート 」を参照して、Java キーストアにルート証明書をインポートします。

  • オプションを使用する場合は -Djsse.enableSNIExtension=false 、そのオプションなしでエージェントを実行してみてください。 Application Insights Java バージョン 3.4.5 から を指定 -Djsse.enableSNIExtension=falseすると、ログに次のエラー エントリが表示されます。

    WARN c.m.applicationinsights.agent - システム プロパティ -Djsse.enableSNIExtension=false が検出されました。 Application Insights に接続の問題がある場合は、これを削除してください。

  • 上記のどのオプションも役に立たなかった場合は、 トラブルシューティング ツールを使用できます。

Java 仮想マシン (JVM) の起動に失敗する

Java 仮想マシン (JVM) が起動しない場合は、"zip ファイルを開いているエラーまたは JAR マニフェストが見つからない" というメッセージが返される可能性があります。 この問題のトラブルシューティングを行うには、次の表を参照してください。

問題 アクション
エージェントの Java アーカイブ (JAR) ファイルが見つかりません。 JVM 引数に有効なエージェント JAR パスを -javaagent 指定してください。
ファイル転送中にエージェント JAR ファイルが破損している可能性があります。 エージェント JAR ファイルをもう一度ダウンロードしてみてください。

Tomcat Java アプリの起動には数分かかります

Application Insights で Tomcat アプリケーションの監視を有効にした場合、アプリケーションの起動に数分の遅延が発生する可能性があります。 この遅延は、Tomcat がアプリケーションの起動時に Application Insights JAR ファイルをスキャンしようとするためです。 アプリケーションの開始時刻を短縮するために、スキャンされたファイルの一覧から Application Insights JAR ファイルを除外できます。 これらの JAR ファイルをスキャンする必要はありません。

Application Insights Java 2 からアップグレードします。x SDK

Application Insights Java 2 を既に使用している場合。x SDK をアプリケーションで使用すると、それを使用し続けることができます。 Application Insights Java 3。x エージェントは、2 を介して送信するすべてのカスタム テレメトリを検出、キャプチャ、関連付けています。x SDK。 また、2 の自動収集を抑制することで、テレメトリの重複を防ぎます。x SDK が実行します。 詳細については、「 Java 2 からのアップグレード」を参照してください。x SDK

Application Insights Java 3.0 プレビューからのアップグレード

Java 3.0 Preview エージェントからアップグレードする場合は、すべての 構成オプション を慎重に確認してください。 JSON 構造は、3.0 一般公開 (GA) リリースで変更されます。

これらの変更は次のとおりです。

  • 構成ファイル名が ApplicationInsights.json から applicationinsights.jsonに変更されました。

  • instrumentationSettingsノードが存在しなくなりました。 のすべての instrumentationSettings コンテンツがルート レベルに移動されます。

  • 、 などのsamplingheartbeatjmxMetricsinstrumentation構成ノードは、ルート レベルから移動previewされます。

一部のログ記録は自動収集されません

ログ記録は、次の条件を満たしている場合にのみキャプチャされます。

  • これは、ログ フレームワーク用に構成されているレベルを満たしています。

  • Application Insights 用に構成されているレベルを満たしています。

たとえば、ログ フレームワークがパッケージからログWARN記録 (以上) するように構成されていて、Application Insights がキャプチャ INFO (以上) するように構成されている場合、Application Insights はパッケージから com.example (以上) のみをキャプチャWARNcom.exampleします。

特定のログ記録ステートメントがログ フレームワークの構成されたしきい値を満たしていることを確認するには、通常のアプリケーション ログ (ファイルまたはコンソール内) に表示されることを確認します。

また、例外オブジェクトがロガーに渡されると、ログ メッセージ (および例外オブジェクトの詳細) がテーブルではなくtracesテーブルのAzure portalにexceptions表示されます。 テーブルとexceptionsテーブルの両方でログ メッセージをtraces表示するには、次のログ (Kusto) クエリを実行します。

union traces, (exceptions | extend message = outerMessage)
| project timestamp, message, itemType

詳細については、 自動収集ログの構成に関するページを参照してください。

SSL 証明書をインポートする

このセクションは、Java エージェントを使用するときに、Secure Sockets Layer (SSL) 証明書に関連する例外のトラブルシューティングと修正に役立ちます。

この問題を解決するには、次の 2 つの異なるパスがあります。

  • 既定の Java キーストアを使用している場合
  • カスタム Java キーストアを使用している場合

どのパスに従えばいいのか不明な場合は、 をチェックして、-Djavax.net.ssl.trustStore=...JVM 引数 があるかどうかを確認します。 この JVM 引数がない場合は、既定の Java キーストアを使用している可能性があります。 この JVM 引数がある場合は、おそらくカスタムキーストアを使用しており、JVM 引数はカスタムキーストアを指しています。

既定の Java キーストアを使用している場合

通常、既定の Java キーストアには、すべての CA ルート証明書が既に存在します。 ただし、いくつかの例外が発生する可能性があります。 たとえば、別のルート証明書がインジェスト エンドポイント証明書に署名する場合があります。 この問題を解決するには、次の手順に従うことをお勧めします。

  1. Application Insights エンドポイントの署名に使用された SSL 証明書が、既定のキーストアに既に存在するかどうかを確認します。 既定では、信頼された CA 証明書は $JAVA_HOME/jre/lib/security/cacerts に格納されます。 Java キーストア内の証明書を一覧表示するには、次のコマンドを使用します。

    keytool -list -v -keystore <path-to-keystore-file>

    後で簡単に検索できるように、出力を一時ファイルにリダイレクトできます。

    keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts > temp.txt

  2. 証明書の一覧を取得したら、手順に従って、Application Insights エンドポイントの署名に使用された SSL 証明書をダウンロード します。

    証明書をダウンロードした後、次のコマンドを使用して、証明書に SHA-1 ハッシュを生成します。

    keytool -printcert -v -file "<downloaded-ssl-certificate>.cer"

    SHA-1 値をコピーし、この値が前に保存したtemp.txtファイルに存在するかどうかをチェックします。 一時ファイルに SHA-1 値が見つからない場合は、ダウンロードした SSL 証明書が既定の Java キーストアにありません。

  3. 次のコマンドを使用して、SSL 証明書を既定の Java キーストアにインポートします。

    keytool -import -file "<certificate-file>" -alias "<some-meaningful-name>" -keystore "<path-to-cacerts-file>"

    この例では、コマンドは次のように読み取ります。

    keytool -import -file "<downloaded-ssl-certificate-file>" -alias "<some-meaningful-name>" -keystore $JAVA_HOME/jre/lib/security/cacerts

カスタム Java キーストアを使用している場合

カスタム Java キーストアを使用している場合は、Application Insights エンドポイントの SSL 証明書をそのキーストアにインポートする必要がある場合があります。 この問題を解決するには、次の 2 つの手順をお勧めします。

  1. Application Insights エンドポイントから SSL 証明書をダウンロードするには、次の手順 に従います。

  2. 次のコマンドを実行して、SSL 証明書をカスタム Java キーストアにインポートします。

    keytool -importcert -alias <your-ssl-certificate> -file "<your-downloaded-ssl-certificate-name>.cer" -keystore "<your-keystore-name>" -storepass "<your-keystore-password>" -noprompt

SSL 証明書をダウンロードする手順

注:

次の SSL 証明書のダウンロード手順は、次のブラウザーで検証されました。

  • Google Chrome
  • Microsoft Edge
  1. https://westeurope-5.in.applicationinsights.azure.com/api/ping Web ブラウザーで URL アドレスを開きます。

  2. ブラウザーのアドレス バーで、[ サイト情報の表示 ] アイコン (アドレスの横にあるロック 記号) を選択します。

  3. [ 接続はセキュリティで保護されています] を選択します。

  4. [ 証明書の表示 ] アイコンを選択します。

  5. [ 証明書ビューアー ] ダイアログ ボックスで、[ 詳細 ] タブを選択します。

  6. [ 証明書階層 ] の一覧で、ダウンロードする証明書を選択します。 (CA ルート証明書、中間証明書、リーフ SSL 証明書が表示されます)。

  7. [ エクスポート ] ボタンを選択します。

  8. [ 名前を付けて保存 ] ダイアログ ボックスで、証明書 (.crt) ファイルを保存するディレクトリを参照し、[保存] を選択 します

  9. [証明書ビューアー] ダイアログ ボックスを終了するには、[閉じる (X)] ボタンを選択します。

警告

現在の証明書の有効期限が切れる前に、これらの手順を繰り返して新しい証明書を取得する必要があります。 有効期限の情報は、[証明書ビューアー] ダイアログ ボックスの [詳細] タブにあります。

[証明書階層] ボックスの一覧で証明書を選択した後、[証明書のフィールド] ボックスの一覧で [Validity] ノードを見つけます。 そのノード内で [Not Before]\(前でない \) を選択し、[ フィールド値 ] ボックスに表示される日付と時刻を確認します。 このタイム スタンプは、新しい証明書がいつ有効になるかを示します。 同様に、新しい証明書の有効期限が切れるタイミングを確認するには、[Validity] ノード内で [Not After]\(後ではない\) を選択します。

UnknownHostException について

3.2.0 より後の Java エージェント バージョンにアップグレードした後にこの例外が発生した場合は、例外に示されている新しいエンドポイントを解決するためにネットワークをアップグレードすることで例外を修正できる可能性があります。 Application Insights のバージョン間の違いの理由は、3.2.0 より後のバージョンは、以前v2/trackの と比較して、新しいインジェスト エンドポイントv2.1/trackを指しているということです。 新しいインジェスト エンドポイントは、Application Insights リソースのストレージに最も近いインジェスト エンドポイント (例外で表示される新しいエンドポイント) に自動的にリダイレクトされます。

暗号スイートが見つからない

Application Insights Java エージェントが、接続先のエンドポイントでサポートされている暗号スイートがないことを検出すると、エージェントから警告が表示され、不足している暗号スイートへのリンクが提供されます。

暗号スイートの背景

クライアント アプリケーションとサーバーが SSL またはトランスポート層セキュリティ (TLS) 接続を介して情報を交換する前に、暗号スイートが実行されます。 クライアント アプリケーションが SSL ハンドシェイクを開始します。 そのプロセスの一部として、サポートする暗号スイートについてサーバーに通知する必要があります。 サーバーはその情報を受け取り、クライアント アプリケーションでサポートされている暗号スイートをサポートするアルゴリズムと比較します。 サーバーが一致するものを見つけた場合は、クライアント アプリケーションに通知し、セキュリティで保護された接続が確立されます。 一致するものが見つからない場合、サーバーは接続を拒否します。

クライアント側の暗号スイートを決定する方法

この場合、クライアントはインストルメント化されたアプリケーションが実行されている JVM です。 バージョン 3.2.5 以降、Application Insights Java は、暗号スイートが見つからないと、いずれかのサービス エンドポイントへの接続エラーが発生している可能性がある場合に警告メッセージをログに記録します。

以前のバージョンの Application Insights Java を使用している場合は、次の Java プログラムをコンパイルして実行して、JVM でサポートされている暗号スイートの一覧を取得します。

import javax.net.ssl.SSLServerSocketFactory;

public class Ciphers {
    public static void main(String[] args) {
        SSLServerSocketFactory ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();
        String[] defaultCiphers = ssf.getDefaultCipherSuites();
        System.out.println("Default\tCipher");
        for (int i = 0; i < defaultCiphers.length; ++i) {
            System.out.print('*');
            System.out.print('\t');
            System.out.println(defaultCiphers[i]);
        }
    }
}

Application Insights エンドポイントでは、次の暗号スイートがサポートされています。

  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

サーバー側の暗号スイートを決定する方法

この場合、サーバー側は Application Insights インジェスト エンドポイントまたは Application Insights Live メトリック エンドポイントです。 SSLLABS などのオンライン ツールを使用して、エンドポイント URL に基づく予想される暗号スイートを決定できます。

不足している暗号スイートを追加する方法

Java 9 以降のバージョンを使用している場合は、JVM に jmods フォルダーにモジュールが含まれていることjdk.crypto.cryptokiを確認するチェック。 また、 を使用 jlinkしてカスタム Java ランタイムを構築する場合は、必ず同じモジュールを含めます。

それ以外の場合、これらの暗号スイートは、既に最新の Java 8 以降のディストリビューションの一部である必要があります。 インストールされている Java ディストリビューションのソースをチェックして、その Java ディストリビューションの java.security 構成ファイルのセキュリティ プロバイダーが標準の Java ディストリビューションと異なる理由を調査することをお勧めします。

Application Insights と Java 8 の起動時間が遅い

Java 8 には、Java エージェントの JAR ファイル署名検証に関連する既知の問題があります。 この問題により、Application Insights の起動時間が長くなる可能性があります。 この問題を解決するには、次のいずれかのオプションを適用します。

または、次の試験的な機能を試すことができます。 CPU コアの数が限られている場合の起動時間の向上です。 この機能の使用中に問題が発生した場合は、フィードバックをお寄せください。

サードパーティの情報に関する免責事項

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。