Gids voor probleemoplossing: Azure Monitor Application Insights voor Java

Dit artikel bevat informatie over probleemoplossing voor het oplossen van veelvoorkomende problemen die kunnen optreden wanneer u een Java-toepassing instrumenteert met behulp van de Java-agent voor Application Insights. Application Insights is een functie van de Azure Monitor-platformservice.

Het logboekbestand voor zelfdiagnose controleren

Application Insights Java 3 is standaard. x produceert een logboekbestand met de naam applicationinsights.log in dezelfde map die het applicationinsights-agent-3.2.11.jar-bestand bevat.

Dit logboekbestand is de eerste plaats om te controleren op hints over eventuele problemen die u mogelijk ondervindt.

Als Application Insights geen logboekbestand genereert, controleert u of uw Java-toepassing de machtiging Schrijven heeft voor de map die het applicationinsights-agent-3.2.11.jar-bestand bevat.

Als Application Insights nog steeds geen logboekbestand genereert, controleert u het stdout logboek van uw Java-toepassing op fouten. Application Insights Java 3. x moet fouten vastleggen die verhinderen dat het logboek wordt geregistreerd op de gebruikelijke locatie in het stdout logboek.

Verbindingsproblemen oplossen

Application Insights SDK's en agents verzenden telemetrie die moet worden opgenomen als REST-aanroepen op onze opname-eindpunten. Als u de connectiviteit van uw webserver of toepassingshostcomputer met de eindpunten van de opnameservice wilt testen, gebruikt u onbewerkte REST-clients van PowerShell of voert u curl-opdrachten uit. Zie Problemen met ontbrekende toepassingstelemetrie oplossen in Azure Monitor Application Insights.

Als de Application Insights Java-agent het verbindingsprobleem veroorzaakt, kunt u de volgende opties overwegen:

  • Controleer de verbindingsreeks voor de Application Insights-configuratie.

  • Gebruik Application Insights Java versie 3.4.6 of een latere versie om te controleren of het Java-sleutelarchief een vereist certificaat bevat. Hiervoor schakelt u de functie voor zelfdiagnose op het TRACE niveau in. Ziet u in de Application Insights-logboeken de volgende vermelding?

    TRACE c.m.applicationinsights.agent - Application Insights-basiscertificaat in de Java-sleutelopslag: false

    Als u deze vermelding ziet, raadpleegt u SSL-certificaten importeren om een basiscertificaat te importeren in het Java-sleutelarchief.

  • Als u de -Djsse.enableSNIExtension=false optie gebruikt, probeert u de agent uit te voeren zonder deze optie. Als u in Application Insights Java versie 3.4.5 opgeeft -Djsse.enableSNIExtension=false, wordt de volgende foutvermelding weergegeven in de logboeken:

    WARN c.m.applicationinsights.agent - Systeemeigenschap -Djsse.enableSNIExtension=false is gedetecteerd. Als u verbindingsproblemen hebt met Application Insights, verwijdert u dit.

  • Als geen van de vorige opties nuttig is, kunt u hulpprogramma's voor probleemoplossing gebruiken.

JVM (Virtuele Java-machine) kan niet worden gestart

Als de virtuele Java-machine (JVM) niet wordt gestart, wordt het bericht 'Fout bij het openen van zip-bestand of JAR-manifest ontbreekt' geretourneerd. Zie de volgende tabel om dit probleem op te lossen.

Probleem Actie
Het Java-archiefbestand (JAR) voor de agent is niet gevonden. Zorg ervoor dat u een geldig JAR-pad voor de agent opgeeft in het -javaagent argument JVM.
Het JAR-bestand van de agent is mogelijk beschadigd tijdens de bestandsoverdracht. Probeer het JAR-bestand van de agent opnieuw te downloaden.

Het starten van Tomcat Java-apps duurt enkele minuten

Als u Application Insights hebt ingeschakeld om uw Tomcat-toepassing te bewaken, kan er een vertraging van enkele minuten optreden in de tijd die nodig is om de toepassing te starten. Deze vertraging wordt veroorzaakt omdat Tomcat de JAR-bestanden van Application Insights probeert te scannen tijdens het opstarten van de toepassing. Als u de begintijd van de toepassing wilt versnellen, kunt u de JAR-bestanden van Application Insights uitsluiten van de lijst met gescande bestanden. Het scannen van deze JAR-bestanden is niet nodig.

Voer een upgrade uit van Application Insights Java 2. x SDK

Als u Application Insights Java 2 al gebruikt. x SDK in uw toepassing, kunt u deze blijven gebruiken. Application Insights Java 3. x-agent detecteert, legt en correleert aangepaste telemetrie die u verzendt via de 2. x SDK. Het voorkomt ook dubbele telemetrie door het onderdrukken van elke automatische verzameling die de 2. x SDK wel. Zie Upgraden van Java 2 voor meer informatie.x SDK.

Upgrade uitvoeren van Application Insights Java 3.0 Preview

Als u een upgrade uitvoert van de Java 3.0 Preview-agent, controleert u alle configuratieopties zorgvuldig. De JSON-structuur is gewijzigd in de versie 3.0 algemene beschikbaarheid (GA).

Deze wijzigingen omvatten:

  • De naam van het configuratiebestand is gewijzigd van ApplicationInsights.json in applicationinsights.json.

  • Het instrumentationSettings knooppunt is niet meer aanwezig. Alle inhoud in instrumentationSettings wordt verplaatst naar het hoofdniveau.

  • Configuratieknooppunten zoals sampling, jmxMetrics, instrumentationen heartbeat worden verplaatst preview naar het hoofdniveau.

Sommige logboekregistratie wordt niet automatisch verzameld

Logboekregistratie wordt alleen vastgelegd als deze voldoet aan de volgende criteria:

  • Het voldoet aan het niveau dat is geconfigureerd voor het logboekregistratieframework.

  • Het voldoet aan het niveau dat is geconfigureerd voor Application Insights.

Als uw logboekregistratieframework bijvoorbeeld is geconfigureerd voor logboekregistratie WARN (en hoger) vanuit het com.example pakket en Application Insights is geconfigureerd om vast te leggen INFO (en hoger), legt Application Insights alleen (en hoger) van het com.example pakket vast WARN .

Als u wilt controleren of een bepaalde logboekregistratie-instructie voldoet aan de geconfigureerde drempelwaarde van de logboekregistratieframeworks, controleert u of deze wordt weergegeven in uw gebruikelijke toepassingslogboek (in het bestand of de console).

U ziet ook dat als een uitzonderingsobject wordt doorgegeven aan de logboekregistratie, het logboekbericht (en details van het uitzonderingsobject) wordt weergegeven in de Azure Portal in de exceptions tabel in plaats van in de traces tabel. Voer de volgende Logboekenquery (Kusto) uit om de logboekberichten in de traces tabellen en exceptions te bekijken:

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

Zie de configuratie voor automatisch verzamelde logboekregistratie voor meer informatie.

SSL-certificaten importeren

Deze sectie helpt u bij het oplossen en mogelijk oplossen van de uitzonderingen die betrekking hebben op SSL-certificaten (Secure Sockets Layer) wanneer u de Java-agent gebruikt.

Er zijn twee verschillende paden om dit probleem op te lossen:

  • Als u een standaard Java-sleutelarchief gebruikt
  • Als u een aangepast Java-sleutelarchief gebruikt

Als u niet zeker weet welk pad u moet volgen, controleert u of u het JVM-argument hebt, -Djavax.net.ssl.trustStore=.... Als u dit JVM-argument niet hebt, gebruikt u waarschijnlijk het standaard Java-sleutelarchief. Als u dit JVM-argument hebt, gebruikt u waarschijnlijk een aangepast sleutelarchief en verwijst het argument JVM u naar uw aangepaste sleutelarchief.

Als u het standaard Java-sleutelarchief gebruikt

Het standaard Java-sleutelarchief bevat doorgaans al alle CA-basiscertificaten. Er kunnen echter enkele uitzonderingen zijn. Een ander basiscertificaat kan bijvoorbeeld het opnameeindpuntcertificaat ondertekenen. U wordt aangeraden deze stappen uit te voeren om dit probleem op te lossen:

  1. Controleer of het SSL-certificaat dat is gebruikt om het Application Insights-eindpunt te ondertekenen, al aanwezig is in het standaardsleutelarchief. Standaard worden de vertrouwde CA-certificaten opgeslagen in $JAVA_HOME/jre/lib/security/cacerts. Gebruik de volgende opdracht om certificaten weer te geven in een Java-sleutelarchief:

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

    U kunt de uitvoer omleiden naar een tijdelijk bestand, zodat u deze later eenvoudig kunt doorzoeken:

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

  2. Nadat u de lijst met certificaten hebt, volgt u de stappen om het SSL-certificaat te downloaden dat is gebruikt om het Application Insights-eindpunt te ondertekenen.

    Nadat u het certificaat hebt gedownload, genereert u een SHA-1-hash op het certificaat met behulp van de volgende opdracht:

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

    Kopieer de SHA-1-waarde en controleer of deze waarde aanwezig is in het temp.txt-bestand dat u eerder hebt opgeslagen. Als u de SHA-1-waarde niet kunt vinden in het tijdelijke bestand, ontbreekt het gedownloade SSL-certificaat in het standaard Java-sleutelarchief.

  3. Importeer het SSL-certificaat in het standaard Java-sleutelarchief met behulp van de volgende opdracht:

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

    In dit voorbeeld luidt de opdracht als volgt:

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

Als u een aangepast Java-sleutelarchief gebruikt

Als u een aangepast Java-sleutelarchief gebruikt, moet u mogelijk de SSL-certificaten voor de Application Insights-eindpunten importeren in dat sleutelarchief. We raden de volgende twee stappen aan om dit probleem op te lossen:

  1. Volg deze stappen om het SSL-certificaat te downloaden van het Application Insights-eindpunt.

  2. Voer de volgende opdracht uit om het SSL-certificaat te importeren in het aangepaste Java-sleutelarchief:

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

Stappen voor het downloaden van het SSL-certificaat

Opmerking

De volgende downloadinstructies voor SSL-certificaten zijn gevalideerd in de volgende browsers:

  • Google Chrome
  • Microsoft Edge
  1. Open het URL-adres https://westeurope-5.in.applicationinsights.azure.com/api/ping in een webbrowser.

  2. Selecteer in de adresbalk van de browser het pictogram Site-informatie weergeven (een vergrendelingssymbool naast het adres).

  3. Selecteer Verbinding is beveiligd.

  4. Selecteer het pictogram Certificaat weergeven .

  5. Selecteer in het dialoogvenster Certificaatviewer het tabblad Details .

  6. Selecteer in de lijst Certificaathiërarchie het certificaat dat u wilt downloaden. (Het CA-basiscertificaat, het tussenliggende certificaat en het leaf-SSL-certificaat worden weergegeven.)

  7. Selecteer de knop Exporteren .

  8. Blader in het dialoogvenster Opslaan als naar de map waarin u het certificaatbestand (.crt) wilt opslaan en selecteer opslaan.

  9. Als u het dialoogvenster Certificaatviewer wilt afsluiten, selecteert u de knop Sluiten (X).

Waarschuwing

U moet deze stappen herhalen om het nieuwe certificaat op te halen voordat het huidige certificaat verloopt. U vindt de verloopinformatie op het tabblad Details van het dialoogvenster Certificaatviewer .

Nadat u het certificaat hebt geselecteerd in de lijst Certificaathiërarchie , zoekt u het knooppunt Geldigheid in de lijst Certificaatvelden . Selecteer Niet eerder binnen dat knooppunt en controleer de datum en tijd die worden weergegeven in het vak Veldwaarde . Dit tijdstempel geeft aan wanneer het nieuwe certificaat geldig wordt. Selecteer op dezelfde manier Not After in het Knooppunt Geldigheid om te zien wanneer het nieuwe certificaat verloopt.

UnknownHostException begrijpen

Als u deze uitzondering ziet nadat u een upgrade hebt uitgevoerd naar een Java-agentversie die hoger is dan 3.2.0, kunt u de uitzondering mogelijk oplossen door uw netwerk te upgraden om het nieuwe eindpunt op te lossen dat in de uitzondering wordt weergegeven. De reden voor het verschil tussen Application Insights-versies is dat versies die hoger zijn dan 3.2.0 verwijzen naar het nieuwe opname-eindpunt v2.1/track, in vergelijking met de oudere v2/track. Het nieuwe opname-eindpunt leidt u automatisch om naar het opname-eindpunt (nieuw eindpunt dat wordt weergegeven in uitzondering) dat zich het dichtst bij de opslag voor uw Application Insights-resource bevindt.

Ontbrekende coderingssuites

Als de Application Insights Java-agent detecteert dat u geen van de coderingssuites hebt die worden ondersteund door de eindpunten waarmee deze verbinding maakt, waarschuwt de agent u en geeft een koppeling naar de ontbrekende coderingssuites.

Achtergrond van coderingssuites

Coderingssuites komen in het spel voordat een clienttoepassing en server informatie uitwisselen via een SSL- of TLS-verbinding (Transport Layer Security). De clienttoepassing initieert een SSL-handshake. Een deel van dat proces omvat het informeren van de server over de coderingssuites die worden ondersteund. De server ontvangt die informatie en vergelijkt de coderingssuites die worden ondersteund door de clienttoepassing met de algoritmen die worden ondersteund. Als de server een overeenkomst vindt, wordt de clienttoepassing gewaarschuwd en wordt er een beveiligde verbinding tot stand gebracht. Als er geen overeenkomst wordt gevonden, weigert de server de verbinding.

Coderingssuites aan clientzijde bepalen

In dit geval is de client de JVM waarop uw geïnstrueerde toepassing wordt uitgevoerd. Vanaf versie 3.2.5 registreert Application Insights Java een waarschuwingsbericht als ontbrekende coderingssuites verbindingsfouten met een van de service-eindpunten kunnen veroorzaken.

Als u een eerdere versie van Application Insights Java gebruikt, compileert en voert u het volgende Java-programma uit om de lijst met ondersteunde coderingssuites in uw JVM op te halen:

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

De Application Insights-eindpunten ondersteunen de volgende coderingssuites:

  • 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

Coderingssuites aan de serverzijde bepalen

In dit geval is de serverzijde het Application Insights-opname-eindpunt of het eindpunt voor metrische gegevens van Application Insights Live. U kunt een onlinehulpprogramma zoals SSLLABS gebruiken om de verwachte coderingssuites te bepalen die zijn gebaseerd op de eindpunt-URL.

De ontbrekende coderingssuites toevoegen

Als u Java 9 of een latere versie gebruikt, controleert u of de JVM de module in de jdk.crypto.cryptokimap jmods bevat. Als u een aangepaste Java-runtime bouwt met behulp van jlink, moet u ervoor zorgen dat u dezelfde module opneemt.

Anders moeten deze coderingssuites al deel uitmaken van moderne Java 8+-distributies. U wordt aangeraden de bron van uw geïnstalleerde Java-distributie te controleren om te onderzoeken waarom de beveiligingsproviders in het configuratiebestand java.security van die Java-distributie verschillen van standaard-Java-distributies.

Trage opstarttijd in Application Insights en Java 8

Java 8 heeft een bekend probleem dat is gerelateerd aan de verificatie van de JAR-bestandshandtekening van Java-agents. Dit probleem kan de opstarttijd in Application Insights verhogen. U kunt dit probleem oplossen door een van de volgende opties toe te passen:

U kunt ook de volgende experimentele functie proberen: Opstarttijdverbetering voor een beperkt aantal CPU-kernen. Als u problemen ondervindt tijdens het gebruik van deze functie, stuurt u ons feedback.

Disclaimerinformatie van derden

De producten van derden die in dit artikel worden vermeld, worden vervaardigd door bedrijven die onafhankelijk zijn van Microsoft. Microsoft verleent dan ook geen enkele garantie, impliciet noch anderszins, omtrent de prestaties of de betrouwbaarheid van deze producten.

Contacteer ons voor hulp

Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Feedback-community van Azure.