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 ininstrumentationSettings
wurden auf die Stammebene verschoben.Konfigurationsknoten wie
sampling
,jmxMetrics
,instrumentation
undheartbeat
werden auspreview
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:
Ü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
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.
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:
Führen Sie diese Schritte aus, um das SSL-Zertifikat vom Application-Insights-Endpunkt herunterzuladen.
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
Öffnen Sie die https://westeurope-5.in.applicationinsights.azure.com/api/ping URL-Adresse in einem Webbrowser.
Wählen Sie in der Adressleiste des Browsers das Symbol "Websiteinformationen anzeigen" aus (ein Sperrsymbol neben der Adresse).
Die Option "Verbindung" ist sicher.
Wählen Sie das Symbol "Zertifikat anzeigen" aus.
Wählen Sie im Dialogfeld "Zertifikatanzeige " die Registerkarte "Details " aus.
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.)
Wählen Sie die Schaltfläche "Exportieren" aus .
Navigieren Sie im Dialogfeld "Speichern unter" zum Verzeichnis, in dem Sie die Zertifikatdatei (CRT) speichern möchten, und wählen Sie dann "Speichern" aus.
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/track
im Vergleich zu den älteren v2/track
verweisen. 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 jlink
Java-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:
Wenn Ihre Anwendung auf Spring Boot basiert, fügen Sie den Application Insights Java-Agent programmgesteuert an das JVM an.
Verwenden Sie Java Version 11 oder eine höhere Version.
Java höher als Version 8
Um dieses Problem mit dem Application Insights Java-Agent zu beheben, probieren Sie eine der folgenden Methoden aus:
- Verwenden Sie eine Azure-Konfiguration mit mehr CPU-Leistung.
- Deaktivieren Sie einige in "Unterdrücken bestimmter automatisch erfasster Telemetrie" beschriebene Instrumentierung.
- Probieren Sie dieses experimentelle Feature aus: Verbesserung der Startzeit für eine begrenzte Anzahl von CPU-Kernen. Wenn bei der Verwendung dieses Features Probleme auftreten, senden Sie uns ein Feedback.
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.