Application Insights'ta telemetri kanalları
Telemetri kanalları, Application Insights SDK'larının ayrılmaz bir parçasıdır. Telemetri verilerinin arabelleğe almayı ve Application Insights 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 Application Insights klasik API'sine dayanır. Application Insights 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 ve OpenTelemetry Yol Haritamız. Geçiş kılavuzu .NET, Node.js ve Python için kullanılabilir.
Telemetri kanalları nedir?
Telemetri kanalları, telemetri öğelerini arabelleğe almak ve sorgulama ve analiz için depolandıkları Application Insights 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 Insights .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 birFlush()
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.ApplicationInsights NuGet paketinin bir parçasıdır ve başka hiçbir şey yapılandırılmadığında SDK'nın 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.ApplicationInsights.WindowsServer.TelemetryChannel NuGet paketi olarak gönderilir ve Microsoft.ApplicationInsights.Web veya Microsoft.ApplicationInsights.AspNetCore NuGet paketini kullandığınızda otomatik olarak alınır.
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.config
iç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 ApplicationInsights.config kullanarak yapılandırma
ApplicationInsights.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 ConfigureServices
Startup.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 Application Insights 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ızlara ulaşıyorsa veya ağ veya Application Insights 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
: Application Insights'a 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 Application Insights 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 deneriztmp
.- 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 Insights için her SDK gibi kanallar da açık kaynak. Resmi GitHub deposunda kod veya rapor sorunlarını okuyun ve katkıda bulunun.