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 ininstrumentationSettings
wird auf die Stammebene verschoben.Konfigurationsknoten wie
sampling
,jmxMetrics
,instrumentation
undheartbeat
werden auspreview
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:
Ü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
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.
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:
Führen Sie die folgenden 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-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
Ö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).
Wählen Sie Verbindung ist sicher aus.
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 Zertifizierungsstellen-Stammzertifikat, das Zwischenzertifikat und das SSL-Blattzertifikat werden angezeigt.)
Wählen Sie die Schaltfläche Exportieren aus.
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.
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/track
auf den neuen Erfassungsendpunkt v2.1/track
verweisen. 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 jlink
erstellen, 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:
Wenn Ihre Anwendung auf Spring Boot basiert, fügen Sie den Application Insights Java-Agent programmgesteuert an die JVM an.
Verwenden Sie Java Version 11 oder höher.
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.