Probleemoplossingsgids: Azure Monitor Application Insights voor Java
Dit artikel bevat informatie over 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 zelfdiagnoselogboekbestand controleren
Application Insights Java 3 is standaard.x produceert een logboekbestand met de naam applicationinsights.log in dezelfde map met het applicationinsights-agent-3.2.11.jar bestand.
Dit logboekbestand is de eerste plaats om te controleren op hints over eventuele problemen die u ondervindt.
Als Application Insights geen logboekbestand genereert, controleert u of uw Java-toepassing de machtiging Schrijven heeft voor de map met het applicationinsights-agent-3.2.11.jar-bestand .
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 vastgelegd op de gebruikelijke locatie in het stdout
logboek.
Verbindingsproblemen oplossen
Application Insights SDK's en agents verzenden telemetriegegevens die moeten worden opgenomen als REST-aanroepen bij onze opname-eindpunten. Als u de connectiviteit vanaf uw webserver of toepassingshostcomputer wilt testen op de eindpunten van de opnameservice, gebruikt u onbewerkte REST-clients uit PowerShell of voert u curl-opdrachten uit. Zie Problemen met ontbrekende toepassingstelemetrie oplossen in Azure Monitor Application Insights.
Als de Java-agent van Application Insights het connectiviteitsprobleem 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 in op het
TRACE
niveau. In de Application Insights-logboeken ziet u 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 zonder die optie uit te voeren. Als u opgeeft-Djsse.enableSNIExtension=false
, wordt vanuit Application Insights Java versie 3.4.5 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 (Java Virtual Machine) kan niet worden gestart
Als de virtuele Java-machine (JVM) niet wordt gestart, wordt mogelijk het bericht 'Fout bij het openen van zip-bestand of JAR-manifest' 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 JVM-argument. |
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 probeert de JAR-bestanden van Application Insights te scannen tijdens het opstarten van de toepassing. Als u de starttijd van de toepassing wilt versnellen, kunt u de JAR-bestanden van Application Insights uitsluiten uit 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 de Application Insights Java 2 al gebruikt.x SDK in uw toepassing kunt u deze blijven gebruiken. Application Insights Java 3.x-agent detecteert, vastlegt en correleert eventuele aangepaste telemetrie die u via de 2 verzendt.x SDK. Het voorkomt ook dubbele telemetrie door elke automatische verzameling die de 2 onderdrukt.x SDK wel. Zie Upgrade uitvoeren vanuit 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 wordt gewijzigd in de algemene beschikbaarheidsrelease 3.0.
Deze wijzigingen zijn onder andere:
De naam van het configuratiebestand is gewijzigd van ApplicationInsights.json in applicationinsights.json.
Het
instrumentationSettings
knooppunt is niet meer aanwezig. Alle inhoudinstrumentationSettings
wordt verplaatst naar het hoofdniveau.Configuratieknooppunten, zoals
sampling
,jmxMetrics
eninstrumentation
heartbeat
worden verplaatstpreview
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 framework voor logboekregistratie.
Het voldoet aan het niveau dat is geconfigureerd voor Application Insights.
Als uw framework voor logboekregistratie bijvoorbeeld is geconfigureerd voor logboekregistratie WARN
(en hoger) van het com.example
pakket en Application Insights is geconfigureerd voor het vastleggen INFO
(en hoger), worden (en hoger) alleen vastgelegd WARN
(en hoger) van het com.example
pakket.
Als u ervoor wilt zorgen dat een bepaalde logboekregistratieinstructie voldoet aan de geconfigureerde drempelwaarde voor logboekregistratieframeworks, controleert u of deze wordt weergegeven in het gebruikelijke toepassingslogboek (in het bestand of de console).
Als een uitzonderingsobject wordt doorgegeven aan de logboekregistratie, wordt het logboekbericht (en details van uitzonderingsobject) ook weergegeven in Azure Portal in de exceptions
tabel in plaats van de traces
tabel.
Voer de volgende logboekquery (Kusto) uit om de logboekberichten in zowel de als exceptions
de traces
tabellen weer te geven:
union traces, (exceptions | extend message = outerMessage)
| project timestamp, message, itemType
Zie de configuratie van de automatisch verzamelde logboekregistratie voor meer informatie.
SSL-certificaten importeren
Deze sectie helpt u bij het oplossen van problemen en mogelijk het oplossen van de uitzonderingen die betrekking hebben op SSL-certificaten (Secure Sockets Layer) wanneer u de Java-agent gebruikt.
Er zijn twee verschillende paden voor het oplossen van dit probleem:
- 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 de standaard-Java-sleutelopslag.
Als u dit JVM-argument hebt, gebruikt u waarschijnlijk een aangepast sleutelarchief en verwijst het JVM-argument u naar uw aangepaste sleutelarchief.
Als u de standaard-Java-sleutelarchief gebruikt
De standaard Java-sleutelopslag 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:
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 in een Java-sleutelarchief weer te geven:
keytool -list -v -keystore <path-to-keystore-file>
U kunt de uitvoer omleiden naar een tijdelijk bestand, zodat u later eenvoudig kunt zoeken:
keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts > temp.txt
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 in het tijdelijke bestand kunt vinden, ontbreekt het gedownloade SSL-certificaat in het standaard-Java-sleutelarchief.
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 wordt de opdracht als volgt gelezen:
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 die sleutelopslag. We raden de volgende twee stappen aan om dit probleem op te lossen:
Volg deze stappen om het SSL-certificaat te downloaden van het Application Insights-eindpunt.
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
Open het https://westeurope-5.in.applicationinsights.azure.com/api/ping URL-adres in een webbrowser.
Selecteer in de adresbalk van de browser het pictogram Site-informatie weergeven (een vergrendelingssymbool naast het adres).
Selecteer Verbinding is beveiligd.
Selecteer het pictogram Certificaat weergeven.
Selecteer in het dialoogvenster Certificaatviewer het tabblad Details .
Selecteer in de lijst certificaathiërarchie het certificaat dat u wilt downloaden. (Het CA-basiscertificaat, het tussenliggende certificaat en het ssl-certificaat worden weergegeven.)
Selecteer de knop Exporteren .
Blader in het dialoogvenster Opslaan als naar de map waarnaar u het certificaatbestand (.crt) wilt opslaan en selecteer vervolgens Opslaan.
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 in de lijst certificaathiërarchie hebt geselecteerd, zoekt u het geldigheidsknooppunt in de lijst met certificaatvelden . Selecteer Niet vóór binnen dat knooppunt en bekijk de datum en tijd die wordt weergegeven in het vak Veldwaarde . Deze tijdstempel geeft aan wanneer het nieuwe certificaat geldig wordt. Selecteer op dezelfde manier Not After in het geldigheidsknooppunt om te leren wanneer het nieuwe certificaat verloopt.
Informatie over UnknownHostException
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 bij te werken om het nieuwe eindpunt dat in de uitzondering wordt weergegeven, op te lossen. De reden voor het verschil tussen Application Insights-versies is dat versies die later zijn dan 3.2.0 verwijzen naar het nieuwe opname-eindpunt v2.1/track
, vergeleken met de oudere v2/track
. Met het nieuwe opname-eindpunt wordt u automatisch omgeleid naar het opname-eindpunt (nieuw eindpunt dat in uitzondering wordt weergegeven) die het dichtst bij de opslag voor uw Application Insights-resource is.
Ontbrekende coderingssuites
Als de Java-agent van Application Insights detecteert dat u geen van de coderingssuites hebt die worden ondersteund door de eindpunten waarmee deze verbinding maakt, waarschuwt de agent u en geeft deze een koppeling naar de ontbrekende coderingssuites.
Achtergrond van coderingssuites
Coderingssuites worden afgespeeld 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 dit proces omvat het melden van de server over welke coderingssuites het ondersteunt. 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 op de hoogte gebracht 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 tot 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 op te halen in uw 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]);
}
}
}
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 serverzijde bepalen
In dit geval is de serverzijde het Application Insights-opname-eindpunt of het eindpunt voor livegegevens van Application Insights. 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 jdk.crypto.cryptoki
module in de map jmods bevat. Zorg er ook voor dat u dezelfde module opneemt als u een aangepaste Java-runtime bouwt met behulp jlink
van.
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 dat java-distributiebestand voor java-distributie verschillen van standaard-Java-distributies .
Trage opstarttijd in Application Insights
Java 8
Java 8 heeft een bekend probleem dat betrekking heeft op 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:
Als uw toepassing is gebaseerd op Spring Boot, koppelt u de Application Insights Java-agent programmatisch aan de JVM.
Gebruik Java versie 11 of een latere versie.
Java hoger dan versie 8
Probeer een van de volgende methoden om dit probleem met de Application Insights Java-agent op te lossen:
- Gebruik een Azure-configuratie met meer CPU-vermogen.
- Schakel enkele instrumentaties uit die worden beschreven in Specifieke automatisch opgehaalde telemetrie onderdrukken.
- Probeer deze experimentele functie: Verbetering van opstarttijd voor een beperkt aantal CPU-kernen. Als u problemen ondervindt tijdens het gebruik van deze functie, stuurt u ons een feedback.
U kunt ook de bewakingsoplossingen voor Systeemeigen Java proberen die ook van toepassing zijn op een JVM-toepassing:
- Met Spring Boot is de Microsoft-distributie van de OpenTelemetry-starter.
- Met Quarkus is de Quarkus Opentelemetry Exporter voor Microsoft Azure.
Inzicht in dubbele bewerkings-id's
Toepassingslogica kan ertoe leiden dat een bewerkings-id opnieuw wordt gebruikt door meerdere telemetrie-items, zoals in dit voorbeeld wordt weergegeven. De duplicatie kan ook afkomstig zijn van binnenkomende aanvragen. U kunt dit identificeren door de volgende bewerkingen uit te voeren:
Schakel de opname van de
traceparent
enrequest-id
headers in het applicationinsigths.json bestand als volgt in:{ "preview": { "captureHttpServerHeaders": { "requestHeaders": [ "traceparent", "request-id" ] } } }
Schakel zelfdiagnose in op foutopsporingsniveau en start de toepassing opnieuw.
In het volgende logboekvoorbeeld is de bewerkings-id afkomstig van een binnenkomende aanvraag, niet van Application Insights:
{"ver":1,"name":"Request",...,"ai.operation.id":"4e757357805f4eb18705abd24326b550)","ai.operation.parentId":"973487efc3db7d03"},"data":{"baseType":"RequestData","baseData":{...,"properties":{"http.request.header.traceparent":"00-4e757357805f4eb18705abd24326b550-973487efc3db7d03-01", ...}}}}
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 Azure-feedbackcommunity.