Kanály telemetrie v Přehledy aplikace

Telemetrické kanály jsou nedílnou součástí sad SDK Aplikace Azure Přehledy. Spravují ukládání do vyrovnávací paměti a přenos telemetrie do služby Přehledy aplikace. Verze sad .NET a .NET Core sad SDK mají dva integrované telemetrické kanály: InMemoryChannel a ServerTelemetryChannel. Tento článek podrobně popisuje jednotlivé kanály, včetně postupu přizpůsobení chování kanálu.

Co jsou kanály telemetrie?

Kanály telemetrie zodpovídají za ukládání položek telemetrie do vyrovnávací paměti a odesílají je do služby Přehledy aplikace, kde jsou uložené pro dotazování a analýzu. Kanál telemetrie je jakákoli třída, která implementuje Microsoft.ApplicationInsights.ITelemetryChannel rozhraní.

Send(ITelemetry item) Metoda kanálu telemetrie se volá po volání všech inicializátorů telemetrie a procesorů telemetrie. Proto se všechny položky vyřazené procesorem telemetrie nedostanou k kanálu. Send() obvykle neodesílá položky do back-endu okamžitě. Obvykle je ukládá do paměti a odesílá je do dávek, aby bylo možné efektivně přenášet.

Live Metrics Stream má také vlastní kanál, který umožňuje živé streamování telemetrie. Tento kanál je nezávislý na pravidelném kanálu telemetrie a tento dokument se na něj nevztahuje.

Integrované kanály telemetrie

Sada Application Přehledy .NET a .NET Core SDK se dodává se dvěma integrovanými kanály:

  • InMemoryChannel: Odlehčený kanál, který bude 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 každých 30 sekund nebo každých 500 položek do vyrovnávací paměti. Tento kanál nabízí minimální záruku spolehlivosti, protože se po selhání nepokusí znovu odesílat telemetrická data. Tento kanál také neuchovává položky na disku, takže při vypnutí aplikace (bez odkladu nebo ne) se trvale ztratí žádné neodeznané položky. Tento kanál implementuje metodu Flush() , která se dá použít k vynucení vyprázdnění všech položek telemetrie v paměti synchronně. 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 Microsoft.ApplicationInsights NuGet 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 zachová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 místnímu úložišti disků se tento kanál považuje za spolehlivější a doporučuje se pro všechny produkční scénáře. Tento kanál je výchozí pro ASP.NET a ASP.NET Core aplikace nakonfigurované podle oficiální dokumentace. Tento kanál je optimalizovaný pro scénáře serveru s dlouhotrvajícími procesy. Metoda Flush() implementovaná tímto kanálem není synchronní.

    Tento kanál se odešle jako balíček Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel NuGet a získá se automaticky při použití balíčku 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. Konfigurace ASP.NET aplikací zahrnuje nastavení instance kanálu telemetrie na TelemetryConfiguration.Activenebo úpravou ApplicationInsights.config. Konfigurace ASP.NET Core aplikací zahrnuje přidání kanálu do kontejneru injektáže závislostí.

Následující části ukazují příklady konfigurace StorageFolder nastavení kanálu v různých typech aplikací. StorageFolder je jen jedním z konfigurovatelných nastavení. Úplný seznam nastavení konfigurace najdete v části Nastavení 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ý StorageFolder na nastavené 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 ASP.NET aplikace

Následující kód nastaví instanci ServerTelemetryChannel s StorageFolder nastavenou na vlastní umístění. Přidejte tento kód na začátek aplikace, obvykle v metodě v Application_Start() 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í TelemetryConfiguration.Active není podporována pro ASP.NET Core aplikace.

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 v paměti. Položky se serializují, komprimují a ukládají do Transmission instance jednou každých 30 sekund nebo po 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 Přehledy aplikace.

Ve výchozím nastavení je možné paralelně odesílat maximálně 10 Transmission instancí. Pokud se telemetrie blíží rychlejším tempem nebo pokud je síť nebo back-end Přehledy aplikace 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 se ukládají na místní disk 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 spustí znovu. Pokud problémy se sítí přetrvávají, ServerTelemetryChannel použije se exponenciální logika backoff od 10 sekund do 1 hodiny před opakovaným pokusem o odeslání telemetrie.

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:

  1. MaxTransmissionBufferCapacity: Maximální množství paměti v bajtech používané kanálem k ukládání 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 chybovému ukončení aplikace, dojde ke ztrátě položek v paměti.

  2. MaxTransmissionSenderCapacity: Maximální počet Transmission instancí, které budou odeslány do aplikace Přehledy současně. Výchozí hodnota je 10. Toto nastavení je možné nakonfigurovat na vyšší číslo, které se doporučuje, 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í.

  3. StorageFolder: Složka, kterou kanál používá k ukládání položek na disk podle potřeby. V Windows se použije %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, které se neuloží na místní disk.

Jaký kanál mám použít?

ServerTelemetryChannel doporučuje se pro většinu produkčních scénářů zahrnujících dlouhotrvající aplikace. Flush() Metoda implementovaná ServerTelemetryChannel není synchronní a 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, doporučujeme po volání Flush()zavést nějaké zpoždění . Přesné množství zpoždění, které byste mohli 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 scénářů back-off.

Pokud potřebujete provést synchronní vyprázdnění, doporučujeme použít InMemoryChannel.

Nejčastější dotazy

Zaručuje služba Application Přehledy channel doručování telemetrie? Pokud ne, jaké jsou scénáře, ve kterých může dojít ke ztrátě telemetrie?

Krátká odpověď je, že žádný z předdefinovaných kanálů nenabízí záruku doručení telemetrie do back-endu. 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ářů:

  1. Při chybovém ukončení aplikace dojde ke ztrátě položek v paměti.

  2. 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 aplikace Přehledy. Položky starší než 48 hodin se ale zahodí.

  3. Výchozí umístění disků pro ukládání telemetrie v Windows jsou %LOCALAPPDATA% nebo %TEMP%. Tato umístění jsou obvykle místní pro počítač. Pokud se aplikace fyzicky migruje 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í.

  4. Ve službě Azure Web Apps na Windows je výchozí umístění úložiště disku D:\local\LocalAppData. Toto umístění není trvalé. V aplikacích se vymaže restartování, horizontální navýšení kapacity a další takové operace, 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í jsou však obsluhována vzdáleným úložištěm a mohou 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 tomu dochází ServerTelemetryChannel při opakování kvůli selhání sítě nebo vypršení časového limitu, kdy se telemetrie skutečně doručila 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 místní složku úložiště a nakonfigurovat kanál tak, aby ho používal. Po nakonfigurování místního úložiště funguje kanál stejným způsobem ve všech systémech.

Poznámka

S verzí 2.15.0-beta3 a větším místním úložištěm se teď automaticky vytvoří pro Linux, Mac a Windows. Pro systémy, které nejsou Windows, sada SDK automaticky vytvoří složku místního úložiště na základě následující logiky:

  • ${TMPDIR} – pokud ${TMPDIR} je proměnná prostředí nastavena, použije se toto umístění.
  • /var/tmp - pokud předchozí umístění neexistuje, zkusíme to /var/tmp.
  • /tmp - pokud obě předchozí umístění neexistují, zkusíme to tmp.
  • Pokud žádná z těchto umístění neexistuje, místní úložiště se nevytvořilo a ruční konfigurace se stále vyžaduje. Úplné podrobnosti o implementaci.

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.

Pro systémy jiné 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 větším místním úložištěm se teď automaticky vytvoří pro Linux, Mac a Windows.

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 každá sada SDK pro Přehledy aplikací jsou kanály open source. V oficiálním úložišti GitHub si můžete přečíst kód nebo nahlásit problémy.

Další kroky