Felsökningsguide: Azure Monitor Application Insights för Java

Den här artikeln innehåller felsökningsinformation för att lösa vanliga problem som kan uppstå när du instrumenterar ett Java-program med hjälp av Java-agenten för Application Insights. Application Insights är en funktion i Azure Monitor-plattformstjänsten.

Kontrollera loggfilen för självdiagnostik

Som standard Application Insights Java 3. x skapar en loggfil med namnet applicationinsights.log i samma katalog som innehåller applicationinsights-agent-3.2.11.jar-filen .

Den här loggfilen är det första stället att söka efter tips om eventuella problem som kan uppstå.

Om Application Insights inte genererar en loggfil kontrollerar du att Java-programmet har skrivbehörighet till den katalog som innehåller applicationinsights-agent-3.2.11.jar filen.

Om Application Insights fortfarande inte genererar en loggfil kontrollerar du om det finns fel i loggen stdout från Java-programmet. Application Insights Java 3. x ska logga eventuella fel som hindrar den från att logga till sin vanliga plats i loggen stdout .

Felsöka anslutningsproblem

Application Insights SDK:er och agenter skickar telemetri som ska matas in som REST-anrop vid våra inmatningsslutpunkter. Om du vill testa anslutningen från webbservern eller programvärddatorn till slutpunkterna för inmatningstjänsten använder du råa REST-klienter från PowerShell eller kör curl-kommandon. Se Felsöka programtelemetri som saknas i Azure Monitor Application Insights.

Om Application Insights Java-agenten orsakar anslutningsproblemet bör du överväga följande alternativ:

  • Kontrollera anslutningssträng för Application Insights-konfigurationen.

  • Använd Application Insights Java version 3.4.6 eller en senare version för att kontrollera att Java-nyckelarkivet innehåller ett obligatoriskt certifikat. Det gör du genom att aktivera självdiagnostikfunktionenTRACE nivån. Ser du följande post i Application Insights-loggarna?

    TRACE c.m.applicationinsights.agent – Application Insights-rotcertifikat i Java-nyckelarkivet: false

    Om du ser den här posten kan du läsa Importera SSL-certifikat för att importera ett rotcertifikat i Java-nyckelarkivet.

  • Om du använder -Djsse.enableSNIExtension=false alternativet kan du försöka köra agenten utan det alternativet. Om du anger -Djsse.enableSNIExtension=falsei Application Insights Java version 3.4.5 visas följande felpost i loggarna:

    WARN c.m.applicationinsights.agent – Systemegenskapen -Djsse.enableSNIExtension=false har identifierats. Om du har anslutningsproblem med Application Insights tar du bort det här.

  • Om inget av de tidigare alternativen är till hjälp kan du använda felsökningsverktyg.

Det går inte att starta den virtuella Java-datorn (JVM)

Om den virtuella Java-datorn (JVM) inte startar kan det returnera meddelandet "Det gick inte att öppna zip-filen eller JAR-manifestet saknas". Information om hur du felsöker det här problemet finns i följande tabell.

Problem Åtgärd
Java-arkivfilen (JAR) för agenten hittades inte. Kontrollera att du anger en giltig JAR-sökväg för agenten -javaagent i JVM-argumentet.
AGENT-JAR-filen kan ha skadats under filöverföringen. Försök att ladda ned agentens JAR-fil igen.

Det tar flera minuter att starta Tomcat Java-appar

Om du har aktiverat Application Insights för att övervaka ditt Tomcat-program kan det uppstå en fördröjning på flera minuter under den tid det tar att starta programmet. Den här fördröjningen beror på att Tomcat försöker genomsöka Application Insights JAR-filerna under programstarten. För att påskynda programmets starttid kan du undanta Application Insights JAR-filerna från listan över genomsökta filer. Det är inte nödvändigt att skanna dessa JAR-filer.

Uppgradera från Application Insights Java 2. x SDK

Om du redan använder Application Insights Java 2. x SDK i ditt program kan du fortsätta använda det. Application Insights Java 3. x agent identifierar, samlar in och korrelerar all anpassad telemetri som du skickar via 2. x SDK. Det förhindrar också dubbletter av telemetri genom att ignorera alla automatiska samlingar som 2: et. x SDK gör det. Mer information finns i Uppgradera från Java 2.x SDK.

Uppgradera från Förhandsversionen av Application Insights Java 3.0

Om du uppgraderar från Java 3.0 Preview-agenten granskar du alla konfigurationsalternativ noggrant. JSON-strukturen ändras i versionen 3.0 allmän tillgänglighet (GA).

Dessa ändringar omfattar:

  • Namnet på konfigurationsfilen har ändrats från ApplicationInsights.json till applicationinsights.json.

  • Noden instrumentationSettings finns inte längre. Allt innehåll i instrumentationSettings flyttas till rotnivån.

  • Konfigurationsnoder som sampling, jmxMetrics, instrumentationoch heartbeat flyttas ut från preview rotnivån.

Viss loggning samlas inte in automatiskt

Loggning registreras endast om den uppfyller följande kriterier:

  • Den uppfyller den nivå som har konfigurerats för loggningsramverket.

  • Den uppfyller den nivå som har konfigurerats för Application Insights.

Om ditt loggningsramverk till exempel har konfigurerats för att logga WARN (och ovan) från com.example paketet och Application Insights har konfigurerats för att avbilda INFO (och ovan) samlar Application Insights bara in WARN (och ovan) från com.example paketet.

Kontrollera att en viss loggningsinstruktor uppfyller det konfigurerade tröskelvärdet för loggningsramverken genom att kontrollera att den visas i din vanliga programlogg (i filen eller konsolen).

Observera också att om ett undantagsobjekt skickas till loggaren visas loggmeddelandet (och information om undantagsobjektet) i Azure Portal i tabellen i exceptions stället för tabellentraces. Om du vill se loggmeddelanden i både tabellerna traces och exceptions kör du följande Kusto-fråga (Logs):

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

Mer information finns i den automatiskt insamlade loggningskonfigurationen.

Importera SSL-certifikat

Det här avsnittet hjälper dig att felsöka och eventuellt åtgärda undantag som är relaterade till SSL-certifikat (Secure Sockets Layer) när du använder Java-agenten.

Det finns två olika sökvägar för att lösa det här problemet:

  • Om du använder ett Java-standardnyckelarkiv
  • Om du använder ett anpassat Java-nyckelarkiv

Om du inte är säker på vilken sökväg du ska följa kontrollerar du om du har JVM-argumentet . -Djavax.net.ssl.trustStore=... Om du inte har det här JVM-argumentet använder du förmodligen java-standardnyckelarkivet. Om du har det här JVM-argumentet använder du förmodligen ett anpassat nyckelarkiv, och JVM-argumentet pekar dig på ditt anpassade nyckelarkiv.

Om du använder java-standardnyckellagringen

Java-standardnyckelarkivet har vanligtvis redan alla CA-rotcertifikat. Det kan dock finnas vissa undantag. Ett annat rotcertifikat kan till exempel signera inmatningsslutpunktscertifikatet. Vi rekommenderar att du följer dessa steg för att lösa problemet:

  1. Kontrollera om SSL-certifikatet som användes för att signera Application Insights-slutpunkten redan finns i standardnyckelarkivet. Som standard lagras de betrodda CA-certifikaten i $JAVA_HOME/jre/lib/security/cacerts. Om du vill lista certifikat i ett Java-nyckelarkiv använder du följande kommando:

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

    Du kan omdirigera utdata till en tillfällig fil så att det är enkelt att söka på senare:

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

  2. När du har listan över certifikat följer du stegen för att ladda ned SSL-certifikatet som användes för att signera Application Insights-slutpunkten.

    När du har laddat ned certifikatet genererar du en SHA-1-hash på certifikatet med hjälp av följande kommando:

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

    Kopiera SHA-1-värdet och kontrollera om det här värdet finns i dentemp.txt fil som du sparade tidigare. Om du inte hittar SHA-1-värdet i den tillfälliga filen saknas det nedladdade SSL-certifikatet i java-standardnyckelarkivet.

  3. Importera SSL-certifikatet till java-standardnyckellagringen med hjälp av följande kommando:

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

    I det här exemplet lyder kommandot så här:

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

Om du använder ett anpassat Java-nyckelarkiv

Om du använder ett anpassat Java-nyckelarkiv kan du behöva importera SSL-certifikaten för Application Insights-slutpunkterna till det nyckelarkivet. Vi rekommenderar följande två steg för att lösa problemet:

  1. Följ de här stegen för att ladda ned SSL-certifikatet från Application Insights-slutpunkten.

  2. Kör följande kommando för att importera SSL-certifikatet till det anpassade Java-nyckelarkivet:

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

Steg för att ladda ned SSL-certifikatet

Obs!

Följande instruktioner för nedladdning av SSL-certifikat verifierades i följande webbläsare:

  • Google Chrome
  • Microsoft Edge
  1. https://westeurope-5.in.applicationinsights.azure.com/api/ping Öppna URL-adressen i en webbläsare.

  2. I webbläsarens adressfält väljer du ikonen Visa webbplatsinformation (en låssymbol som är bredvid adressen).

  3. Välj Anslutning är säkert.

  4. Välj ikonen Visa certifikat .

  5. I dialogrutan Certifikatgranskare väljer du fliken Information .

  6. I listan Certifikathierarki väljer du det certifikat som du vill ladda ned. (CA-rotcertifikatet, det mellanliggande certifikatet och löv-SSL-certifikatet visas.)

  7. Välj knappen Exportera .

  8. I dialogrutan Spara som bläddrar du till den katalog där du vill spara certifikatfilen (.crt) och väljer sedan Spara.

  9. Om du vill avsluta dialogrutan Certifikatgranskare väljer du knappen Stäng (X).

Varning

Du måste upprepa de här stegen för att hämta det nya certifikatet innan det aktuella certifikatet upphör att gälla. Du hittar förfalloinformationen på fliken Information i dialogrutan Certifikatgranskare .

När du har valt certifikatet i listan Certifikathierarki letar du upp noden Giltighet i listan Certifikatfält . Välj Inte före inom noden och granska sedan datum och tid som visas i rutan Fältvärde . Den här tidsstämpeln anger när det nya certifikatet blir giltigt. På samma sätt väljer du Inte efter i noden Giltighet för att lära dig när det nya certifikatet upphör att gälla.

Förstå UnknownHostException

Om du ser det här undantaget när du har uppgraderat till en Java-agentversion som är senare än 3.2.0 kanske du kan åtgärda undantaget genom att uppgradera nätverket för att matcha den nya slutpunkten som visas i undantaget. Orsaken till skillnaden mellan Application Insights-versioner är att versioner som är senare än 3.2.0 pekar på den nya inmatningsslutpunkten v2.1/trackjämfört med den äldre v2/track. Den nya inmatningsslutpunkten omdirigerar dig automatiskt till inmatningsslutpunkten (ny slutpunkt som visas i undantag) som är närmast lagringen för Application Insights-resursen.

Chiffersviter saknas

Om Application Insights Java-agenten upptäcker att du inte har några chiffersviter som stöds av de slutpunkter som den ansluter till, varnar agenten dig och tillhandahåller en länk till de chiffersviter som saknas.

Bakgrund i chiffersviter

Chiffersviter spelar in innan ett klientprogram och en server utbyter information över en SSL- eller TLS-anslutning (Transport Layer Security). Klientprogrammet initierar en SSL-handskakning. En del av den processen handlar om att meddela servern om vilka chiffersviter den stöder. Servern tar emot den informationen och jämför chiffersviterna som stöds av klientprogrammet med de algoritmer som stöds. Om servern hittar en matchning meddelar den klientprogrammet och en säker anslutning upprättas. Om den inte hittar någon matchning nekar servern anslutningen.

Så här fastställer du chiffersviter på klientsidan

I det här fallet är klienten den JVM som ditt instrumenterade program körs på. Från och med version 3.2.5 loggar Application Insights Java ett varningsmeddelande om saknade chiffersviter kan orsaka anslutningsfel till en av tjänstslutpunkterna.

Om du använder en tidigare version av Application Insights Java ska du kompilera och köra följande Java-program för att hämta listan över chiffersviter som stöds i din JVM:

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

Application Insights-slutpunkterna stöder följande chiffersviter:

  • 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

Så här fastställer du chiffersviter på serversidan

I det här fallet är serversidan Slutpunkten för Application Insights-inmatning eller Application Insights Live-måttslutpunkten. Du kan använda ett onlineverktyg som SSLLABS för att fastställa de förväntade chiffersviterna som baseras på slutpunkts-URL:en.

Så här lägger du till de saknade chiffersviterna

Om du använder Java 9 eller en senare version kontrollerar du att JVM innehåller modulen jdk.crypto.cryptoki i jmods-mappen . Om du skapar en anpassad Java-körning med hjälp jlinkav kontrollerar du också att du inkluderar samma modul.

Annars bör dessa chiffersviter redan vara en del av moderna Java 8+-distributioner. Vi rekommenderar att du kontrollerar källan för din installerade Java-distribution för att undersöka varför säkerhetsprovidrar i java-distributionens java.security-konfigurationsfil skiljer sig från Java-standarddistributioner.

Långsam starttid i Application Insights och Java 8

Java 8 har ett känt problem som är relaterat till verifiering av JAR-filsignatur för Java-agenter. Det här problemet kan öka starttiden i Application Insights. Du kan åtgärda problemet genom att använda något av följande alternativ:

Du kan också prova följande experimentella funktion: Förbättring av starttiden för ett begränsat antal processorkärnor. Om det uppstår problem när du använder den här funktionen kan du skicka feedback till oss.

Ansvarsfriskrivning för information från tredje part

De produkter från andra tillverkare som diskuteras i denna artikel tillverkas oberoende av Microsoft. Produkternas funktion eller tillförlitlighet kan därför inte garanteras.

Kontakta oss för att få hjälp

Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.