Megosztás a következőn keresztül:


Telemetriai csatornák az Application Insightsban

A telemetriai csatornák az Application Insights SDK-k szerves részét képezik. Kezelik a telemetria pufferelését és átvitelét az Application Insights szolgáltatásba. Az SDK-k .NET és .NET Core verziói két beépített telemetriai csatornával rendelkeznek: InMemoryChannel és ServerTelemetryChannel. Ez a cikk ismerteti az egyes csatornákat, és bemutatja, hogyan szabhatja testre a csatornák viselkedését.

Feljegyzés

Az alábbi dokumentáció a klasszikus Application Insights API-ra támaszkodik. Az Application Insights hosszú távú terve, hogy adatokat gyűjtsön az OpenTelemetry használatával. További információ: Az Azure Monitor OpenTelemetria engedélyezése .NET-, Node.js-, Python- és Java-alkalmazásokhoz , valamint az OpenTelemetria ütemterve. A migrálási útmutató a .NET, a Node.js és a Python esetében érhető el.

Mik azok a telemetriai csatornák?

A telemetriai csatornák feladata a telemetriai elemek pufferelése és elküldése az Application Insights szolgáltatásba, ahol a rendszer lekérdezésre és elemzésre tárolja őket. A telemetriacsatorna bármely olyan osztály, amely megvalósítja az interfészt Microsoft.ApplicationInsights.ITelemetryChannel .

A Send(ITelemetry item) telemetriai csatorna metódusának meghívása az összes telemetriai inicializáló és telemetriafeldolgozó meghívása után történik. A telemetriai processzor által elvetett elemek tehát nem érik el a csatornát. A Send() metódus általában nem küldi el az elemeket a háttérbe azonnal. Általában puffereli őket a memóriában, és kötegekben küldi őket a hatékony átvitel érdekében.

Az élő metrikák streamje egy egyéni csatornával is rendelkezik, amely a telemetriai adatok élő streamelésének a szabályozását biztosítja. Ez a csatorna független a normál telemetriai csatornától, és ez a dokumentum nem vonatkozik rá.

Beépített telemetriai csatornák

Az Application Insights .NET és a .NET Core SDK-k két beépített csatornával szállnak le:

  • InMemoryChannel: Egy egyszerűsített csatorna, amely a memóriában lévő elemeket puffereli, amíg el nem küldi őket. A rendszer az elemeket a memóriában puffereli, és 30 másodpercenként egyszer üríti ki, vagy amikor 500 elemet pufferel. Ez a csatorna minimális megbízhatósági garanciát nyújt, mert nem próbál újra telemetriát küldeni meghibásodás után. Ez a csatorna a lemezen lévő elemeket sem tárolja. Az alkalmazás leállítása után tehát a nem elküldött elemek végleg elvesznek, akár kecses, akár nem. Ez a csatorna egy Flush() metódust implementál, amellyel a memóriában lévő telemetriai elemeket szinkron módon kényszerítheti ki. Ez a csatorna kiválóan alkalmas rövid ideig futó alkalmazásokhoz, ahol a szinkron öblítés ideális.

    Ez a csatorna a nagyobb Microsoft.ApplicationInsights NuGet-csomag része, és ez az alapértelmezett csatorna, amelyet az SDK akkor használ, ha nincs más konfigurálva.

  • ServerTelemetryChannel: Egy fejlettebb csatorna, amely újrapróbálkozési szabályzatokkal rendelkezik, és képes adatokat tárolni egy helyi lemezen. Ez a csatorna újrapróbálkozza a telemetriai adatok küldését átmeneti hibák esetén. Ez a csatorna helyi lemeztárolót is használ a lemezen lévő elemek hálózati kimaradások vagy magas telemetriai kötetek során történő tárolásához. Az újrapróbálkozások és a helyi lemeztárolás miatt ez a csatorna megbízhatóbbnak minősül. Minden éles forgatókönyvhöz ajánljuk. Ez a csatorna az alapértelmezett ASP.NET és ASP.NET Core-alkalmazásokhoz, amelyek a hivatalos dokumentációnak megfelelően vannak konfigurálva. Ez a csatorna hosszú ideig futó folyamatokkal rendelkező kiszolgálói forgatókönyvekhez van optimalizálva. A Flush() csatorna által implementált metódus nem szinkron.

    Ez a csatorna a Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel NuGet csomagként lesz szállítva, és automatikusan be lesz szerezve a Microsoft.ApplicationInsights.Web vagy a Microsoft.ApplicationInsights.AspNetCore NuGet csomag használatakor.

Telemetriacsatorna konfigurálása

A telemetriai csatornát úgy konfigurálhatja, hogy az aktív telemetriai konfigurációra állítja. Az ASP.NET alkalmazások esetében a konfiguráció magában foglalja a telemetriai csatornapéldány TelemetryConfiguration.Active beállítását vagy módosítását ApplicationInsights.config. Az ASP.NET Core-alkalmazások esetében a konfiguráció magában foglalja a csatorna hozzáadását a függőséginjektálási tárolóhoz.

Az alábbi szakaszok példákat mutatnak be a csatorna beállításának StorageFolder konfigurálására különböző alkalmazástípusokban. StorageFolder csak az egyik konfigurálható beállítás. A konfigurációs beállítások teljes listájáért tekintse meg a cikk későbbi, Csatornák konfigurálható beállításai szakaszát.

Konfiguráció az ApplicationInsights.config használatával ASP.NET alkalmazásokhoz

Az ApplicationInsights.config következő szakasza az ServerTelemetryChannel egyéni helyre beállított csatornát StorageFolder mutatja be:

    <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>

Konfiguráció ASP.NET alkalmazások kódjában

Az alábbi kód egy ServerTelemetryChannel egyéni helyre beállított példányt StorageFolder állít be. Adja hozzá ezt a kódot az alkalmazás elején, általában a Application_Start() Global.aspx.cs metódusában.

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;
}

Konfiguráció a ASP.NET Core-alkalmazások kódjában

Módosítsa az ConfigureServices osztály metódusát az Startup.cs itt látható módon:

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();
}

Fontos

A csatorna használata TelemetryConfiguration.Active nem támogatott ASP.NET Core-alkalmazások esetében.

Konfiguráció a .NET/.NET Core-konzolalkalmazások kódjában

Konzolalkalmazások esetén a kód a .NET és a .NET Core esetében is ugyanaz:

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

A ServerTelemetryChannel működési adatai

ServerTelemetryChannel tárolja az érkező elemeket egy memóriabeli pufferben. Az elemek szerializálva, tömörítve és tárolva vannak egy Transmission példányban 30 másodpercenként, vagy ha 500 elemet puffereltek. Egyetlen Transmission példány legfeljebb 500 elemet tartalmaz, és olyan telemetriai kötegeket jelöl, amelyeket egyetlen HTTPS-híváson keresztül küldenek az Application Insights szolgáltatásnak.

Alapértelmezés szerint legfeljebb 10 Transmission példány küldhető párhuzamosan. Ha a telemetria gyorsabb ütemben érkezik, vagy ha a hálózat vagy az Application Insights háttérrendszere lassú, Transmission a példányok a memóriában vannak tárolva. A memóriabeli Transmission puffer alapértelmezett kapacitása 5 MB. A memóriabeli kapacitás túllépésekor Transmission a rendszer a példányokat legfeljebb 50 MB-os korlátig tárolja a helyi lemezen.

Transmission a példányok a helyi lemezen is tárolódnak, ha hálózati problémák merülnek fel. Csak a helyi lemezen tárolt elemek maradnak túl egy alkalmazás összeomlásán. A rendszer minden alkalommal elküldi őket, amikor az alkalmazás újra elindul. Ha a hálózati problémák továbbra is fennállnak, ServerTelemetryChannel a telemetriai adatok elküldéséhez az újrapróbálkozás előtt 10 másodperctől 1 óráig terjedő exponenciális visszalépési logikát fog használni.

Konfigurálható beállítások a csatornákban

Az egyes csatornák konfigurálható beállításainak teljes listáját a következő témakörben találja:

Az alábbiakban a leggyakrabban használt beállításokat ServerTelemetryChannelhasználjuk:

  • MaxTransmissionBufferCapacity: A csatorna által a memóriában lévő átvitelek pufferelésére használt maximális memóriamennyiség bájtban. A kapacitás elérésekor a rendszer közvetlenül a helyi lemezen tárolja az új elemeket. Az alapértelmezett érték 5 MB. A magasabb érték beállítása kevesebb lemezhasználatot eredményez, de ne feledje, hogy a memóriában lévő elemek elvesznek, ha az alkalmazás összeomlik.
  • MaxTransmissionSenderCapacity: Az Application Insightsba egyszerre küldött példányok maximális száma Transmission . Az alapértelmezett érték 10. Ez a beállítás magasabb számra konfigurálható, amelyet nagy mennyiségű telemetriai adat létrehozásakor javasoljuk. A nagy mennyiség általában terhelésteszteléskor vagy a mintavétel kikapcsolásakor fordul elő.
  • StorageFolder: A csatorna által az elemek lemezre való tárolására használt mappa, szükség szerint. Windows rendszerben a rendszer %LOCALAPPDATA% vagy %TEMP% értéket használ, ha nincs explicit módon megadva más elérési út. A Windowstól eltérő környezetekben meg kell adnia egy érvényes helyet, vagy a telemetria nem lesz tárolva a helyi lemezen.

Melyik csatornát érdemes használni?

A legtöbb olyan éles forgatókönyvhöz ajánljuk ServerTelemetryChannel , amelyek hosszú ideig futó alkalmazásokat is érintenek. Az Flush() implementált ServerTelemetryChannel metódus nem szinkron. Emellett nem garantálja az összes függőben lévő elem küldését a memóriából vagy a lemezről.

Ha ezt a csatornát olyan helyzetekben használja, ahol az alkalmazás le fog állni, a hívás Flush()után némi késést kell bevezetnie. Az esetleg szükséges késés pontos mennyisége nem kiszámítható. Ez olyan tényezőktől függ, mint az, hogy hány elem vagy Transmission példány van a memóriában, hány van a lemezen, hány van továbbítva a háttérbe, és hogy a csatorna exponenciális háttérbeli forgatókönyvek közepén van-e.

Ha szinkron öblítést kell végeznie, használja InMemoryChannela következőt: .

Gyakori kérdések

Ez a szakasz választ ad a gyakori kérdésekre.

Az Application Insights-csatorna garantálja a telemetria kézbesítését? Ha nem, mik azok a forgatókönyvek, amelyekben a telemetriai adatok elveszhetnek?

A rövid válasz az, hogy egyik beépített csatorna sem biztosít tranzakciótípusú garanciát a telemetria háttérbe történő kézbesítésére. ServerTelemetryChannel a megbízható kézbesítéshez képest InMemoryChannel fejlettebb, de a telemetriai adatok küldésére is csak a legjobb erőfeszítést teszi. A telemetriai adatok több esetben is elveszhetnek, beleértve az alábbi gyakori forgatókönyveket:

  • A memóriában lévő elemek elvesznek, amikor az alkalmazás összeomlik.
  • A telemetriai adatok a hálózati problémák hosszabb időszakában elvesznek. A rendszer a helyi lemezen tárolja a telemetriát a hálózatkimaradások vagy az Application Insights háttérrendszerével kapcsolatos problémák esetén. A rendszer azonban elveti a 48 óránál régebbi elemeket.
  • A telemetriai adatok Windows rendszerben való tárolásának alapértelmezett lemezhelyei a következő: %LOCALAPPDATA% vagy %TEMP%. Ezek a helyek általában helyiek a gépen. Ha az alkalmazás fizikailag egyik helyről a másikra migrál, az eredeti helyen tárolt telemetriai adatok elvesznek.
  • A Windows Azure Web Appsben az alapértelmezett lemeztárolási hely a D:\local\LocalAppData. Ez a hely nem marad meg. Az alkalmazás újraindítása, a vertikális felskálázás és más ilyen műveletek során törlődik, ami az ott tárolt telemetriai adatok elvesztéséhez vezet. Felülbírálhatja az alapértelmezett értéket, és megadhatja a tárterületet egy olyan tartós helyre, mint a D:\home. Az ilyen fenntartott helyeket azonban távoli tárolók szolgálják ki, így lassúak is lehetnek.

Bár kevésbé valószínű, hogy a csatorna ismétlődő telemetriai elemeket is okozhat. Ez a viselkedés akkor fordul elő, ha ServerTelemetryChannel hálózati hiba vagy időtúllépés miatt újrapróbálkozik, amikor a telemetria a háttérbe lett kézbesítve, de a válasz hálózati problémák vagy időtúllépés miatt elveszett.

Működik a ServerTelemetryChannel a Windowstól eltérő rendszereken?

Bár a csomag és a névtér neve tartalmazza a "WindowsServer" nevet, ez a csatorna a Windowstól eltérő rendszereken is támogatott, az alábbi kivétellel. A Windowstól eltérő rendszereken a csatorna alapértelmezés szerint nem hoz létre helyi tárolómappát. Létre kell hoznia egy helyi tárolómappát, és konfigurálnia kell a csatornát a használatára. A helyi tároló konfigurálása után a csatorna ugyanúgy működik az összes rendszeren.

Feljegyzés

A 2.15.0-béta3-es és újabb kiadással a helyi tároló automatikusan létrejön Linux, Mac és Windows rendszeren. Nem Windows rendszerű rendszerek esetén az SDK automatikusan létrehoz egy helyi tárolómappát a következő logika alapján:

  • ${TMPDIR}: Ha a ${TMPDIR} környezeti változó be van állítva, a rendszer ezt a helyet használja.
  • /var/tmp: Ha az előző hely nem létezik, megpróbáljuk./var/tmp
  • /tmp: Ha az előző helyek nem léteznek, megpróbáljuk.tmp
  • Ha egyik hely sem létezik, a rendszer nem hoz létre helyi tárolót, és továbbra is szükség van manuális konfigurálásra. A megvalósítás részleteiért tekintse meg ezt a GitHub-adattárat.

Az SDK ideiglenes helyi tárolót hoz létre? Az adatok titkosítva lesznek a tárolóban?

Az SDK hálózati problémák vagy szabályozás során helyi tárolóban tárolja a telemetriai elemeket. Ezek az adatok nincsenek helyileg titkosítva.

Windows-rendszerek esetén az SDK automatikusan létrehoz egy ideiglenes helyi mappát a %TEMP% vagy a %LOCALAPPDATA% könyvtárban, és csak a rendszergazdák és az aktuális felhasználó hozzáférését korlátozza.

A Windowstól eltérő rendszerek esetében az SDK nem hoz létre automatikusan helyi tárolót, így alapértelmezés szerint nem tárol adatokat helyileg.

Feljegyzés

A 2.15.0-béta3-es és újabb kiadással a helyi tároló automatikusan létrejön Linux, Mac és Windows rendszeren.

Saját maga hozhat létre tárkönyvtárat, és konfigurálhatja a csatornát annak használatára. Ebben az esetben Ön a felelős a címtár biztonságának biztosításáért. További információ az adatvédelemről és az adatvédelemről.

Nyílt forráskódú SDK

Az Application Insightshoz készült SDK-hoz hasonlóan a csatornák is nyílt forráskód. Olvassa el és járuljon hozzá a kód- vagy jelentésproblémákhoz a hivatalos GitHub-adattárban.

Következő lépések