Problemen met ontbrekende toepassingstelemetrie in Azure Monitor Application Insights oplossen

Dit artikel helpt u bij het identificeren van de stap in de verwerkingspijplijn waardoor telemetrie ontbreekt door connectiviteit en telemetrieopname te testen met behulp van PowerShell of curl.

Stappen die ertoe kunnen leiden dat telemetrie ontbreekt

In de volgende afbeelding ziet u stappen waarbij telemetrie kan ontbreken tijdens opname en verbruik:

Stappen die telemetrie doorgeeft in de verwerkingspijplijn.

Als toepassingstelemetrie niet wordt weergegeven in de Azure Portal, kunnen fouten in 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 verlaagt of beperkt de binnenkomende telemetrie.
  • De opnamepijplijn verlaagt of vertraagt de telemetrie als onderdeel van de verwerking vanwege de servicestatus.
  • (Soms) Log Analytics ondervindt problemen met de servicestatus bij het opslaan van telemetrierecords.
  • (Soms) De query-API bij api.applicationinsights.io mislukt bij het opvragen van records vanuit Log Analytics.
  • De Azure Portal kan de records die u wilt weergeven niet ophalen of weergeven.

Stapsgewijs identificeren door voorbeeldtelemetrierecord te verzenden

Configuratieproblemen of tijdelijke problemen kunnen overal in de Application Insights-service optreden. Als u de stap in de verwerkingspijplijn wilt identificeren die symptomen veroorzaakt van geen of ontbrekende gegevens, verzendt u een voorbeeldtelemetrierecord met behulp van PowerShell of curl. Voor het PowerShell-script of de curl-opdracht gaat u naar de volgende secties:

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 Application 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

Opmerking

  • Geef de cmdlet uit voordat u de Invoke-WebRequest cmdlet $ProgressPreference = "SilentlyContinue" uitvoert.
  • U kunt of -Debugniet gebruiken-Verbose. Gebruik -UseBasicParsingin plaats daarvan .

Nadat u een voorbeeld van een telemetrierecord hebt verzonden met behulp van PowerShell, gaat u naar het tabblad Application Insights-logboeken in de 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 te blokkeren of te verwijderen.
  • Het opname-eindpunt heeft de nettolading van het voorbeeld geaccepteerd en verwerkt via de opnamepijplijn.
  • Log Analytics heeft de voorbeeldrecord correct opgeslagen.
  • Het tabblad Azure Portal Logboeken kan een query uitvoeren op de API (api.applicationinsights.io) en de voorbeeldrecord weergeven in de Azure Portal.

Als de gegenereerde voorbeeldrecord bij uw Application Insights-exemplaar binnenkomt en u een query kunt uitvoeren op de voorbeeldrecord met behulp van het resourcemenu Logboeken , moet u problemen met de Application Insights SDK of agent oplossen. Vervolgens kunt u 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

De resultaten van de beschikbaarheidstest zijn het ideale telemetrietype om mee te testen. De reden hiervoor is dat de opnamepijplijn nooit de resultaten van de beschikbaarheidstest bemonstert. Als u een aanvraagtelemetrierecord verzendt, kan er een steekproef worden genomen wanneer u opnamesampling hebt ingeschakeld. Begin met een voorbeeld van een beschikbaarheidstest en probeer zo nodig andere telemetrietypen.

Hier volgt een voorbeeld van een PowerShell-script waarmee een beschikbaarheidstestresultaat 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 gemaakt om één beschikbaarheidstestresultaat te leveren aan het Application Insights-onderdeel. Wanneer u dit script gebruikt, geeft u de $ConnectionString parameter of $InstrumentationKey op.

  • Als alleen de parameter verbindingsreeks wordt opgegeven, wordt telemetrie verzonden naar het regionale eindpunt in de verbindingsreeks.
  • Als alleen de parameter instrumentatiesleutel (ikey) wordt opgegeven, wordt telemetrie verzonden naar het globale opname-eindpunt.
  • Als zowel verbindingsreeks- als ikeyparameters worden opgegeven, verzendt het script telemetrie naar het regionale eindpunt in de verbindingsreeks.

Opmerking

  • Test de verbinding die door uw toepassing is gemaakt. Als u Application Insights inschakelt in de Azure Portal, vertrouwt u waarschijnlijk op verbindingsreeksen 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 configuratie van uw webtoepassings-SDK, 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 verbindingsreeksen 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 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:

  • De itemsReceived telling komt overeen met de itemsAccepted.
  • Het opname-eindpunt informeert de client: u hebt één telemetrierecord verzonden en we hebben één telemetrierecord geaccepteerd.

Raadpleeg de volgende schermopname als voorbeeld:

Code die het aantal ontvangen items en geaccepteerde items weergeeft.

Curl-opdracht om het resultaat van de beschikbaarheidstest te verzenden

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 die ouder zijn dan 48 uur.

Hier volgen voorbeelden van curl-opdrachten waarmee één beschikbaarheidstestresultaat 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 een aanvraagtelemetrierecord

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 voor opnamesampling op de server. 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, kunt 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 veilig 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 de opmerking voor een van de volgende regels door het # teken te verwijderen en toe te voegen vóór de Invoke-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 de standaard TLS-instellingen van het systeem of de server heeft, wijzigt u deze standaardinstellingen in het register op Windows-computers. Zie Tls-registerinstellingen (Transport Layer Security) voor meer informatie.

Als u het standaard TLS/SSL-protocol wilt wijzigen dat wordt gebruikt door een .NET-toepassing, volgt u de richtlijnen in best practices voor TLS (Transport Layer Security) met de .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 lukt, is ontbrekende telemetrie waarschijnlijk het gevolg van installatie- of configuratieproblemen met 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 kunnen 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 omzetten in het juiste IP-adres.
  • Tcp-verbinding van uw toepassingsserver naar het opname-eindpunt kan worden geblokkeerd door firewalls of gatewayapparaten.
  • Voor het opname-eindpunt waarmee de SDK verbinding maakt, is mogelijk TLS 1.2 vereist, 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 zijn op uw privénetwerk, waardoor uw DNS-vermeldingen kunnen worden overschreven om het opname-eindpunt om 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 Feedback-community van Azure.