Problemen met ontbrekende toepassingstelemetrie in Azure Monitor Application Insights oplossen
Dit artikel helpt u bij het identificeren van de stap in de verwerkingspijplijn die ervoor zorgt dat telemetrie ontbreekt door connectiviteit en telemetrieopname te testen met behulp van PowerShell of curl.
Stappen waardoor telemetrie ontbreekt
In de volgende afbeelding ziet u de stappen waar telemetrie ontbreekt tijdens opname en verbruik:
Als toepassingstelemetrie niet wordt weergegeven in Azure Portal, kunnen fouten in de stappen in de verwerkingspijplijn de oorzaak zijn:
- De Application Insights SDK of agent is onjuist geconfigureerd en verzendt geen toepassingstelemetrie naar het opname-eindpunt.
- De SDK of agent is correct geconfigureerd, maar het netwerk blokkeert aanroepen naar het opname-eindpunt.
- Het opname-eindpunt daalt of beperkt inkomende telemetriegegevens.
- De opnamepijplijn daalt of vertraagt de telemetrie ernstig als onderdeel van de verwerking vanwege de servicestatus.
- (Ongebruikelijk) Log Analytics ondervindt problemen met de servicestatus bij het opslaan van telemetrierecords.
- (Ongebruikelijk) De query-API mislukt
api.applicationinsights.io
bij het uitvoeren van query's op records uit Log Analytics. - Azure Portal kan de records die u probeert weer te geven niet ophalen of weergeven.
Stap identificeren door voorbeeldtelemetrierecord te verzenden
Configuratieproblemen of tijdelijke problemen kunnen zich overal in de Application Insights-service voordoen. Als u de stap in de verwerkingspijplijn wilt identificeren die symptomen veroorzaakt van geen gegevens of ontbrekende gegevens, verzendt u een voorbeeldtelemetrierecord met behulp van PowerShell of curl. Ga voor het PowerShell-script of de curl-opdracht naar de volgende secties:
- PowerShell-script voor het verzenden van het resultaat van de beschikbaarheidstest
- Curl-opdracht voor het verzenden van het resultaat van de beschikbaarheidstest
- PowerShell-script voor het verzenden van telemetrierecords voor aanvragen
Als de web-app wordt uitgevoerd op een on-premises server of azure-VM, maakt u verbinding met de server of VM en verzendt u één telemetrierecord naar het Exemplaar van de Applications Insights-service met behulp van PowerShell. Als de web-app met problemen met het verzenden van telemetrie wordt uitgevoerd op Kudu, voert u het volgende script uit vanuit de PowerShell-foutopsporingsconsole van Kudu in Azure Web Apps.
$ProgressPreference = "SilentlyContinue"
Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsing
Notitie
- Voordat u de
Invoke-WebRequest
cmdlet uitvoert, moet u de$ProgressPreference = "SilentlyContinue"
cmdlet uitgeven. - U kunt het niet gebruiken
-Verbose
of-Debug
. Gebruik in plaats daarvan-UseBasicParsing
.
Nadat u een voorbeeldtelemetrierecord hebt verzonden met behulp van PowerShell, gaat u naar het tabblad Application Insights-logboeken in Azure Portal en controleert u of deze binnenkomt. Als de voorbeeldtelemetrierecord wordt weergegeven, wordt een groot deel van de verwerkingspijplijn geëlimineerd.
Een voorbeeld van een telemetrierecord die correct wordt opgeslagen en weergegeven, betekent:
- De lokale server of VM heeft DNS die wordt omgezet in het juiste IP-adres.
- Het netwerk heeft het voorbeeld aan het opname-eindpunt geleverd zonder dat het wordt geblokkeerd of verwijderd.
- Het opname-eindpunt heeft de nettolading van het voorbeeld geaccepteerd en verwerkt via de opnamepijplijn.
- Log Analytics heeft de voorbeeldrecord correct opgeslagen.
- Het tabblad Logboeken van Azure Portal kan een query uitvoeren op de API (
api.applicationinsights.io
) en de voorbeeldrecord weergeven in Azure Portal.
Als de gegenereerde voorbeeldrecord binnenkomt bij uw Application Insights-exemplaar en u kunt een query uitvoeren op de voorbeeldrecord met behulp van het resourcemenu Logboeken , kunt u problemen met de Application Insights SDK of agent oplossen. U kunt vervolgens doorgaan met het verzamelen van SDK-logboeken, zelfdiagnoselogboeken of profilertraceringen, afhankelijk van wat geschikt is voor de SDK- of agentversie.
De volgende secties bevatten informatie over het verzenden van een voorbeeldtelemetrierecord met behulp van PowerShell of curl.
PowerShell-script voor het verzenden van het resultaat van de beschikbaarheidstest
Resultaten van beschikbaarheidstests zijn het ideale telemetrietype waarmee u kunt testen. De reden hiervoor is dat de opnamepijplijn nooit resultaten van beschikbaarheidstests uitsampt. Als u een telemetrierecord voor aanvragen verzendt, kan deze worden uitgemonsterd wanneer u opnamesampling hebt ingeschakeld. Begin met een voorbeeld van het resultaat van een beschikbaarheidstest en probeer zo nodig andere telemetrietypen.
Hier volgt een PowerShell-voorbeeldscript waarmee een resultaat van een beschikbaarheidstest wordt verzonden:
# Info: Provide either the connection string or ikey for your Application Insights resource
$ConnectionString = ""
$InstrumentationKey = ""
function ParseConnectionString {
param ([string]$ConnectionString)
$Map = @{}
foreach ($Part in $ConnectionString.Split(";")) {
$KeyValue = $Part.Split("=")
$Map.Add($KeyValue[0], $KeyValue[1])
}
return $Map
}
# If ikey is the only parameter supplied, we'll send telemetry to the global ingestion endpoint instead of regional endpoint found in connection strings
If (($InstrumentationKey) -and ("" -eq $ConnectionString)) {
$ConnectionString = "InstrumentationKey=$InstrumentationKey;IngestionEndpoint=https://dc.services.visualstudio.com/"
}
$map = ParseConnectionString($ConnectionString)
$url = $map["IngestionEndpoint"] + "v2/track"
$ikey = $map["InstrumentationKey"]
$lmUrl = $map["LiveEndpoint"]
$time = (Get-Date).ToUniversalTime().ToString("o")
$availabilityData = @"
{
"data": {
"baseData": {
"ver": 2,
"id": "SampleRunId",
"name": "Microsoft Support Sample Webtest Result",
"duration": "00.00:00:10",
"success": true,
"runLocation": "Region Name",
"message": "Sample Webtest Result",
"properties": {
"Sample Property": "Sample Value"
}
},
"baseType": "AvailabilityData"
},
"ver": 1,
"name": "Microsoft.ApplicationInsights.Metric",
"time": "$time",
"sampleRate": 100,
"iKey": "$ikey",
"flags": 0
}
"@
# Uncomment one or more of the following lines to test client TLS/SSL protocols other than the machine default option
# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::SSL3
# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS
# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS11
# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS12
# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS13
$ProgressPreference = "SilentlyContinue"
Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsing
Met dit script wordt een onbewerkte REST-aanvraag gebouwd om één resultaat voor een beschikbaarheidstest te leveren aan het Application Insights-onderdeel. Wanneer u dit script gebruikt, geeft u de $ConnectionString
of $InstrumentationKey
parameter op.
- Als alleen de parameter verbindingsreeks wordt opgegeven, wordt telemetrie verzonden naar het regionale eindpunt in de verbindingsreeks.
- Als alleen de instrumentatiesleutelparameter (ikey) wordt opgegeven, wordt telemetrie verzonden naar het globale opname-eindpunt.
- Als zowel verbindingsreeks als ikey-parameters worden opgegeven, verzendt het script telemetrie naar het regionale eindpunt in de verbindingsreeks.
Notitie
- Test de verbinding die door uw toepassing is gemaakt. Als u Application Insights inschakelt in Azure Portal, bent u waarschijnlijk afhankelijk van verbindingsreeks met regionale eindpunten.
https://<region>.in.applicationinsights.azure.com
Als uw SDK-configuratie alleen de ikey levert, vertrouwt u op het globale eindpunt.https://dc.applicationinsights.azure.com
Zorg ervoor dat u de scriptparameter vult die overeenkomt met de sdk-configuratie van uw webtoepassing, waarbij u de verbindingsreeks of de ikey opgeeft. - Op 31 maart 2025 eindigt de ondersteuning voor opname van instrumentatiesleutels. Opname van instrumentatiesleutels blijft werken, maar we bieden geen updates of ondersteuning meer voor de functie. Overgang naar verbindingsreeks s om te profiteren van nieuwe mogelijkheden.
Het is het eenvoudigst om dit script uit te voeren vanuit de PowerShell ISE-omgeving op een IaaS- of Azure-exemplaar van een virtuele-machineschaalset . U kunt het script ook kopiëren en plakken in de PowerShell-foutopsporingsconsole van de App Service Kudu-interface en het vervolgens uitvoeren.
Wanneer het script wordt uitgevoerd, zoekt u naar een HTTP 200-antwoord en controleert u de antwoorddetails. Als onderdeel van de JSON-nettolading van het antwoord worden de volgende details verwacht:
- Het
itemsReceived
aantal komt overeen met deitemsAccepted
. - Het opname-eindpunt informeert de client: u hebt één telemetrierecord verzonden en we hebben één telemetrierecord geaccepteerd.
Raadpleeg de volgende schermopname als voorbeeld:
Curl-opdracht voor het verzenden van het resultaat van de beschikbaarheidstest
Als u linux-VM's uitvoert, gebruikt u curl in plaats van PowerShell om een vergelijkbare REST-aanvraag te verzenden. U moet de hostnaam van het opname-eindpunt, de iKey
waarde en de time
waarden aanpassen. Het Application Insights-opname-eindpunt accepteert geen records ouder dan 48 uur.
Hier volgen voorbeelden van curl-opdrachten waarmee één resultaat van een beschikbaarheidstest wordt verzonden:
Curl-opdracht voor Linux/MacOS:
curl -H "Content-Type: application/json" -X POST -d '{"data":{"baseData":{"ver":2,"id":"SampleRunId","name":"MicrosoftSupportSampleWebtestResultUsingCurl","duration":"00.00:00:10","success":true,"runLocation":"RegionName","message":"SampleWebtestResult","properties":{"SampleProperty":"SampleValue"}},"baseType":"AvailabilityData"},"ver":1,"name":"Microsoft.ApplicationInsights.Metric","time":"2022-09-01T12:00:00.0000000Z","sampleRate":100,"iKey":"########-####-####-####-############","flags":0}' https://dc.applicationinsights.azure.com/v2.1/track
Curl-opdracht voor Windows:
curl -H "Content-Type: application/json" -X POST -d {\"data\":{\"baseData\":{\"ver\":2,\"id\":\"SampleRunId\",\"name\":\"MicrosoftSupportSampleWebtestResultUsingCurl\",\"duration\":\"00.00:00:10\",\"success\":true,\"runLocation\":\"RegionName\",\"message\":\"SampleWebtestResult\",\"properties\":{\"SampleProperty\":\"SampleValue\"}},\"baseType\":\"AvailabilityData\"},\"ver\":1,\"name\":\"Microsoft.ApplicationInsights.Metric\",\"time\":\"2021-10-05T22:00:00.0000000Z\",\"sampleRate\":100,\"iKey\":\"########-####-####-####-############\",\"flags\":0} https://dc.applicationinsights.azure.com/v2/track
PowerShell-script voor het verzenden van telemetrierecords voor aanvragen
Als u problemen met ontbrekende aanvraagtelemetrie wilt oplossen, gebruikt u het volgende PowerShell-script om het verzenden van één aanvraagtelemetrierecord te testen. Dit telemetrietype is vatbaar voor de configuratie van opnamesampling aan de serverzijde. Controleer of opnamesampling is uitgeschakeld om te controleren of de testrecord correct is opgeslagen.
# Info: Provide either the connection string or ikey for your Application Insights resource
$ConnectionString = ""
$InstrumentationKey = ""
function ParseConnectionString {
param ([string]$ConnectionString)
$Map = @{}
foreach ($Part in $ConnectionString.Split(";")) {
$KeyValue = $Part.Split("=")
$Map.Add($KeyValue[0], $KeyValue[1])
}
return $Map
}
# If ikey is the only parameter supplied, we'll send telemetry to the global ingestion endpoint instead of regional endpoint found in connection strings
If (($InstrumentationKey) -and ("" -eq $ConnectionString)) {
$ConnectionString = "InstrumentationKey=$InstrumentationKey;IngestionEndpoint=https://dc.services.visualstudio.com/"
}
$map = ParseConnectionString($ConnectionString)
$url = $map["IngestionEndpoint"] + "v2/track"
$ikey = $map["InstrumentationKey"]
$lmUrl = $map["LiveEndpoint"]
$time = (Get-Date).ToUniversalTime().ToString("o")
$requestData = @"
{
"data": {
"baseType": "RequestData",
"baseData": {
"ver": 2,
"id": "22093920382029384",
"name": "GET /msftsupport/requestdata/",
"starttime": "$time",
"duration": "00:00:01.0000000",
"success": true,
"responseCode": "200",
"url": "https://localhost:8080/requestData/sampleurl",
"httpMethod": "GET"
}
},
"ver": 1,
"iKey": "$ikey",
"name": "Microsoft.ApplicationInsights.Request",
"time": "$time",
"sampleRate": 100,
"flags": 0
}
"@
# Uncomment one or more of the following lines to test client TLS/SSL protocols other than the machine default option
# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::SSL3
# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS
# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS11
# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS12
# [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS13
$ProgressPreference = "SilentlyContinue"
Invoke-WebRequest -Uri $url -Method POST -Body $requestData -UseBasicParsing
Problemen met SSL- of TLS-configuratie oplossen
Als de bovenstaande scripts mislukken, moet u problemen met de SSL- of TLS-configuratie oplossen. Voor de meeste opname-eindpunten moeten clients TLS 1.2 en specifieke coderingssuites gebruiken. In dit geval past u aan hoe PowerShell als client deelneemt aan het SSL- of TLS-protocol. Neem de volgende fragmenten op als u een beveiligd kanaal wilt diagnosticeren als onderdeel van de verbinding tussen de client-VM en de opname-eindpunten.
Optie 1: Bepalen welk SSL- of TLS-protocol wordt gebruikt door PowerShell om verbinding te maken met het opname-eindpunt.
Verwijder opmerkingen bij een van de volgende regels door het
#
teken te verwijderen en toe te voegen vóór deInvoke-WebRequest
cmdlet in uw PowerShell-script om het protocol te beheren dat wordt gebruikt in de test-REST-aanvraag:# Uncomment one or more of these lines to test TLS/SSL protocols other than the machine default option # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::SSL3 # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS11 # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS12 # [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::TLS13
Optie 2: eventuele problemen met ssl-certificaatvalidatie negeren.
Als u een firewall of proxyserver hebt die deelneemt aan offloading van SSL-certificaten, negeert u eventuele problemen met SSL-certificaten door het volgende fragment toe te voegen vlak voor de
Invoke-WebRequest
cmdlet:# Ignore mismatched SSL certificate add-type @" using System.Net; using System.Security.Cryptography.X509Certificates; public class TrustAllCertsPolicy : ICertificatePolicy { public bool CheckValidationResult( ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) { return true; } } "@ [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
Als de toepassing standaard is ingesteld op de standaard TLS-instellingen van het systeem of de server, wijzigt u deze standaardinstellingen in het register op Windows-computers. Zie registerinstellingen voor Transport Layer Security (TLS) voor meer informatie.
Als u het standaard TLS/SSL-protocol wilt wijzigen dat wordt gebruikt door een .NET-toepassing, volgt u de richtlijnen in de best practices voor Transport Layer Security (TLS) met .NET Framework.
Problemen met het instellen of configureren van Application Insights SDK of agent oplossen
Als het verzenden van telemetrie vanaf de hostcomputer van uw toepassing met behulp van PowerShell of curl is gelukt, is het waarschijnlijk dat er telemetrie ontbreekt vanwege problemen met de installatie of configuratie van de Application Insights SDK of agent. Schakel Application Insights-bewaking in voor uw toepassingshost en programmeertaal om te controleren of al uw configuraties of code de juiste richtlijnen en voorbeelden volgen.
Als tests die worden uitgevoerd met PowerShell of curl geen telemetrie verzenden naar het opname-eindpunt, controleert u enkele veelvoorkomende problemen aan de clientzijde die kunnen bijdragen aan het probleem:
- DNS in uw netwerk kan het opname-eindpunt niet oplossen naar het juiste IP-adres.
- TCP-verbinding van uw toepassingsserver met het opname-eindpunt kan worden geblokkeerd door firewalls of gatewayapparaten.
- Het opname-eindpunt waarmee de SDK verbinding maakt, vereist mogelijk TLS 1.2, maar uw toepassing kan standaard TLS 1.0 of TLS 1.1 gebruiken.
- Mogelijk hebt u meer dan één Azure Monitor Private Link die van invloed is op uw privénetwerk, waardoor uw DNS-vermeldingen mogelijk worden overschreven om het opname-eindpunt op te lossen op het verkeerde privé-IP-adres.
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.