Leitfaden zur Problembehandlung: Azure Monitor Application Insights für Java

Dieser Artikel enthält Informationen zur Problembehandlung, um häufige Probleme zu beheben, die auftreten können, wenn Sie eine Java-Anwendung mithilfe des Java-Agents für Application Insights instrumentieren. Application Insights ist ein Feature des Azure Monitor-Plattformdiensts.

Überprüfen der Protokolldatei für die Selbstdiagnose

Standardmäßig Application Insights Java 3. x erzeugt eine Protokolldatei mit dem Namen applicationinsights.log im selben Verzeichnis, das die applicationinsights-agent-3.2.11.jar Datei enthält.

Diese Protokolldatei ist der erste Ort, an dem Sie nach Hinweisen zu eventuell auftretenden Problemen suchen.

Wenn Application Insights keine Protokolldatei generiert, überprüfen Sie, ob Ihre Java-Anwendung über die Schreibberechtigung für das Verzeichnis verfügt, das die applicationinsights-agent-3.2.11.jar Datei enthält.

Wenn Application Insights immer noch keine Protokolldatei generiert, überprüfen Sie das stdout Protokoll ihrer Java-Anwendung auf Fehler. Application Insights Java 3. x sollte alle Fehler protokollieren, die die Protokollierung am üblichen Speicherort im stdout Protokoll verhindern würden.

Behandeln von Konnektivitätsproblemen

Application Insights-SDKs und -Agents senden Telemetriedaten, die als REST-Aufrufe an unseren Erfassungsendpunkten erfasst werden sollen. Um die Konnektivität von Ihrem Webserver oder Anwendungshostcomputer mit den Erfassungsdienstendpunkten zu testen, verwenden Sie unformatierte REST-Clients aus PowerShell, oder führen Sie curl-Befehle aus. Weitere Informationen finden Sie unter Problembehandlung bei fehlenden Anwendungstelemetriedaten in Azure Monitor Application Insights.

Wenn der Application Insights Java-Agent das Konnektivitätsproblem verursacht, sollten Sie die folgenden Optionen in Betracht ziehen:

  • Überprüfen Sie die Verbindungszeichenfolge für die Application Insights-Konfiguration.

  • Verwenden Sie Application Insights Java Version 3.4.6 oder höher, um zu überprüfen, ob der Java-Keystore ein erforderliches Zertifikat enthält. Aktivieren Sie dazu das Feature self-Diagnose auf der TRACE Ebene. Sehen Sie in den Application Insights-Protokollen den folgenden Eintrag?

    TRACE c.m.applicationinsights.agent – Application Insights-Stammzertifikat im Java-Schlüsselspeicher: false

    Wenn dieser Eintrag angezeigt wird, lesen Sie Importieren von SSL-Zertifikaten , um ein Stammzertifikat in den Java-Keystore zu importieren.

  • Wenn Sie die -Djsse.enableSNIExtension=false Option verwenden, versuchen Sie, den Agent ohne diese Option auszuführen. Wenn Sie in Application Insights Java Version 3.4.5 angeben -Djsse.enableSNIExtension=false, wird der folgende Fehlereintrag in den Protokollen angezeigt:

    WARN c.m.applicationinsights.agent – Systemeigenschaft -Djsse.enableSNIExtension=false wird erkannt. Wenn Sie Verbindungsprobleme mit Application Insights haben, entfernen Sie diese.

  • Wenn keine der vorherigen Optionen hilfreich ist, können Sie Tools zur Problembehandlung verwenden.

Java Virtual Machine (JVM) kann nicht gestartet werden

Wenn der virtuelle Java-Computer (JVM) nicht gestartet wird, wird möglicherweise die Meldung "Fehler beim Öffnen der ZIP-Datei oder des JAR-Manifests fehlt" zurückgegeben. Informationen zur Problembehandlung finden Sie in der folgenden Tabelle.

Problem Aktion
Die Java-Archivdatei (JAR) für den Agent wurde nicht gefunden. Stellen Sie sicher, dass Sie einen gültigen AGENT-JAR-Pfad im -javaagent JVM-Argument angeben.
Die JAR-Datei des Agents wurde möglicherweise während der Dateiübertragung beschädigt. Versuchen Sie erneut, die JAR-Datei des Agents herunterzuladen.

Der Start von Tomcat-Java-Apps dauert einige Minuten

Wenn Sie Application Insights für die Überwachung Ihrer Tomcat-Anwendung aktiviert haben, kann es zu einer verzögerungsfreien Zeit von mehreren Minuten kommen, die zum Starten der Anwendung benötigt wird. Diese Verzögerung wird verursacht, weil Tomcat versucht, die Application Insights-JAR-Dateien während des Anwendungsstarts zu überprüfen. Um die Startzeit der Anwendung zu beschleunigen, können Sie die Application Insights-JAR-Dateien aus der Liste der gescannten Dateien ausschließen. Das Scannen dieser JAR-Dateien ist nicht erforderlich.

Führen Sie ein Upgrade von Application Insights Java 2 durch. x SDK

Wenn Sie bereits Application Insights Java 2 verwenden. x SDK in Ihrer Anwendung, können Sie es weiterhin verwenden. Application Insights Java 3. Der x-Agent erkennt, erfasst und korreliert alle benutzerdefinierten Telemetriedaten, die Sie über die 2 senden. x SDK. Außerdem werden doppelte Telemetriedaten verhindert, indem die automatische Sammlung von 2 unterdrückt wird. x SDK tut dies. Weitere Informationen finden Sie unter Upgrade von Java 2.x SDK.

Upgrade von Application Insights Java 3.0 (Vorschauversion)

Wenn Sie ein Upgrade vom Java 3.0 Preview-Agent durchführen, überprüfen Sie alle Konfigurationsoptionen sorgfältig. Die JSON-Struktur wurde im Release 3.0 general availability (GA) geändert.

Zu diesen Änderungen gehören:

  • Der Name der Konfigurationsdatei wurde von ApplicationInsights.json in applicationinsights.json geändert.

  • Der instrumentationSettings Knoten ist nicht mehr vorhanden. Der gesamte Inhalt in instrumentationSettings wird auf die Stammebene verschoben.

  • Konfigurationsknoten wie sampling, jmxMetrics, instrumentationund heartbeat werden aus preview der Stammebene verschoben.

Einige Protokollierungen werden nicht automatisch erfasst.

Die Protokollierung wird nur erfasst, wenn sie die folgenden Kriterien erfüllt:

  • Es entspricht der Ebene, die für das Protokollierungsframework konfiguriert ist.

  • Es erfüllt die Ebene, die für Application Insights konfiguriert ist.

Wenn Ihr Protokollierungsframework beispielsweise für die Protokollierung WARN (und höher) aus dem com.example Paket und Application Insights für die Erfassung INFO (und höher) konfiguriert ist, erfasst WARN Application Insights nur (und höher) aus dem com.example Paket.

Um sicherzustellen, dass eine bestimmte Protokollierungsanweisung den konfigurierten Schwellenwert des Protokollierungsframeworks erfüllt, überprüfen Sie, ob sie in Ihrem üblichen Anwendungsprotokoll (in der Datei oder Konsole) angezeigt wird.

Beachten Sie außerdem, dass, wenn ein Ausnahmeobjekt an die Protokollierung übergeben wird, die Protokollmeldung (und Ausnahmeobjektdetails) im Azure-Portal in der exceptions Tabelle anstelle der traces Tabelle angezeigt wird. Führen Sie die folgende Protokollabfrage (Kusto) aus, um die Protokollmeldungen in den traces Tabellen und exceptions anzuzeigen:

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

Weitere Informationen finden Sie unter Konfiguration der automatisch erfassten Protokollierung.

Importieren von SSL-Zertifikaten

Dieser Abschnitt hilft Ihnen bei der Problembehandlung und ggf. Behebung der Ausnahmen, die sich auf SSL-Zertifikate (Secure Sockets Layer) beziehen, wenn Sie den Java-Agent verwenden.

Es gibt zwei verschiedene Pfade zur Behebung dieses Problems:

  • Wenn Sie einen Standardmäßigen Java-Keystore verwenden
  • Wenn Sie einen benutzerdefinierten Java-Keystore verwenden

Wenn Sie nicht sicher sind, welchem Pfad Sie folgen sollen, überprüfen Sie, ob Sie über das JVM-Argument verfügen. -Djavax.net.ssl.trustStore=... Wenn Sie nicht über dieses JVM-Argument verfügen, verwenden Sie wahrscheinlich den Standardmäßigen Java-Keystore. Wenn Sie über dieses JVM-Argument verfügen, verwenden Sie wahrscheinlich einen benutzerdefinierten Keystore, und das JVM-Argument verweist Auf Ihren benutzerdefinierten Keystore.

Wenn Sie den Java-Standardschlüsselspeicher verwenden

Der Java-Standardschlüsselspeicher verfügt in der Regel bereits über alle Stammzertifikate der Zertifizierungsstelle. Es kann jedoch einige Ausnahmen geben. Beispielsweise kann ein anderes Stammzertifikat das Erfassungsendpunktzertifikat signieren. Es wird empfohlen, die folgenden Schritte auszuführen, um dieses Problem zu beheben:

  1. Überprüfen Sie, ob das SSL-Zertifikat, das zum Signieren des Application Insights-Endpunkts verwendet wurde, bereits im Standardschlüsselspeicher vorhanden ist. Standardmäßig werden die Zertifikate der vertrauenswürdigen Zertifizierungsstelle in $JAVA_HOME/jre/lib/security/cacerts gespeichert. Verwenden Sie den folgenden Befehl, um Zertifikate in einem Java-Keystore aufzulisten:

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

    Sie können die Ausgabe in eine temporäre Datei umleiten, sodass die Suche später einfach ist:

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

  2. Nachdem Sie über die Liste der Zertifikate verfügen, führen Sie die Schritte zum Herunterladen des SSL-Zertifikats aus, das zum Signieren des Application Insights-Endpunkts verwendet wurde.

    Nachdem Sie das Zertifikat heruntergeladen haben, generieren Sie mit dem folgenden Befehl einen SHA-1-Hash für das Zertifikat:

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

    Kopieren Sie den SHA-1-Wert, und überprüfen Sie, ob dieser Wert in der temp.txt Datei vorhanden ist, die Sie zuvor gespeichert haben. Wenn Sie den SHA-1-Wert in der temporären Datei nicht finden, fehlt das heruntergeladene SSL-Zertifikat im Java-Standardschlüsselspeicher.

  3. Importieren Sie das SSL-Zertifikat mithilfe des folgenden Befehls in den Java-Standardschlüsselspeicher:

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

    In diesem Beispiel lautet der Befehl wie folgt:

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

Wenn Sie einen benutzerdefinierten Java-Keystore verwenden

Wenn Sie einen benutzerdefinierten Java-Keystore verwenden, müssen Sie möglicherweise die SSL-Zertifikate für die Application Insights-Endpunkte in diesen Keystore importieren. Wir empfehlen die folgenden beiden Schritte, um dieses Problem zu beheben:

  1. Führen Sie die folgenden Schritte aus, um das SSL-Zertifikat vom Application Insights-Endpunkt herunterzuladen .

  2. Führen Sie den folgenden Befehl aus, um das SSL-Zertifikat in den benutzerdefinierten Java-Keystore zu importieren:

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

Schritte zum Herunterladen des SSL-Zertifikats

Hinweis

Die folgenden Anweisungen zum Herunterladen von SSL-Zertifikaten wurden in den folgenden Browsern überprüft:

  • Google Chrome
  • Microsoft Edge
  1. Öffnen Sie die https://westeurope-5.in.applicationinsights.azure.com/api/ping URL-Adresse in einem Webbrowser.

  2. Wählen Sie in der Adressleiste des Browsers das Symbol Websiteinformationen anzeigen aus (ein Sperrsymbol neben der Adresse).

  3. Wählen Sie Verbindung ist sicher aus.

  4. Wählen Sie das Symbol Zertifikat anzeigen aus.

  5. Wählen Sie im Dialogfeld Zertifikatanzeige die Registerkarte Details aus.

  6. Wählen Sie in der Liste Zertifikathierarchie das Zertifikat aus, das Sie herunterladen möchten. (Das Zertifizierungsstellen-Stammzertifikat, das Zwischenzertifikat und das SSL-Blattzertifikat werden angezeigt.)

  7. Wählen Sie die Schaltfläche Exportieren aus.

  8. Navigieren Sie im Dialogfeld Speichern unter zu dem Verzeichnis, in dem Sie die Zertifikatdatei (CRT) speichern möchten, und wählen Sie dann Speichern aus.

  9. Um das Dialogfeld Zertifikatanzeige zu beenden, wählen Sie die Schaltfläche Schließen (X) aus.

Warnung

Sie müssen diese Schritte wiederholen, um das neue Zertifikat zu erhalten, bevor das aktuelle Zertifikat abläuft. Die Ablaufinformationen finden Sie auf der Registerkarte Details des Dialogfelds Zertifikatanzeige .

Nachdem Sie das Zertifikat in der Liste Zertifikathierarchie ausgewählt haben, suchen Sie den Knoten Gültigkeit in der Liste Zertifikatfelder . Wählen Sie in diesem Knoten Nicht vorher aus, und überprüfen Sie dann das Datum und die Uhrzeit, die im Feld Feldwert angezeigt werden. Dieser Zeitstempel gibt an, wann das neue Zertifikat gültig wird. Wählen Sie auf ähnliche Weise im Knoten Gültigkeitdie Option Nicht nach aus, um zu erfahren, wann das neue Zertifikat abläuft.

Grundlegendes zu UnknownHostException

Wenn diese Ausnahme nach dem Upgrade auf eine Java-Agent-Version angezeigt wird, die höher als 3.2.0 ist, können Sie die Ausnahme möglicherweise beheben, indem Sie ihr Netzwerk aktualisieren, um den neuen Endpunkt aufzulösen, der in der Ausnahme angezeigt wird. Der Grund für den Unterschied zwischen Application Insights-Versionen ist, dass Versionen, die höher als 3.2.0 sind, im Vergleich zum älteren v2/trackauf den neuen Erfassungsendpunkt v2.1/trackverweisen. Der neue Erfassungsendpunkt leitet Sie automatisch an den Erfassungsendpunkt (neuer Endpunkt, der in der Ausnahme angezeigt wird) um, der dem Speicher für Ihre Application Insights-Ressource am nächsten liegt.

Fehlende Verschlüsselungssammlungen

Wenn der Application Insights Java-Agent erkennt, dass Sie über keine der Verschlüsselungssammlungen verfügen, die von den Endpunkten unterstützt werden, mit denen er eine Verbindung herstellt, warnt der Agent Sie und stellt einen Link zu den fehlenden Verschlüsselungssammlungen bereit.

Hintergrundinformationen zu Verschlüsselungssammlungen

Verschlüsselungssammlungen kommen ins Spiel, bevor eine Clientanwendung und ein Server Informationen über eine SSL- oder TLS-Verbindung (Transport Layer Security) austauschen. Die Clientanwendung initiiert einen SSL-Handshake. Ein Teil dieses Prozesses umfasst die Benachrichtigung des Servers darüber, welche Verschlüsselungssammlungen er unterstützt. Der Server empfängt diese Informationen und vergleicht die von der Clientanwendung unterstützten Verschlüsselungssammlungen mit den unterstützten Algorithmen. Wenn der Server eine Übereinstimmung findet, benachrichtigt er die Clientanwendung, und es wird eine sichere Verbindung hergestellt. Wenn keine Übereinstimmung gefunden wird, lehnt der Server die Verbindung ab.

Ermitteln clientseitiger Verschlüsselungssammlungen

In diesem Fall ist der Client die JVM, auf der Ihre instrumentierte Anwendung ausgeführt wird. Ab Version 3.2.5 protokolliert Application Insights Java eine Warnmeldung, wenn fehlende Verschlüsselungssammlungen zu Verbindungsfehlern mit einem der Dienstendpunkte führen könnten.

Wenn Sie eine frühere Version von Application Insights Java verwenden, kompilieren Und führen Sie das folgende Java-Programm aus, um die Liste der unterstützten Verschlüsselungssammlungen in Ihrer JVM abzurufen:

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]);
        }
    }
}

Die Application Insights-Endpunkte unterstützen die folgenden Verschlüsselungssammlungen:

  • 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

Ermitteln von serverseitigen Verschlüsselungssammlungen

In diesem Fall ist die Serverseite der Application Insights-Erfassungsendpunkt oder der Application Insights Live-Metrikendpunkt. Sie können ein Onlinetool wie SSLLABS verwenden, um die erwarteten Verschlüsselungssammlungen zu bestimmen, die auf der Endpunkt-URL basieren.

Hinzufügen der fehlenden Verschlüsselungssammlungen

Wenn Sie Java 9 oder eine höhere Version verwenden, überprüfen Sie, ob die JVM das jdk.crypto.cryptoki Modul im Ordner jmods enthält. Wenn Sie eine benutzerdefinierte Java-Runtime mit jlinkerstellen, stellen Sie außerdem sicher, dass Sie dasselbe Modul einschließen.

Andernfalls sollten diese Verschlüsselungssammlungen bereits Teil moderner Java 8+-Distributionen sein. Es wird empfohlen, dass Sie die Quelle Ihrer installierten Java-Distribution überprüfen, um zu untersuchen, warum sich die Sicherheitsanbieter in der java.security-Konfigurationsdatei dieser Java-Distribution von Standard-Java-Distributionen unterscheiden.

Langsame Startzeit in Application Insights und Java 8

Java 8 weist ein bekanntes Problem auf, das mit der Überprüfung der JAR-Dateisignatur von Java-Agents zusammenhängt. Dieses Problem kann die Startzeit in Application Insights erhöhen. Um dieses Problem zu beheben, können Sie eine der folgenden Optionen anwenden:

Alternativ können Sie das folgende experimentelle Feature ausprobieren: Verbesserung der Startzeit für eine begrenzte Anzahl von CPU-Kernen. Wenn bei der Verwendung dieses Features Probleme auftreten, senden Sie uns Feedback.

Informationen zum Haftungsausschluss von Drittanbietern

Die in diesem Artikel genannten Drittanbieterprodukte stammen von Herstellern, die von Microsoft unabhängig sind. Microsoft gewährt keine implizite oder sonstige Garantie in Bezug auf die Leistung oder Zuverlässigkeit dieser Produkte.

Kontaktieren Sie uns für Hilfe

Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.