Freigeben über


Problembehandlungshandbuch: 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 zur Selbstdiagnose

Application Insights Java 3 standardmäßig.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 Hinweise zu problemen gesucht werden, die möglicherweise auftreten.

Wenn Application Insights keine Protokolldatei generiert, stellen Sie sicher, dass 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 aus Ihrer Java-Anwendung auf Fehler. Application Insights Java 3.x sollte alle Fehler protokollieren, die verhindern würden, dass sie sich am üblichen Speicherort im stdout Protokoll anmelden.

Behandeln von Konnektivitätsproblemen

Application Insights SDKs und Agents senden Telemetrie, die als REST-Anrufe an unseren Aufnahmeendpunkten aufgenommen werden. Verwenden Sie unformatierte REST-Clients aus PowerShell, oder führen Sie curl-Befehle aus , um die Konnektivität von Ihrem Webserver oder Anwendungshostcomputer mit den Endpunkten des Aufnahmediensts zu testen. Weitere Informationen finden Sie unter Problembehandlung bei fehlender Anwendungstelemetrie in Azure Monitor Application Insights.

Wenn der Application Insights Java-Agent das Verbindungsproblem 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 eine höhere Version, um zu überprüfen, ob der Java-Keystore ein erforderliches Zertifikat enthält. Aktivieren Sie dazu die Self-Diagnostics-Funktion auf der TRACE Ebene. In den Application Insights-Protokollen wird der folgende Eintrag angezeigt?

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

    Wenn dieser Eintrag angezeigt wird, lesen Sie den Import von SSL-Zertifikaten , um ein Stammzertifikat im Java-Schlüsselspeicher zu importieren.

  • Wenn Sie die -Djsse.enableSNIExtension=false Option verwenden, versuchen Sie, den Agent ohne diese Option auszuführen. Wenn Sie angeben -Djsse.enableSNIExtension=false, wird aus Application Insights Java, Version 3.4.5, 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 dies.

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

Der virtuelle Java-Computer (JVM) kann nicht gestartet werden.

Wenn der virtuelle Java-Computer (JVM) nicht gestartet wird, wird möglicherweise eine Fehlermeldung "Fehler beim Öffnen der ZIP-Datei oder des JAR-Manifests fehlen" 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 im JVM-Argument einen gültigen Jar-Agent-Pfad -javaagent angeben.
Die Agent-JAR-Datei wurde möglicherweise während der Dateiübertragung beschädigt. Versuchen Sie erneut, die Agent-JAR-Datei herunterzuladen.

Tomcat-Java-Apps dauern mehrere Minuten, bis sie gestartet werden

Wenn Sie Application Insights aktiviert haben, um Ihre Tomcat-Anwendung zu überwachen, liegt möglicherweise eine Verzögerung von mehreren Minuten vor, bis die Anwendung gestartet wird. Diese Verzögerung wird verursacht, da Tomcat versucht, die Application Insights JAR-Dateien während des Anwendungsstarts zu scannen. 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.

Upgrade von Application Insights Java 2.x SDK

Wenn Sie bereits application Insights Java 2 verwenden.x SDK in Ihrer Anwendung können Sie weiterhin verwenden. Application Insights Java 3.Der x-Agent erkennt, erfasst und korreliert alle benutzerdefinierten Telemetriedaten, die Sie über die 2 senden.x SDK. Es verhindert auch doppelte Telemetrie, indem alle automatischen Auflistungen unterdrückt werden, die 2.x SDK führt dies aus. Weitere Informationen finden Sie unter Upgrade von Java 2.x SDK.

Upgrade von Application Insights Java 3.0 Preview

Wenn Sie ein Upgrade vom Java 3.0 Preview-Agent durchführen, überprüfen Sie alle Konfigurationsoptionen sorgfältig. Die JSON-Struktur wird in der 3.0 General Availability (GA)-Version geändert.

Zu diesen Änderungen zählen die folgenden:

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

  • Der Knoten instrumentationSettings ist nicht mehr vorhanden. Alle Inhalte in instrumentationSettings wurden auf die Stammebene verschoben.

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

Einige Protokollierungen werden nicht automatisch gesammelt

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

  • Sie erfüllt die Ebene, die für das Protokollierungsframework konfiguriert ist.

  • Sie 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 konfiguriert ist 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 der 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 den Logger übergeben wird, die Protokollmeldung (und Ausnahmeobjektdetails) in der 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 beiden exceptions Tabellen anzuzeigen:

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

Weitere Informationen finden Sie in der Konfiguration der automatisch gesammelten Protokollierung.

Importieren von SSL-Zertifikaten

Dieser Abschnitt hilft Ihnen bei der Problembehandlung und eventuellen Behebung der Ausnahmen im Zusammenhang mit SSL-Zertifikaten (Secure Sockets Layer), wenn Sie den Java-Agent verwenden.

Es gibt zwei verschiedene Pfade zum Beheben dieses Problems:

  • Wenn Sie einen Java-Standardschlüsselspeicher 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 dieses JVM-Argument nicht verwenden, verwenden Sie wahrscheinlich den Standardmäßigen Java-Schlüsselspeicher. Wenn Sie über dieses JVM-Argument verfügen, verwenden Sie wahrscheinlich einen benutzerdefinierten Keystore, und das JVM-Argument verweist Sie auf Ihren benutzerdefinierten Keystore.

Wenn Sie den standardmäßigen Java-Schlüsselspeicher verwenden

Der Standardmäßige Java-Keystore verfügt in der Regel bereits über alle Zertifizierungsstellen-Stammzertifikate. Es kann jedoch einige Ausnahmen geben. Ein anderes Stammzertifikat kann z. B. das Aufnahmeendpunktzertifikat 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 vertrauenswürdigen Zertifizierungsstellenzertifikate in $JAVA_HOME/jre/lib/security/cacerts gespeichert. Verwenden Sie zum Auflisten von Zertifikaten in einem Java-Schlüsselspeicher den folgenden Befehl:

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

    Sie können die Ausgabe zu einer temporären Datei umleiten, damit sie später leicht durchsucht werden kann:

    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 aus, um das SSL-Zertifikat herunterzuladen, das zum Signieren des Application Insights-Endpunkts verwendet wurde.

    Nachdem Sie das Zertifikat heruntergeladen haben, generieren Sie mithilfe des folgenden Befehls 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 zuvor gespeicherten temp.txt Datei vorhanden ist. Wenn Sie den SHA-1-Wert in der temporären Datei nicht finden können, fehlt das heruntergeladene SSL-Zertifikat im Java-Standardschlüsselspeicher.

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

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

    In diesem Beispiel liest der Befehl wie folgt vor:

    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. Es werden die folgenden zwei Schritte zur Behebung dieses Problems empfohlen:

  1. Führen Sie diese 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-Schlüsselspeicher 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

Notiz

Die folgenden SSL-Zertifikatdownloadanweisungen 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. Die Option "Verbindung" ist sicher.

  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 Zertifikat der Zertifizierungsstelle, das Zwischenzertifikat und das blattbasierte SSL-Zertifikat werden angezeigt.)

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

  8. Navigieren Sie im Dialogfeld "Speichern unter" zum 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 abzurufen, bevor das aktuelle Zertifikat abläuft. Die Ablaufinformationen finden Sie auf der Registerkarte "Details " des Dialogfelds "Zertifikatanzeige ".

Nachdem Sie das Zertifikat in der Zertifikathierarchieliste ausgewählt haben, suchen Sie den Gültigkeitsknoten in der Liste " Zertifikatfelder ". Wählen Sie "Nicht vor" innerhalb dieses Knotens aus, und überprüfen Sie dann das Datum und die Uhrzeit, die im Feldwertfeld angezeigt wird. Dieser Zeitstempel gibt an, wann das neue Zertifikat gültig wird. Wählen Sie auf ähnliche Weise im Knoten "Gültigkeit" die 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 später 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 besteht darin, dass Versionen, die höher als 3.2.0 sind, auf den neuen Aufnahmeendpunkt v2.1/trackim Vergleich zu den älteren v2/trackverweisen. Der neue Aufnahmeendpunkt leitet Sie automatisch an den Aufnahmeendpunkt (neuer Endpunkt, der in Ausnahme angezeigt wird) um, der dem Speicher für Ihre Application Insights-Ressource am nächsten ist.

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 eine Verbindung hergestellt wird, benachrichtigt der Agent Sie und stellt einen Link zu den fehlenden Verschlüsselungssammlungen bereit.

Hintergrund zu Chiffresammlungen

Verschlüsselungssammlungen kommen ins Spiel, bevor eine Clientanwendung und ein Server Informationen über eine SSL- oder TRANSPORT Layer Security (TLS)-Verbindung austauschen. Die Clientanwendung initiiert einen SSL-Handshake. Ein Teil dieses Prozesses umfasst die Benachrichtigung des Servers darüber, welche Verschlüsselungssammlungen unterstützt werden. Der Server empfängt diese Informationen und vergleicht die Verschlüsselungssammlungen, die von der Clientanwendung mit den unterstützten Algorithmen unterstützt werden. 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.

So ermitteln Sie clientseitige 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 zu 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 Ihrem 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

So ermitteln Sie serverseitige Verschlüsselungssammlungen

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

So fügen Sie die fehlenden Chiffresammlungen hinzu

Wenn Sie Java 9 oder eine höhere Version verwenden, stellen Sie sicher, dass das JVM das jdk.crypto.cryptoki Modul im Ordner "jmods " enthält. Wenn Sie eine benutzerdefinierte Java-Runtime mithilfe von jlinkJava-Runtime erstellen, stellen Sie außerdem sicher, dass Sie dasselbe Modul einschließen.

Andernfalls sollten diese Verschlüsselungssammlungen bereits Teil moderner Java 8+-Verteilungen sein. Es wird empfohlen, die Quelle Ihrer installierten Java-Verteilung zu überprüfen, um zu untersuchen, warum sich die Sicherheitsanbieter in der Java.security-Konfigurationsdatei von standard-Java-Verteilungen unterscheiden.

Langsame Startzeit in Application Insights

Java 8

Java 8 hat ein bekanntes Problem, 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:

Java höher als Version 8

Um dieses Problem mit dem Application Insights Java-Agent zu beheben, probieren Sie eine der folgenden Methoden aus:

Sie können auch die Überwachungslösungen für Java native auch für eine JVM-basierte Anwendung ausprobieren:

  • Mit Spring Boot, der Microsoft-Verteilung des OpenTelemetry-Starters.
  • Mit Cortanaus, dem Quarkus Opentelemetry Exporter für Microsoft Azure.

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.