Uygulama Analizler telemetri kanalları

Telemetri kanalları, Uygulama Analizler SDK'larının ayrılmaz bir parçasıdır. Telemetri verilerinin arabelleğe almayı ve Uygulama Analizler hizmetine iletimini yönetir. SDK'ların .NET ve .NET Core sürümlerinde iki yerleşik telemetri kanalı vardır: InMemoryChannel ve ServerTelemetryChannel. Bu makalede her kanal açıklanır ve kanal davranışının nasıl özelleştirileceği gösterilir.

Not

Aşağıdaki belgeler, Uygulama Analizler klasik API'sine dayanır. Uygulama Analizler için uzun vadeli plan, OpenTelemetry kullanarak veri toplamaktır. Daha fazla bilgi için bkz . .NET, Node.js, Python ve Java uygulamaları için Azure İzleyici OpenTelemetry'yi etkinleştirme.

Telemetri kanalları nedir?

Telemetri kanalları, telemetri öğelerini arabelleğe almak ve sorgulama ve analiz için depolandıkları Uygulama Analizler hizmetine göndermekle sorumludur. Telemetri kanalı, arabirimini uygulayan Microsoft.ApplicationInsights.ITelemetryChannel herhangi bir sınıftır.

Send(ITelemetry item) Telemetri kanalının yöntemi, tüm telemetri başlatıcıları ve telemetri işlemcileri çağrıldıktan sonra çağrılır. Bu nedenle, telemetri işlemcisi tarafından bırakılan öğeler kanala ulaşmaz. Send() yöntemi öğeleri normalde arka uca anında göndermez. Genellikle bunları bellekte arabelleğe alır ve verimli iletim için toplu olarak gönderir.

Canlı Ölçüm Akışı'nda telemetrinin canlı akışını destekleyen özel bir kanal da vardır. Bu kanal normal telemetri kanalından bağımsızdır ve bu belge bu kanal için geçerli değildir.

Yerleşik telemetri kanalları

Application Analizler .NET ve .NET Core SDK'ları iki yerleşik kanalla birlikte gönderilir:

  • InMemoryChannel: Öğeleri gönderilene kadar bellekte arabelleğe alan basit bir kanal. Öğeler bellekte arabelleğe alınıp her 30 saniyede bir veya 500 öğe arabelleğe alındıktan sonra boşaltılır. Bu kanal, bir hatadan sonra telemetri göndermeyi yeniden denemediğinden en düşük güvenilirlik garantisi sunar. Bu kanal ayrıca öğeleri diskte tutmaz. Bu nedenle, yetkisiz olsun veya olmasın, uygulama kapatıldığında tüm yetkisiz öğeler kalıcı olarak kaybolur. Bu kanal, bellek içi telemetri öğelerini zaman uyumlu bir şekilde temizlemeye zorlamak için kullanılabilecek bir Flush() yöntem uygular. Bu kanal, zaman uyumlu temizlemenin ideal olduğu kısa süreli uygulamalar için uygundur.

    Bu kanal daha büyük Microsoft.Application Analizler NuGet paketinin bir parçasıdır ve SDK'nın başka hiçbir şey yapılandırılmadığında kullandığı varsayılan kanaldır.

  • ServerTelemetryChannel: Yeniden deneme ilkelerine ve verileri yerel diskte depolama özelliğine sahip daha gelişmiş bir kanal. Bu kanal, geçici hatalar oluşursa telemetri göndermeyi yeniden dener. Bu kanal, ağ kesintileri veya yüksek telemetri birimleri sırasında öğeleri diskte tutmak için yerel disk depolamayı da kullanır. Bu yeniden deneme mekanizmaları ve yerel disk depolaması nedeniyle bu kanal daha güvenilir olarak kabul edilir. Bunu tüm üretim senaryoları için öneririz. Bu kanal, resmi belgelere göre yapılandırılan ASP.NET ve ASP.NET Core uygulamaları için varsayılandır. Bu kanal, uzun süre çalışan işlemlere sahip sunucu senaryoları için iyileştirilmiştir. Flush() Bu kanal tarafından uygulanan yöntem zaman uyumlu değildir.

    Bu kanal Microsoft.Application Analizler olarak gönderilir. WindowsServer.TelemetryChannel NuGet paketi ve Microsoft.Application Analizler kullandığınızda otomatik olarak alınır. Web veya Microsoft.Application Analizler. AspNetCore NuGet paketi.

Telemetri kanalını yapılandırma

Telemetri kanalını etkin telemetri yapılandırmasına ayarlayarak yapılandırabilirsiniz. ASP.NET uygulamalar için yapılandırma telemetri kanalı örneğini olarak TelemetryConfiguration.Active veya değiştirerek ayarlamayı ApplicationInsights.configiçerir. ASP.NET Core uygulamaları için yapılandırma, kanalı bağımlılık ekleme kapsayıcısına eklemeyi içerir.

Aşağıdaki bölümlerde, çeşitli uygulama türlerinde kanal için ayarı yapılandırma StorageFolder örnekleri gösterilmektedir. StorageFolder yapılandırılabilir ayarlardan yalnızca biridir. Yapılandırma ayarlarının tam listesi için bu makalenin devamında yer alan Kanallarda yapılandırılabilir ayarlar bölümüne bakın.

ASP.NET uygulamaları için Application Analizler.config kullanarak yapılandırma

Application Analizler.config dosyasındaki ServerTelemetryChannel aşağıdaki bölümde, özel bir konuma ayarlanmış olarak yapılandırılan StorageFolder kanal gösterilmektedir:

    <TelemetrySinks>
        <Add Name="default">
            <TelemetryProcessors>
                <!-- Telemetry processors omitted for brevity  -->
            </TelemetryProcessors>
            <TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel">
                <StorageFolder>d:\temp\applicationinsights</StorageFolder>
            </TelemetryChannel>
        </Add>
    </TelemetrySinks>

ASP.NET uygulamaları için kodda yapılandırma

Aşağıdaki kod, özel bir ServerTelemetryChannel konuma ayarlanmış bir örneği StorageFolder ayarlar. Bu kodu uygulamanın başına, genellikle Global.aspx.cs yöntemine Application_Start() ekleyin.

using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;
protected void Application_Start()
{
    var serverTelemetryChannel = new ServerTelemetryChannel();
    serverTelemetryChannel.StorageFolder = @"d:\temp\applicationinsights";
    serverTelemetryChannel.Initialize(TelemetryConfiguration.Active);
    TelemetryConfiguration.Active.TelemetryChannel = serverTelemetryChannel;
}

ASP.NET Core uygulamaları için kodda yapılandırma

Sınıfın ConfigureServicesStartup.cs yöntemini burada gösterildiği gibi değiştirin:

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;

public void ConfigureServices(IServiceCollection services)
{
    // This sets up ServerTelemetryChannel with StorageFolder set to a custom location.
    services.AddSingleton(typeof(ITelemetryChannel), new ServerTelemetryChannel() {StorageFolder = @"d:\temp\applicationinsights" });

    services.AddApplicationInsightsTelemetry();
}

Önemli

kullanarak kanalı TelemetryConfiguration.Active yapılandırmak ASP.NET Core uygulamaları için desteklenmez.

.NET/.NET Core konsol uygulamaları için kodda yapılandırma

Konsol uygulamaları için kod hem .NET hem de .NET Core için aynıdır:

var serverTelemetryChannel = new ServerTelemetryChannel();
serverTelemetryChannel.StorageFolder = @"d:\temp\applicationinsights";
serverTelemetryChannel.Initialize(TelemetryConfiguration.Active);
TelemetryConfiguration.Active.TelemetryChannel = serverTelemetryChannel;

ServerTelemetryChannel'in işlem ayrıntıları

ServerTelemetryChannel gelen öğeleri bellek içi arabelleğe depolar. Öğeler her 30 saniyede bir veya 500 öğe arabelleğe alındığında serileştirilir, sıkıştırılır ve bir Transmission örnekte depolanır. Tek Transmission bir örnek en fazla 500 öğe içerir ve Uygulama Analizler hizmetine tek bir HTTPS çağrısı üzerinden gönderilen bir telemetri toplu işlemini temsil eder.

Varsayılan olarak, en fazla 10 Transmission örnek paralel olarak gönderilebilir. Telemetri daha hızlı hızlarda geliyorsa veya ağ veya Uygulama Analizler arka ucu yavaşsa örnekler Transmission bellekte depolanır. Bu bellek Transmission içi arabelleğin varsayılan kapasitesi 5 MB'tır. Bellek içi kapasite aşıldığında, Transmission örnekler yerel diskte 50 MB sınırına kadar depolanır.

Transmission örnekler, ağ sorunları olduğunda da yerel diskte depolanır. Yalnızca yerel diskte depolanan öğeler uygulama kilitlenmesine karşı hayatta kalır. Uygulama her yeniden başlatıldığında gönderilirler. Ağ sorunları devam ederse, ServerTelemetryChannel telemetri göndermeyi yeniden denemeden önce 10 saniye ile 1 saat arasında bir üstel geri alma mantığı kullanır.

Kanallarda yapılandırılabilir ayarlar

Her kanal için yapılandırılabilir ayarların tam listesi için bkz:

için en yaygın kullanılan ayarlar ServerTelemetryChannelşunlardır:

  • MaxTransmissionBufferCapacity: Kanal tarafından bellekteki iletimleri arabelleğe almak için kullanılan maksimum bellek miktarı (bayt cinsinden). Bu kapasiteye ulaşıldığında, yeni öğeler doğrudan yerel diske depolanır. Varsayılan değer 5 MB'tır. Daha yüksek bir değer ayarlamak daha az disk kullanımına yol açar, ancak uygulama kilitlenirse bellekteki öğelerin kaybolacağını unutmayın.
  • MaxTransmissionSenderCapacity: Uygulama Analizler aynı anda gönderilecek en fazla örnek sayısıTransmission. Varsayılan değer 10'dur. Bu ayar, çok büyük bir telemetri hacmi oluşturulduğunda önerdiğimiz daha yüksek bir sayıya yapılandırılabilir. Yüksek hacim genellikle yük testi sırasında veya örnekleme kapatıldığında oluşur.
  • StorageFolder: Kanal tarafından öğeleri gerektiğinde diske depolamak için kullanılan klasör. Windows'ta, başka bir yol açıkça belirtilmezse %LOCALAPPDATA% veya %TEMP% kullanılır. Windows dışındaki ortamlarda geçerli bir konum belirtmeniz gerekir, aksi durumda telemetri yerel diskte depolanmaz.

Hangi kanalı kullanmalıyım?

Uzun süre çalışan uygulamalar içeren çoğu üretim senaryosu için önerilir ServerTelemetryChannel . Flush() tarafından ServerTelemetryChannel uygulanan yöntem zaman uyumlu değildir. Ayrıca bellekten veya diskten bekleyen tüm öğelerin gönderilmesini garanti etmez.

Bu kanalı uygulamanın kapanmak üzere olduğu senaryolarda kullanıyorsanız, çağrısından Flush()sonra biraz gecikmeye neden olun. Tam olarak gerektirebilecek gecikme miktarı tahmin edilebilir değildir. Bellekte kaç öğe veya örnek olduğu, diskte kaç öğe veya Transmission örnek olduğu, kaç öğenin arka uca iletildiği ve kanalın üstel geri alma senaryolarının ortasında olup olmadığı gibi faktörlere bağlıdır.

Zaman uyumlu temizleme yapmanız gerekiyorsa kullanın InMemoryChannel.

Sık sorulan sorular

Bu bölüm, sık sorulan soruların yanıtlarını sağlar.

Application Insights kanalı telemetri teslimini garanti eder mi? Aksi takdirde telemetrinin kaybedilebileceği senaryolar nelerdir?

Kısa yanıt, yerleşik kanalların hiçbirinin arka uca telemetri teslimi için işlem türü garantisi sunmadığını ifade eder. ServerTelemetryChannel güvenilir teslim ile InMemoryChannel karşılaştırıldığında daha gelişmiştir, ancak telemetri göndermek için yalnızca en iyi çabayı gösterir. Telemetri, aşağıdaki yaygın senaryolar da dahil olmak üzere çeşitli durumlarda yine de kaybolabilir:

  • Uygulama kilitlendiğinde bellekteki öğeler kaybolur.
  • Telemetri, ağ sorunlarının uzun dönemlerinde kaybolur. Telemetri, ağ kesintileri sırasında veya Uygulama Analizler arka ucuyla ilgili sorunlar oluştuğunda yerel diske depolanır. Ancak, 48 saatten eski öğeler atılır.
  • Windows'ta telemetriyi depolamak için varsayılan disk konumları %LOCALAPPDATA% veya %TEMP%'dir. Bu konumlar genellikle makine için yereldir. Uygulama fiziksel olarak bir konumdan diğerine geçerse, özgün konumda depolanan tüm telemetriler kaybolur.
  • Windows üzerinde Azure Web Apps'te varsayılan disk depolama konumu D:\local\LocalAppData'dır. Bu konum kalıcı değildir. Uygulama yeniden başlatmalarında, ölçek genişletmelerde ve bu tür diğer işlemlerde silinir ve bu da orada depolanan telemetri verilerinin kaybolmasına neden olur. Varsayılanı geçersiz kılabilir ve D:\home gibi kalıcı bir konuma depolama alanı belirtebilirsiniz. Ancak, bu kalıcı konumlar uzak depolama tarafından sunulur ve bu nedenle yavaş olabilir.

Daha az olası olsa da, kanalın yinelenen telemetri öğelerine neden olması da mümkündür. Bu davranış, ağ hatası veya zaman aşımı nedeniyle yeniden denemeler ServerTelemetryChannel yapıldığında, telemetri arka uca teslim edildiğinde, ancak ağ sorunları nedeniyle yanıt kaybolduğunda veya zaman aşımı oluştuğunda oluşur.

ServerTelemetryChannel, Windows dışındaki sistemlerde çalışıyor mu?

Paketin ve ad alanının adı "WindowsServer" içerse de, bu kanal aşağıdaki özel durum dışında Windows dışındaki sistemlerde desteklenir. Windows dışındaki sistemlerde kanal varsayılan olarak yerel bir depolama klasörü oluşturmaz. Yerel bir depolama klasörü oluşturmanız ve kanalı bunu kullanacak şekilde yapılandırmanız gerekir. Yerel depolama yapılandırıldıktan sonra kanal tüm sistemlerde aynı şekilde çalışır.

Not

2.15.0-beta3 ve üzeri sürümle birlikte yerel depolama artık Linux, Mac ve Windows için otomatik olarak oluşturulur. Windows dışı sistemler için SDK, aşağıdaki mantığı temel alan otomatik olarak bir yerel depolama klasörü oluşturur:

  • ${TMPDIR}: Ortam değişkeni ayarlanırsa ${TMPDIR} , bu konum kullanılır.
  • /var/tmp: Önceki konum yoksa seçeneğini deneriz /var/tmp.
  • /tmp: Önceki her iki konum da mevcut değilse, öğesini deneriz tmp.
  • Bu konumlardan hiçbiri yoksa yerel depolama oluşturulmaz ve el ile yapılandırma yine de gereklidir. Uygulama ayrıntılarının tamamı için bu GitHub deposuna bakın.

SDK geçici yerel depolama alanı oluşturuyor mu? Veriler depolamada şifreleniyor mu?

SDK, ağ sorunları veya azaltma sırasında telemetri öğelerini yerel depolamada depolar. Bu veriler yerel olarak şifrelenmez.

Windows sistemleri için SDK, %TEMP% veya %LOCALAPPDATA% dizininde otomatik olarak geçici bir yerel klasör oluşturur ve erişimi yalnızca yöneticilere ve geçerli kullanıcıya kısıtlar.

Windows dışındaki sistemler için SDK tarafından otomatik olarak yerel depolama oluşturulmaz, bu nedenle varsayılan olarak yerel olarak hiçbir veri depolanmaz.

Not

2.15.0-beta3 ve üzeri sürümle birlikte yerel depolama artık Linux, Mac ve Windows için otomatik olarak oluşturulur.

Bir depolama dizini oluşturabilir ve kanalı bunu kullanacak şekilde yapılandırabilirsiniz. Bu durumda, dizinin güvenliğini sağlamak sizin sorumluluğundadır. Veri koruma ve gizlilik hakkında daha fazla bilgi edinin.

Açık kaynak SDK

Application Analizler için her SDK gibi kanallar da açık kaynak. Resmi GitHub deposunda kod veya rapor sorunlarını okuyun ve katkıda bulunun.

Sonraki adımlar