Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Telemetrikanaler är en integrerad del av Application Insights SDK:er. De hanterar buffring och överföring av telemetri till Application Insights-tjänsten. .NET- och .NET Core-versionerna av SDK:erna har två inbyggda telemetrikanaler: InMemoryChannel
och ServerTelemetryChannel
. Den här artikeln beskriver varje kanal och visar hur du anpassar kanalbeteendet.
Varning
Vi rekommenderar Azure Monitor OpenTelemetry Distro för nya program eller kunder för att driva Azure Monitor Application Insights. Azure Monitor OpenTelemetry Distro ger en liknande funktion och upplevelse som Application Insights SDK. Det går att migrera från Application Insights SDK med hjälp av migreringsguiderna för .NET, Node.js och Python, men vi arbetar fortfarande med att lägga till ytterligare några funktioner för bakåtkompatibilitet.
Vad är telemetrikanaler?
Telemetrikanaler ansvarar för buffring av telemetriobjekt och skickar dem till Application Insights-tjänsten, där de lagras för frågor och analys. En telemetrikanal är alla klasser som implementerar Microsoft.ApplicationInsights.ITelemetryChannel
gränssnittet.
Metoden Send(ITelemetry item)
för en telemetrikanal anropas när alla telemetriinitierare och telemetriprocessorer anropas. Så, inga objekt som släpps av en telemetriprocessor når kanalen. Metoden Send()
skickar vanligtvis inte objekten till serverdelen direkt. Vanligtvis buffrar den dem i minnet och skickar dem i batchar för effektiv överföring.
Undvik att anropa Flush()
om det inte är viktigt att skicka buffrad telemetri omedelbart. Använd den bara i scenarier som programavstängning, undantagshantering eller när du använder kortvariga processer som bakgrundsjobb eller kommandoradsverktyg. I webbprogram eller långvariga tjänster hanterar SDK telemetri som skickas automatiskt. Att ringa Flush()
i onödan kan orsaka prestandaproblem.
Live Metrics Stream har också en anpassad kanal som driver direktuppspelning av telemetri. Den här kanalen är oberoende av den vanliga telemetrikanalen och det här dokumentet gäller inte för den.
Inbyggda telemetrikanaler
Application Insights .NET och .NET Core SDK:er levereras med två inbyggda kanaler:
InMemoryChannel
: En lätt kanal som buffrar objekt i minnet tills de skickas. Objekt buffras i minnet och töms var 30:e sekund, eller när 500 objekt har buffrats. Den här kanalen ger minimala tillförlitlighetsgarantier eftersom den inte försöker skicka telemetri igen efter ett fel. Den här kanalen behåller inte heller objekt på disken. Så alla osända objekt går förlorade permanent vid programavstängning, oavsett om den är kontrollerad eller inte. Den här kanalen implementerar enFlush()
metod som kan användas för att tvinga bort alla minnesinterna telemetriobjekt synkront. Den här kanalen passar bra för kortvariga program där en synkron tömning är idealisk.Den här kanalen är en del av det större Microsoft.ApplicationInsights NuGet-paketet och är standardkanalen som SDK använder när inget annat har konfigurerats.
ServerTelemetryChannel
: En mer avancerad kanal som har återförsöksprinciper och möjligheten att lagra data på en lokal disk. Den här kanalen försöker skicka telemetri igen om tillfälliga fel inträffar. Den här kanalen använder också lokal disklagring för att hålla objekt på disk under nätverksstopp eller stora telemetrivolymer. På grund av dessa mekanismer för återförsök och lokal disklagring anses den här kanalen vara mer tillförlitlig. Vi rekommenderar det för alla produktionsscenarier. Den här kanalen är standard för ASP.NET och ASP.NET Core-program som konfigureras enligt den officiella dokumentationen. Den här kanalen är optimerad för serverscenarier med tidskrävande processer. MetodenFlush()
som implementeras av den här kanalen är inte synkron.Den här kanalen levereras som NuGet-paketet Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel och hämtas automatiskt när du använder antingen Microsoft.ApplicationInsights.Web eller Microsoft.ApplicationInsights.AspNetCore NuGet-paketet.
Konfigurera en telemetrikanal
Du konfigurerar en telemetrikanal genom att ställa in den på den aktiva telemetrikonfigurationen. För ASP.NET-program innebär konfigurationen att du ställer in telemetrikanalinstansen till TelemetryConfiguration.Active
eller genom att ändra ApplicationInsights.config
. För ASP.NET Core-program innebär konfigurationen att du lägger till kanalen i containern för beroendeinmatning.
I följande avsnitt visas exempel på hur du konfigurerar StorageFolder
inställningen för kanalen i olika programtyper.
StorageFolder
är bara en av de konfigurerbara inställningarna. En fullständig lista över konfigurationsinställningar finns i avsnittet Konfigurerbara inställningar i kanaler senare i den här artikeln.
Konfiguration med hjälp av ApplicationInsights.config för ASP.NET program
I följande avsnitt från ApplicationInsights.config visas kanalen ServerTelemetryChannel
som konfigurerats med StorageFolder
inställd på en anpassad plats:
<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>
Konfiguration i kod för ASP.NET program
Följande kod konfigurerar en ServerTelemetryChannel
instans med StorageFolder
inställd på en anpassad plats. Lägg till den här koden i början av programmet, vanligtvis i Application_Start()
metoden i 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;
}
Konfiguration i kod för ASP.NET Core-program
ConfigureServices
Ändra -metoden för Startup.cs
klassen enligt följande:
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();
}
Viktigt!
Det går inte att konfigurera kanalen med hjälp TelemetryConfiguration.Active
av ASP.NET Core-program.
Konfiguration i kod för .NET/.NET Core-konsolprogram
För konsolappar är koden densamma för både .NET och .NET Core:
var serverTelemetryChannel = new ServerTelemetryChannel();
serverTelemetryChannel.StorageFolder = @"d:\temp\applicationinsights";
serverTelemetryChannel.Initialize(TelemetryConfiguration.Active);
TelemetryConfiguration.Active.TelemetryChannel = serverTelemetryChannel;
Driftinformation om ServerTelemetryChannel
ServerTelemetryChannel
lagrar ankommande objekt i en minnesintern buffert. Objekten serialiseras, komprimeras och lagras i en instans en Transmission
gång var 30:e sekund eller när 500 objekt har buffrats. En enskild Transmission
instans innehåller upp till 500 objekt och representerar en batch telemetri som skickas via ett enda HTTPS-anrop till Application Insights-tjänsten.
Som standard kan högst 10 Transmission
instanser skickas parallellt. Om telemetri-data anländer i snabbare takt, eller om nätverket eller Application Insights-serverdelen blir långsam, lagras Transmission
-instanser i minnet. Standardkapaciteten för den här minnesinterna Transmission
bufferten är 5 MB. När minnesintern kapacitet har överskridits Transmission
lagras instanser på en lokal disk upp till en gräns på 50 MB.
Transmission
instanser lagras på den lokala disken även när det finns nätverksproblem. Endast de objekt som lagras på en lokal disk överlever en programkrasch. De skickas när programmet startar igen. Om nätverksproblem kvarstår ServerTelemetryChannel
använder du en exponentiell backoff-logik som sträcker sig från 10 sekunder till 1 timme innan du försöker skicka telemetri igen.
Konfigurerbara inställningar i kanaler
Den fullständiga listan över konfigurerbara inställningar för varje kanal finns i:
Här är de vanligaste inställningarna för ServerTelemetryChannel
:
-
MaxTransmissionBufferCapacity
: Den maximala mängden minne, i byte, som används av kanalen för att buffrar överföringar i minnet. När den här kapaciteten nås lagras nya objekt direkt på den lokala disken. Standardvärdet är 5 MB. Att ange ett högre värde leder till mindre diskanvändning, men kom ihåg att objekt i minnet går förlorade om programmet kraschar. -
MaxTransmissionSenderCapacity
: Det maximala antaletTransmission
instanser som skickas till Application Insights samtidigt. Standardvärdet är 10. Den här inställningen kan konfigureras till ett högre tal, vilket vi rekommenderar när en stor mängd telemetri genereras. Hög volym inträffar vanligtvis under belastningstestning eller när samplingen är avstängd. -
StorageFolder
: Den mapp som används av kanalen för att lagra objekt på disk efter behov. I Windows används antingen %LOCALAPPDATA% eller %TEMP% om ingen annan sökväg uttryckligen anges. I andra miljöer än Windows måste du ange en giltig plats, annars lagras inte telemetri på den lokala disken.
Vilken kanal ska jag använda?
Vi rekommenderar ServerTelemetryChannel
för de flesta produktionsscenarier som omfattar långvariga applikationer. Mer information om att rensa telemetri finns i om att använda Flush()
.
När ska du använda Flush()
Metoden Flush()
skickar en buffrad telemetri omedelbart. Den bör dock endast användas i specifika scenarier.
Använd Flush()
när:
- Programmet håller på att stängas av och du vill se till att telemetri skickas innan du avslutar.
- Du är i ett undantagshanteringsblock och måste garantera att telemetri levereras.
- Du skriver en kortvarig process som ett bakgrundsjobb eller CLI-verktyg som avslutas snabbt.
Undvik att använda Flush()
i långvariga program, till exempel webbtjänster. SDK hanterar automatiskt buffring och överföring. Att anropa Flush()
i onödan kan orsaka prestandaproblem och garanterar inte att alla data skickas, särskilt när du använder ServerTelemetryChannel
, som inte spolas synkront.
SDK med öppen källkod
Precis som alla SDK:er för Application Insights är kanaler öppen källkod. Läsa och bidra till kod- eller rapportproblem på den officiella GitHub-lagringsplatsen.
Nästa steg
- Mer information om vanliga frågor och svar finns i Vanliga frågor och svar om telemetrikanaler
- Kontrollera att du kör en version av Application Insights SDK som stöds .
- Provtagning
- Felsökning av SDK