Kanály telemetrie v Application Insights
Telemetrické kanály jsou nedílnou součástí sad SDK Application Insights. Spravují ukládání do vyrovnávací paměti a přenos telemetrie do služby Application Insights. Verze sad .NET a .NET Core sad SDK mají dva integrované kanály telemetrie: InMemoryChannel
a ServerTelemetryChannel
. Tento článek popisuje jednotlivé kanály a ukazuje, jak přizpůsobit chování kanálu.
Poznámka:
Následující dokumentace spoléhá na klasické rozhraní API Application Insights. Dlouhodobým plánem application Insights je shromažďovat data pomocí OpenTelemetry. Další informace najdete v tématu Povolení OpenTelemetry služby Azure Monitor pro aplikace .NET, Node.js, Python a Java a náš plán OpenTelemetry. Pokyny k migraci jsou k dispozici pro .NET, Node.js a Python.
Co jsou kanály telemetrie?
Kanály telemetrie zodpovídají za ukládání položek telemetrie do vyrovnávací paměti a jejich odesílání do služby Application Insights, kde jsou uložené pro dotazování a analýzu. Kanál telemetrie je libovolná třída, která implementuje Microsoft.ApplicationInsights.ITelemetryChannel
rozhraní.
Metoda Send(ITelemetry item)
kanálu telemetrie se volá po zavolání všech inicializátorů telemetrie a procesorů telemetrie. Všechny položky vyřazené procesorem telemetrie se proto nedostanou do kanálu. Metoda Send()
obvykle neodesílá položky do back-endu okamžitě. Obvykle je ukládá do vyrovnávací paměti a odesílá je do dávek pro efektivní přenos.
Live Metrics Stream má také vlastní kanál, který využívá živé streamování telemetrie. Tento kanál je nezávislý na běžném kanálu telemetrie a tento dokument se na něj nevztahuje.
Integrované kanály telemetrie
Sady Application Insights .NET a .NET Core SDK se dodávají se dvěma integrovanými kanály:
InMemoryChannel
: Jednoduchý kanál, který do vyrovnávací paměti ukládat položky do paměti, dokud se neposílají. Položky se ukládají do vyrovnávací paměti a vyprázdní se jednou za 30 sekund nebo každých 500 položek do vyrovnávací paměti. Tento kanál nabízí minimální záruky spolehlivosti, protože se po selhání nebude opakovat odesílání telemetrie. Tento kanál také neuchová položky na disku. Všechny neodehrané položky se proto při vypnutí aplikace trvale ztratí bez ohledu na to, jestli jsou elegantní, nebo ne. Tento kanál implementuje metoduFlush()
, která se dá použít k synchronnímu vyprázdnění všech položek telemetrie v paměti. Tento kanál je vhodný pro krátkodobé aplikace, kde je ideální synchronní vyprázdnění.Tento kanál je součástí většího balíčku NuGet Microsoft.ApplicationInsights a je výchozím kanálem, který sada SDK používá, když není nakonfigurováno nic jiného.
ServerTelemetryChannel
: Pokročilejší kanál, který má zásady opakování a schopnost ukládat data na místní disk. Tento kanál opakuje odesílání telemetrie, pokud dojde k přechodným chybám. Tento kanál také používá místní diskové úložiště k uchovávání položek na disku během výpadků sítě nebo velkých svazků telemetrie. Vzhledem k těmto mechanismům opakování a úložišti místních disků se tento kanál považuje za spolehlivější. Doporučujeme ho pro všechny produkční scénáře. Tento kanál je výchozí pro aplikace ASP.NET a ASP.NET Core nakonfigurované podle oficiální dokumentace. Tento kanál je optimalizovaný pro scénáře serveru s dlouhotrvajícími procesy. MetodaFlush()
implementovaná tímto kanálem není synchronní.Tento kanál se odešle jako balíček NuGet Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel a získá se automaticky při použití balíčku NuGet Microsoft.ApplicationInsights.Web nebo Microsoft.ApplicationInsights.AspNetCore NuGet.
Konfigurace kanálu telemetrie
Kanál telemetrie nakonfigurujete tak, že ho nastavíte na aktivní konfiguraci telemetrie. Pro ASP.NET aplikace zahrnuje konfigurace nastavení instance kanálu telemetrie nebo TelemetryConfiguration.Active
úpravou ApplicationInsights.config
. U aplikací ASP.NET Core zahrnuje konfigurace přidání kanálu do kontejneru injektáž závislostí.
Následující části ukazují příklady konfigurace StorageFolder
nastavení kanálu v různých typech aplikací. StorageFolder
je pouze jedním z konfigurovatelných nastavení. Úplný seznam nastavení konfigurace najdete v části Konfigurovatelná nastavení v části Kanály dále v tomto článku.
Konfigurace pomocí ApplicationInsights.config pro aplikace ASP.NET
Následující část z ApplicationInsights.config ukazuje ServerTelemetryChannel
kanál nakonfigurovaný s nastaveným StorageFolder
na vlastní umístění:
<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>
Konfigurace v kódu pro aplikace ASP.NET
Následující kód nastaví ServerTelemetryChannel
instanci s StorageFolder
nastavenou na vlastní umístění. Přidejte tento kód na začátek aplikace, obvykle v Application_Start()
metodě v Global.aspx.cs.
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;
}
Konfigurace v kódu pro aplikace ASP.NET Core
ConfigureServices
Upravte metodu Startup.cs
třídy, jak je znázorněno zde:
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();
}
Důležité
Konfigurace kanálu pomocí není TelemetryConfiguration.Active
pro aplikace ASP.NET Core podporovaná.
Konfigurace v kódu pro konzolové aplikace .NET/.NET Core
Pro konzolové aplikace je kód stejný pro .NET i .NET Core:
var serverTelemetryChannel = new ServerTelemetryChannel();
serverTelemetryChannel.StorageFolder = @"d:\temp\applicationinsights";
serverTelemetryChannel.Initialize(TelemetryConfiguration.Active);
TelemetryConfiguration.Active.TelemetryChannel = serverTelemetryChannel;
Provozní podrobnosti o Nástroji ServerTelemetryChannel
ServerTelemetryChannel
ukládá příchozí položky do vyrovnávací paměti. Položky jsou serializovány, komprimovány a uloženy do Transmission
instance jednou za 30 sekund nebo při uložení 500 položek do vyrovnávací paměti. Jedna Transmission
instance obsahuje až 500 položek a představuje dávku telemetrie, která se odesílá přes jedno volání HTTPS do služby Application Insights.
Ve výchozím nastavení je možné paralelně odesílat maximálně 10 Transmission
instancí. Pokud telemetrie přichází rychleji nebo pokud je síť nebo back-end Application Insights pomalý, Transmission
instance se ukládají do paměti. Výchozí kapacita této vyrovnávací paměti v paměti Transmission
je 5 MB. Po překročení Transmission
kapacity v paměti se instance ukládají na místní disk až do limitu 50 MB.
Transmission
Instance jsou uloženy na místním disku také v případě, že dochází k problémům se sítí. Pouze ty položky, které jsou uložené na místním disku, přežijí chybové ukončení aplikace. Posílají se pokaždé, když se aplikace znovu spustí. Pokud problémy se sítí potrvají, ServerTelemetryChannel
použije se před opakovaným pokusem o odeslání telemetrie exponenciální logika zpětného od 10 sekund do 1 hodiny.
Konfigurovatelná nastavení v kanálech
Úplný seznam konfigurovatelných nastavení pro každý kanál najdete tady:
Tady jsou nejčastěji používaná nastavení pro ServerTelemetryChannel
:
MaxTransmissionBufferCapacity
: Maximální velikost paměti v bajtech, kterou kanál používá k ukládání přenosů do vyrovnávací paměti. Po dosažení této kapacity se nové položky ukládají přímo na místní disk. Výchozí hodnota je 5 MB. Nastavení vyšší hodnoty vede k menšímu využití disku, ale mějte na paměti, že pokud dojde k chybě aplikace, dojde ke ztrátě položek v paměti.MaxTransmissionSenderCapacity
: Maximální početTransmission
instancí, které budou odeslány do Application Insights najednou. Výchozí hodnota je 10. Toto nastavení je možné nakonfigurovat na vyšší číslo, které doporučujeme, když se vygeneruje velký objem telemetrie. K vysokému objemu obvykle dochází během zátěžového testování nebo při vypnutí vzorkování.StorageFolder
: Složka, kterou kanál používá k ukládání položek na disk podle potřeby. Ve Windows se používá %LOCALAPPDATA% nebo %TEMP%, pokud není explicitně zadána žádná jiná cesta. V jiných prostředích než Windows musíte zadat platné umístění nebo telemetrii se neuloží na místní disk.
Jaký kanál mám použít?
Doporučujeme ServerTelemetryChannel
pro většinu produkčních scénářů, které zahrnují dlouhotrvající aplikace. Metoda Flush()
implementovaná ServerTelemetryChannel
není synchronní. Nezaručuje také odesílání všech nevyřízených položek z paměti nebo disku.
Pokud tento kanál používáte ve scénářích, kdy se aplikace chystá vypnout, zaveď nějakou prodlevu po volání Flush()
. Přesné množství zpoždění, které může vyžadovat, není předvídatelné. Závisí na faktorech, jako je počet položek nebo Transmission
instancí v paměti, kolik je na disku, kolik se přenáší do back-endu a jestli je kanál uprostřed exponenciálních back-off scénářů.
Pokud potřebujete provést synchronní vyprázdnění, použijte InMemoryChannel
.
Nejčastější dotazy
Tato část obsahuje odpovědi na běžné otázky.
Zaručuje kanál Application Insights doručování telemetrie? Pokud ne, jaké jsou scénáře, ve kterých může dojít ke ztrátě telemetrie?
Stručná odpověď je, že žádný z předdefinovaných kanálů nenabízí záruku doručení telemetrie do back-endu typu transakce. ServerTelemetryChannel
je pokročilejší v porovnání se spolehlivým InMemoryChannel
doručováním, ale zároveň se snaží odesílat telemetrii jen s nejlepším úsilím. Telemetrie může být stále ztracena v několika situacích, včetně těchto běžných scénářů:
- Při chybovém ukončení aplikace dojde ke ztrátě položek v paměti.
- Telemetrie se ztratí během delších období problémů se sítí. Telemetrie se ukládá na místní disk během výpadků sítě nebo v případě problémů s back-endem Application Insights. Položky starší než 48 hodin se však zahodí.
- Výchozí umístění disků pro ukládání telemetrie ve Windows jsou %LOCALAPPDATA% nebo %TEMP%. Tato umístění jsou obvykle místní pro počítač. Pokud aplikace migruje fyzicky z jednoho umístění do jiného, dojde ke ztrátě všech telemetrických dat uložených v původním umístění.
- Ve Službě Azure Web Apps ve Windows je výchozím umístěním úložiště disku D:\local\LocalAppData. Toto umístění není trvalé. Vymaže se v restartech aplikace, horizontálním navýšení kapacity a dalších takových operacích, což vede ke ztrátě jakékoli telemetrie uložené v ní. Výchozí nastavení můžete přepsat a zadat úložiště do trvalého umístění, jako je D:\home. Taková trvalá umístění však obsluhují vzdálené úložiště, takže může být pomalé.
I když je méně pravděpodobné, je také možné, že kanál může způsobit duplicitní položky telemetrie. K tomuto chování dochází při ServerTelemetryChannel
opakování kvůli selhání sítě nebo vypršení časového limitu, kdy se telemetrie doručovala do back-endu, ale odezva se ztratila kvůli problémům se sítí nebo došlo k vypršení časového limitu.
Funguje ServerTelemetryChannel na jiných systémech než Windows?
I když název balíčku a oboru názvů zahrnuje "WindowsServer", tento kanál je podporován v jiných systémech než Windows, s následující výjimkou. V jiných systémech než Windows kanál ve výchozím nastavení nevytvoří složku místního úložiště. Musíte vytvořit složku místního úložiště a nakonfigurovat kanál tak, aby ho používal. Po nakonfigurování místního úložiště funguje kanál ve všech systémech stejným způsobem.
Poznámka:
S verzí 2.15.0-beta3 a novější se teď pro Linux, Mac a Windows automaticky vytvoří místní úložiště. V systémech, které nejsou systémy Windows, sada SDK automaticky vytvoří místní složku úložiště na základě následující logiky:
${TMPDIR}
: Pokud${TMPDIR}
je proměnná prostředí nastavená, použije se toto umístění./var/tmp
: Pokud předchozí umístění neexistuje, zkusíme/var/tmp
to ./tmp
: Pokud obě předchozí umístění neexistují, zkusímetmp
to .- Pokud žádná z těchto umístění neexistuje, místní úložiště se nevytvořilo a vyžaduje se ruční konfigurace. Úplné podrobnosti o implementaci najdete v tomto úložišti GitHubu.
Vytváří sada SDK dočasné místní úložiště? Jsou data zašifrovaná v úložišti?
Sada SDK ukládá položky telemetrie v místním úložišti během problémů se sítí nebo během omezování. Tato data nejsou místně šifrovaná.
V systémech Windows sada SDK automaticky vytvoří dočasnou místní složku v adresáři %TEMP% nebo %LOCALAPPDATA% a omezí přístup pouze správcům a aktuálnímu uživateli.
V případě systémů jiných než Windows se sada SDK automaticky nevytvořila žádná místní úložiště, takže žádná data se ve výchozím nastavení neukládají místně.
Poznámka:
S verzí 2.15.0-beta3 a novější se teď pro Linux, Mac a Windows automaticky vytvoří místní úložiště.
Adresář úložiště můžete vytvořit sami a nakonfigurovat kanál tak, aby ho používal. V tomto případě zodpovídáte za zajištění zabezpečení adresáře. Přečtěte si další informace o ochraně dat a ochraně osobních údajů.
Opensourcová sada SDK
Stejně jako všechny sady SDK pro Application Insights jsou kanály opensourcové. Přečtěte si kód a nahlašte problémy v oficiálním úložišti GitHubu.