Aracılığıyla paylaş


Azure İzleyici Application Insights'ta eksik uygulama telemetrisi sorunlarını giderme

Bu makale, PowerShell veya curl kullanarak bağlantı ve telemetri alımını test ederek telemetrinin eksik olmasını sağlayan işlem hattındaki adımı belirlemenize yardımcı olur.

Telemetrinin eksik olmasını sağlayan adımlar

Aşağıdaki grafikte, veri alımı ve tüketimi sırasında telemetrinin eksik olabileceği adımlar gösterilmektedir:

Telemetrinin işlem hattında geçirdiği adımlar.

Uygulama telemetrisi Azure portal gösterilmiyorsa, işlem hattındaki adımlardaki hatalar bunun nedeni olabilir:

  • Application Insights SDK'sı veya aracısı yanlış yapılandırılmıştır ve alma uç noktasına uygulama telemetrisi göndermez.
  • SDK veya aracı doğru yapılandırıldı, ancak ağ alım uç noktasına çağrıları engelliyor.
  • Alma uç noktası gelen telemetriyi bırakır veya azaltır.
  • Alma işlem hattı, hizmet durumu nedeniyle işlemesinin bir parçası olarak telemetriyi bırakır veya ciddi şekilde yavaşlatır.
  • (Sık rastlanmayan) Log Analytics, telemetri kayıtlarını kaydederken hizmet durumu sorunlarıyla karşı karşıyadır.
  • (Sık rastlanmayan) konumundaki sorgu API'si api.applicationinsights.io , Log Analytics'ten kayıtlar sorgulandığında başarısız oluyor.
  • Azure portal, görüntülemeye çalıştığınız kayıtları çekemiyor veya işleyemiyor.

Örnek telemetri kaydı göndererek adımı tanımlama

Application Insights hizmetinin herhangi bir yerinde yapılandırma sorunları veya geçici sorunlar oluşabilir. veri yok veya eksik veri belirtilerine neden olan işlem hattındaki adımı belirlemek için PowerShell veya curl kullanarak örnek bir telemetri kaydı gönderin. PowerShell betiği veya curl komutu için aşağıdaki bölümlere gidin:

Web uygulaması bir şirket içi sunucuda veya Azure VM'de çalışıyorsa, sunucuya veya VM'ye bağlanın ve PowerShell kullanarak Applications Insights hizmet örneğine tek bir telemetri kaydı gönderin. Telemetri gönderme sorunları olan web uygulaması Kudu'da çalışıyorsa, Azure Web Apps'da Kudu'nun PowerShell hata ayıklama konsolundan aşağıdaki betiği çalıştırın.

$ProgressPreference = "SilentlyContinue"
Invoke-WebRequest -Uri $url -Method POST -Body $availabilityData -UseBasicParsing

Not

  • cmdlet'ini Invoke-WebRequest çalıştırmadan önce cmdlet'ini $ProgressPreference = "SilentlyContinue" çalıştırın.
  • veya -Debugkullanamazsınız-Verbose. Bunun yerine kullanın -UseBasicParsing.

PowerShell kullanarak örnek bir telemetri kaydı gönderdikten sonra, Azure portal Application Insights Günlükleri sekmesine gidin ve gelip gelmediğini denetleyin. Örnek telemetri kaydı gösteriliyorsa, işlem hattının büyük bir bölümü ortadan kalkar.

Doğru kaydedilmiş ve görüntülenen örnek telemetri kaydı şu anlama gelir:

  • Yerel sunucuda veya VM'de doğru IP adresine çözümlenen DNS var.
  • Ağ, örneği engellemeden veya bırakmadan alma uç noktasına teslim etti.
  • Alma uç noktası örnek yükü kabul etti ve alma işlem hattı aracılığıyla işledi.
  • Log Analytics örnek kaydı doğru bir şekilde kaydetti.
  • Azure portal Günlükleri sekmesi API'yi (api.applicationinsights.io) sorgulayıp Azure portal örnek kaydı işleyebilecektir.

Oluşturulan örnek kayıt Application Insights örneğinize ulaşırsa ve Günlükler kaynak menüsünü kullanarak örnek kaydı sorgulayabilirseniz Application Insights SDK veya aracı sorunlarını giderin. Daha sonra SDK günlüklerini, kendi kendine tanılama günlüklerini veya profil oluşturucu izlemelerini (SDK veya aracı sürümü için hangisi uygunsa) toplamaya devam edebilirsiniz.

Aşağıdaki bölümler, PowerShell veya curl kullanarak örnek telemetri kaydı gönderme hakkında bilgi sağlar.

Kullanılabilirlik testi sonucunu göndermek için PowerShell betiği

Kullanılabilirlik testi sonuçları, test etmek için ideal telemetri türüdür. Bunun nedeni, alım işlem hattının kullanılabilirlik testi sonuçlarını hiçbir zaman örneklememesidir. bir istek telemetri kaydı gönderirseniz, alımı örneklemeyi etkinleştirdiğinizde bu kayıt örneklenebilir. Örnek kullanılabilirlik testi sonucuyla başlayın ve ardından diğer telemetri türlerini gerektiği gibi deneyin.

Kullanılabilirlik testi sonucu gönderen örnek bir PowerShell betiği aşağıda verilmiştir:

# 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

Bu betik, Application Insights bileşenine tek bir kullanılabilirlik testi sonucu sunmak için bir ham REST isteği oluşturur. Bu betiği kullandığınızda veya $InstrumentationKey parametresini $ConnectionString sağlayın.

  • Yalnızca bağlantı dizesi parametresi sağlanırsa, telemetri bağlantı dizesi bölgesel uç noktasına gönderilir.
  • Yalnızca izleme anahtarı (ikey) parametresi sağlanırsa, telemetri genel alım uç noktasına gönderilir.
  • Hem bağlantı dizesi hem de ikey parametreleri sağlanırsa, betik bağlantı dizesi bölgesel uç noktasına telemetri gönderir.

Not

  • Uygulamanız tarafından yapılan bağlantıyı test edin. Azure portal Application Insights'ı etkinleştirirseniz, büyük olasılıkla bölgesel uç noktaları olan bağlantı dizelerini https://<region>.in.applicationinsights.azure.comkullanırsınız. SDK yapılandırmanız yalnızca ikey'i sağlarsa genel uç noktayı kullanırsınız https://dc.applicationinsights.azure.com. bağlantı dizesi veya ikey'yi sağlayarak web uygulaması SDK yapılandırmanızla eşleşen betik parametresini doldurduğunuza emin olun.
  • 31 Mart 2025'te izleme anahtarı alımı desteği sona erecektir. İzleme anahtarı alımı çalışmaya devam edecek, ancak artık özellik için güncelleştirmeler veya destek sağlamayacağız. Yeni özelliklerden yararlanmak için bağlantı dizelerine geçiş.

Bu betiği PowerShell ISE ortamından bir IaaS veya Azure sanal makine ölçek kümesi örneğinde çalıştırmak en kolayıdır. Ayrıca betiği kopyalayıp App Service Kudu arabirimi PowerShell hata ayıklama konsoluna yapıştırabilir ve ardından çalıştırabilirsiniz.

Betik yürütürken bir HTTP 200 yanıtı arayın ve yanıt ayrıntılarını gözden geçirin. Yanıt JSON yükü kapsamında aşağıdaki ayrıntılar beklenir:

  • Sayı itemsReceived ile eşleşir itemsAccepted.
  • Alma uç noktası istemciyi bilgilendirmektedir: bir telemetri kaydı gönderdiniz ve bir telemetri kaydı kabul ettik.

Örnek olarak aşağıdaki ekran görüntüsüne bakın:

Alınan ve kabul edilen öğelerin miktarını gösteren kod.

Kullanılabilirlik testi sonucunu göndermek için Curl komutu

Linux VM'leri çalıştırıyorsanız, benzer bir REST isteği göndermek için PowerShell yerine curl kullanın. Alım uç noktası konak adını, iKey değeri ve time değerleri ayarlamanız gerekir. Application Insights alım uç noktası, 48 saatten eski kayıtları kabul etmez.

Tek bir kullanılabilirlik testi sonucu gönderen örnek curl komutları şunlardır:

  • Linux/MacOS için Curl komutu:

    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
    
  • Windows için Curl komutu:

    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
    

İstek telemetri kaydı göndermek için PowerShell betiği

Eksik istek telemetrisi sorunlarını gidermek için aşağıdaki PowerShell betiğini kullanarak tek bir istek telemetri kaydı göndermeyi test edin. Bu telemetri türü, sunucu tarafı alım örnekleme yapılandırmasına duyarlıdır. Test kaydının doğru kaydedilip kaydedilmediğini onaylamak için alım örneklemesinin kapalı olduğunu doğrulayın.

# 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

SSL veya TLS yapılandırması sorunlarını giderme

Yukarıdaki betikler başarısız olursa SSL veya TLS yapılandırmasını giderin. Çoğu alım uç noktası, istemcilerin TLS 1.2 ve belirli şifreleme paketlerini kullanmasını gerektirir. Bu durumda, PowerShell'in SSL veya TLS protokolünde istemci olarak nasıl katıldığını ayarlayın. İstemci VM ile alım uç noktaları arasındaki bağlantının bir parçası olarak güvenli bir kanalı tanılamanız gerekiyorsa aşağıdaki kod parçacıklarını ekleyin.

  • Seçenek 1: Alma uç noktasına bağlantı oluşturmak için PowerShell tarafından hangi SSL veya TLS protokollerinin kullanıldığını denetleyin.

    Test REST isteğinde kullanılan protokolü denetlemek için karakteri kaldırarak # ve bunları PowerShell betiğinizdeki cmdlet'inden önce Invoke-WebRequest ekleyerek aşağıdaki satırlardan herhangi birinin açıklamalarını kaldırın:

    # 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
    
  • Seçenek 2: SSL sertifikası doğrulama sorunlarını yoksayın.

    SSL sertifika boşaltmaya katılan bir güvenlik duvarınız veya ara sunucunuz varsa, cmdlet'in hemen önüne aşağıdaki kod parçacığını ekleyerek SSL sertifika sorunlarını yoksayın Invoke-WebRequest :

    # 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
    

Uygulama varsayılan olarak sistem veya sunucu varsayılan TLS ayarlarına ayarlıysa, Windows makinelerinde kayıt defterinde bu varsayılan ayarları değiştirin. Ayrıntılar için bkz . Aktarım Katmanı Güvenliği (TLS) kayıt defteri ayarları.

Bir .NET uygulaması tarafından kullanılan varsayılan TLS/SSL protokollerini değiştirmeniz gerekiyorsa, .NET Framework aktarım katmanı güvenliği (TLS) en iyi yöntemlerindeki yönergeleri izleyin.

Application Insights SDK'sı veya aracısının kurulumu veya yapılandırmasıyla ilgili sorunları giderme

PowerShell veya curl kullanarak uygulamanızın konak makinesinden telemetri gönderme işlemi başarılı olursa, telemetrinin eksik olması büyük olasılıkla Application Insights SDK'sının veya aracısının kurulum veya yapılandırma sorunlarından kaynaklanır. Tüm yapılandırmalarınızın veya kodunuzun doğru yönergeleri ve örnekleri izlediğini doğrulamak için uygulama konağınız ve programlama diliniz için Application Insights izlemeyi etkinleştirin.

PowerShell veya curl kullanılarak gerçekleştirilen testler alım uç noktasına telemetri gönderemezse, soruna katkıda bulunabilecek istemci tarafıyla ilgili birkaç yaygın sorunu doğrulayın:

  • Ağınızdaki DNS, alma uç noktasını doğru IP adresine çözümleyemiyor.
  • Uygulama sunucunuzdan alma uç noktasına tcp bağlantısı güvenlik duvarları veya ağ geçidi cihazları tarafından engellenebilir.
  • SDK'nın bağlandığı alım uç noktası TLS 1.2 gerektirebilir, ancak uygulamanız varsayılan olarak TLS 1.0 veya TLS 1.1 kullanabilir.
  • Özel ağınızı etkileyen birden fazla Azure İzleyici Özel Bağlantı olabilir ve bu da alma uç noktasını yanlış özel IP adresine çözümlemek için DNS girişlerinizin üzerine yazabilir.

Yardım için bize ulaşın

Sorularınız veya yardıma ihtiyacınız varsa bir destek isteği oluşturun veya Azure topluluk desteği isteyin. Ürün geri bildirimini Azure geri bildirim topluluğuna da gönderebilirsiniz.