Problembehandlung bei fehlenden Anwendungstelemetriedaten in Azure Monitor Application Insights
Dieser Artikel hilft Ihnen, den Schritt in der Verarbeitungspipeline zu identifizieren, der dazu führt, dass Telemetriedaten fehlen, indem Sie die Konnektivität und Telemetrieerfassung mithilfe von PowerShell oder curl testen.
Schritte, die dazu führen können, dass Telemetriedaten fehlen
Die folgende Grafik zeigt Schritte, bei denen Telemetrie während der Erfassung und Nutzung fehlen kann:
Wenn die Anwendungstelemetrie im Azure-Portal nicht angezeigt wird, können Fehler in allen Schritten in der Verarbeitungspipeline die Ursache sein:
- Das Application Insights SDK oder der Agent ist falsch konfiguriert und sendet keine Anwendungstelemetriedaten an den Erfassungsendpunkt.
- Das SDK oder der Agent ist ordnungsgemäß konfiguriert, aber das Netzwerk blockiert Aufrufe des Erfassungsendpunkts.
- Der Erfassungsendpunkt löscht oder drosselt eingehende Telemetriedaten.
- Die Erfassungspipeline wird aufgrund der Dienstintegrität im Rahmen der Verarbeitung von Telemetriedaten getrennt oder stark verlangsamt.
- (Ungewöhnlich) Log Analytics hat Probleme mit der Dienstintegrität beim Speichern von Telemetriedatensätzen.
- (Ungewöhnlich) Die Abfrage-API unter
api.applicationinsights.io
schlägt beim Abfragen von Datensätzen aus Log Analytics fehl. - Die Azure-Portal kann die Datensätze, die Sie anzeigen möchten, nicht pullen oder rendern.
Identifizieren eines Schritts durch Senden eines Beispieltelemetriedatensatzes
Konfigurationsprobleme oder vorübergehende Probleme können überall im Application Insights-Dienst auftreten. Um den Schritt innerhalb der Verarbeitungspipeline zu identifizieren, der Symptome von fehlenden oder fehlenden Daten verursacht, senden Sie mithilfe von PowerShell oder curl einen Beispieltelemetriedatensatz. Das PowerShell-Skript oder den Curl-Befehl finden Sie in den folgenden Abschnitten:
- PowerShell-Skript zum Senden des Verfügbarkeitstestergebnisses
- Curl-Befehl zum Senden des Verfügbarkeitstestergebnisses
- PowerShell-Skript zum Senden eines Anforderungstelemetriedatensatzes
Wenn die Web-App auf einem lokalen Server oder einer Azure-VM ausgeführt wird, stellen Sie eine Verbindung mit dem Server oder der VM her, und senden Sie mithilfe von PowerShell einen einzelnen Telemetriedatensatz an den Applications Insights-Dienst instance. Wenn die Web-App mit Problemen beim Senden von Telemetriedaten auf Kudu ausgeführt wird, führen Sie das folgende Skript über die PowerShell-Debugkonsole von Kudu in Azure Web-Apps aus.
$ProgressPreference = "SilentlyContinue"
Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsing
Hinweis
- Geben Sie vor dem Ausführen des
Invoke-WebRequest
Cmdlets das Cmdlet aus$ProgressPreference = "SilentlyContinue"
. - Sie können oder
-Debug
nicht verwenden-Verbose
. Verwenden Sie-UseBasicParsing
stattdessen .
Nachdem Sie einen Beispieltelemetriedatensatz mithilfe von PowerShell gesendet haben, navigieren Sie im Azure-Portal zur Registerkarte Application Insights-Protokolle, und überprüfen Sie, ob er eintrifft. Wenn der Beispieltelemetriedatensatz angezeigt wird, wird ein großer Teil der Verarbeitungspipeline entfernt.
Ein Beispieltelemetriedatensatz, der ordnungsgemäß gespeichert und angezeigt wird, bedeutet Folgendes:
- Der lokale Server oder virtuelle Computer verfügt über DNS, das in die richtige IP-Adresse aufgelöst wird.
- Das Netzwerk übermittelte das Beispiel an den Erfassungsendpunkt, ohne zu blockieren oder zu löschen.
- Der Erfassungsendpunkt hat die Beispielnutzlast akzeptiert und über die Erfassungspipeline verarbeitet.
- Log Analytics hat den Beispieldatensatz ordnungsgemäß gespeichert.
- Die Registerkarte Azure-Portal Protokolle kann die API (
api.applicationinsights.io
) abfragen und den Beispieldatensatz im Azure-Portal rendern.
Wenn der generierte Beispieldatensatz bei Ihrem Application Insights-instance eintrifft und Sie den Beispieldatensatz über das Ressourcenmenü Protokolle abfragen können, führen Sie eine Problembehandlung für das Application Insights SDK oder den Agent durch. Anschließend können Sie mit dem Sammeln von SDK-Protokollen, Selbstdiagnoseprotokollen oder Profilerablaufverfolgungen fortfahren, je nachdem, was für die SDK- oder Agent-Version geeignet ist.
Die folgenden Abschnitte enthalten Informationen zum Senden eines Beispieltelemetriedatensatzes mithilfe von PowerShell oder curl.
PowerShell-Skript zum Senden des Verfügbarkeitstestergebnisses
Verfügbarkeitstestergebnisse sind der ideale Telemetrietyp zum Testen. Der Grund dafür ist, dass die Erfassungspipeline niemals Verfügbarkeitstestergebnisse ausgibt. Wenn Sie einen Anforderungstelemetriedatensatz senden, kann dieser abgetastet werden, wenn Sie die Erfassungssampling aktiviert haben. Beginnen Sie mit einem Beispiel für ein Verfügbarkeitstestergebnis, und probieren Sie dann bei Bedarf andere Telemetrietypen aus.
Hier sehen Sie ein PowerShell-Beispielskript, das ein Verfügbarkeitstestergebnis sendet:
# 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
Dieses Skript erstellt eine unformatierte REST-Anforderung, um ein einzelnes Verfügbarkeitstestergebnis an die Application Insights-Komponente zu übermitteln. Wenn Sie dieses Skript verwenden, geben Sie den $ConnectionString
Parameter oder $InstrumentationKey
an.
- Wenn nur der parameter Verbindungszeichenfolge angegeben wird, werden Telemetriedaten an den regionalen Endpunkt im Verbindungszeichenfolge gesendet.
- Wenn nur der Instrumentierungsschlüsselparameter (ikey) angegeben wird, werden Telemetriedaten an den globalen Erfassungsendpunkt gesendet.
- Wenn sowohl Verbindungszeichenfolge- als auch ikey-Parameter angegeben werden, sendet das Skript Telemetriedaten an den regionalen Endpunkt im Verbindungszeichenfolge.
Hinweis
- Testen Sie die Verbindung, die von Ihrer Anwendung hergestellt wird. Wenn Sie Application Insights im Azure-Portal aktivieren, verlassen Sie sich wahrscheinlich auf Verbindungszeichenfolgen mit regionalen Endpunkten,
https://<region>.in.applicationinsights.azure.com
. Wenn Ihre SDK-Konfiguration nur den ikey bereitstellt, verlassen Sie sich auf den globalen Endpunkt .https://dc.applicationinsights.azure.com
Stellen Sie sicher, dass Sie den Skriptparameter auffüllen, der Ihrer Webanwendungs-SDK-Konfiguration entspricht, und geben Sie entweder die Verbindungszeichenfolge oder den iKey an. - Am 31. März 2025 endet die Unterstützung für die Instrumentierungsschlüsselerfassung. Die Erfassung von Instrumentierungsschlüsseln funktioniert weiterhin, aber wir stellen keine Updates oder Unterstützung für das Feature mehr bereit. Übergang zu Verbindungszeichenfolgen , um neue Funktionen zu nutzen.
Es ist am einfachsten, dieses Skript aus der PowerShell ISE-Umgebung auf einer IaaS- oder Azure-VM-Skalierungsgruppe instance auszuführen. Sie können das Skript auch kopieren und in die PowerShell-Debugkonsole der App Service Kudu-Schnittstelle einfügen und dann ausführen.
Wenn das Skript ausgeführt wird, suchen Sie nach einer HTTP 200-Antwort, und überprüfen Sie die Antwortdetails. Als Teil der JSON-Antwortnutzlast werden die folgenden Details erwartet:
- Die
itemsReceived
Anzahl entspricht demitemsAccepted
. - Der Erfassungsendpunkt informiert den Client: Sie haben einen Telemetriedatensatz gesendet, und wir haben einen Telemetriedatensatz akzeptiert.
Sehen Sie sich den folgenden Screenshot als Beispiel an:
Curl-Befehl zum Senden des Verfügbarkeitstestergebnisses
Wenn Sie Linux-VMs ausführen, verwenden Sie curl anstelle von PowerShell, um eine ähnliche REST-Anforderung zu senden. Sie müssen den Hostnamen des Erfassungsendpunkts, den iKey
Wert und die time
Werte anpassen. Der Application Insights-Erfassungsendpunkt akzeptiert keine Datensätze, die älter als 48 Stunden sind.
Hier finden Sie Curl-Beispielbefehle, die ein einzelnes Verfügbarkeitstestergebnis senden:
Curl-Befehl für 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-Befehl für 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-Skript zum Senden eines Anforderungstelemetriedatensatzes
Verwenden Sie zum Beheben von Problemen mit fehlenden Anforderungstelemetriedaten das folgende PowerShell-Skript, um das Senden eines einzelnen Anforderungstelemetriedatensatzes zu testen. Dieser Telemetrietyp ist anfällig für die Konfiguration der serverseitigen Erfassungsstichproben. Vergewissern Sie sich, dass die Erfassungsstichprobe deaktiviert ist, um zu bestätigen, ob der Testdatensatz ordnungsgemäß gespeichert wurde.
# 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
Problembehandlung bei der SSL- oder TLS-Konfiguration
Wenn die obigen Skripts fehlschlagen, führen Sie eine Problembehandlung für die SSL- oder TLS-Konfiguration durch. Die meisten Erfassungsendpunkte erfordern, dass Clients TLS 1.2 und bestimmte Verschlüsselungssammlungen verwenden. Passen Sie in diesem Fall an, wie PowerShell als Client am SSL- oder TLS-Protokoll beteiligt ist. Fügen Sie die folgenden Codeausschnitte ein, wenn Sie einen sicheren Kanal als Teil der Verbindung zwischen der Client-VM und den Erfassungsendpunkten diagnostizieren müssen.
Option 1: Steuern Sie, welches SSL- oder TLS-Protokoll von PowerShell verwendet wird, um eine Verbindung mit dem Erfassungsendpunkt herzustellen.
Heben Sie die Auskommentierung einer der folgenden Zeilen auf, indem Sie das
#
Zeichen entfernen und vor demInvoke-WebRequest
Cmdlet in Ihrem PowerShell-Skript hinzufügen, um das in der TEST-REST-Anforderung verwendete Protokoll zu steuern:# 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
Option 2: Ssl-Zertifikatüberprüfungsprobleme ignorieren.
Wenn Sie über eine Firewall oder einen Proxyserver verfügen, der an der Auslagerung von SSL-Zertifikaten beteiligt ist, ignorieren Sie alle SSL-Zertifikatprobleme, indem Sie direkt vor dem Cmdlet den
Invoke-WebRequest
folgenden Codeausschnitt hinzufügen:# 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
Wenn die Anwendung standardmäßig die TLS-Standardeinstellungen des Systems oder Servers verwendet, ändern Sie diese Standardeinstellungen in der Registrierung auf Windows-Computern. Weitere Informationen finden Sie unter Tls-Registrierungseinstellungen (Transport Layer Security).
Wenn Sie das tls/SSL-Standardprotokoll ändern müssen, das von einer .NET-Anwendung verwendet wird, befolgen Sie die Anleitung unter Bewährte Methoden für Transport Layer Security (TLS) mit dem .NET Framework.
Problembehandlung bei der Einrichtung oder Konfiguration des Application Insights SDK oder Agents
Wenn das Senden von Telemetriedaten vom Hostcomputer Ihrer Anwendung mithilfe von PowerShell oder curl erfolgreich ist, sind fehlende Telemetriedaten wahrscheinlich auf Setup- oder Konfigurationsprobleme des Application Insights SDK oder -Agents zurückzuführen. Aktivieren Sie die Application Insights-Überwachung für Ihren Anwendungshost und Ihre Programmiersprache, um zu überprüfen, ob alle Konfigurationen oder Code den richtigen Anleitungen und Beispielen entsprechen.
Wenn mithilfe von PowerShell oder curl durchgeführte Tests keine Telemetriedaten an den Erfassungsendpunkt senden können, überprüfen Sie einige häufige clientseitige Probleme, die zum Problem beitragen können:
- DNS in Ihrem Netzwerk kann den Erfassungsendpunkt nicht in die richtige IP-Adresse auflösen.
- Die TCP-Verbindung zwischen Ihrem Anwendungsserver und dem Erfassungsendpunkt kann durch Firewalls oder Gatewaygeräte blockiert werden.
- Der Erfassungsendpunkt, mit dem das SDK eine Verbindung herstellt, erfordert möglicherweise TLS 1.2. Ihre Anwendung kann jedoch standardmäßig TLS 1.0 oder TLS 1.1 verwenden.
- Möglicherweise haben Sie mehrere Azure Monitor-Private Link die sich auf Ihr privates Netzwerk auswirken. Dadurch können Ihre DNS-Einträge überschrieben werden, um den Erfassungsendpunkt in die falsche private IP-Adresse aufzulösen.
Kontaktieren Sie uns für Hilfe
Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.