Próbkowanie w usłudze Application Insights
Próbkowanie to funkcja w usłudze Application Insights. Jest to zalecany sposób zmniejszenia ruchu danych telemetrycznych, kosztów danych i kosztów magazynowania, zachowując statystycznie poprawną analizę danych aplikacji. Próbkowanie pomaga również uniknąć ograniczania telemetrii przez usługę Application Insights. Filtr próbkowania wybiera powiązane elementy, aby można było przechodzić między elementami podczas badania diagnostycznego.
Gdy liczby metryk są prezentowane w portalu, są one ponownie znormalizowane, aby wziąć pod uwagę próbkowanie. Dzięki temu można zminimalizować wpływ na statystyki.
Uwaga
- Jeśli przyjęto naszą dystrybucję OpenTelemetry i szukasz opcji konfiguracji, zobacz Włączanie próbkowania.
Uwaga
Zalecamy dystrybucję OpenTelemetry usługi Azure Monitor dla nowych aplikacji lub klientów, aby umożliwić usłudze Azure Monitor Application Insights. Dystrybucja OpenTelemetry usługi Azure Monitor zapewnia podobną funkcjonalność i środowisko jako zestaw SDK usługi Application Insights. Migracja z zestawu SDK usługi Application Insights jest możliwa przy użyciu przewodników migracji dla platformy .NET, Node.js i języka Python, ale nadal pracujemy nad dodaniem kilku dodatkowych funkcji w celu zapewnienia zgodności z poprzednimi wersjami.
Krótkie podsumowanie
- Istnieją trzy różne typy próbkowania: próbkowanie adaptacyjne, próbkowanie o stałej częstotliwości i próbkowanie fragmentaryczne.
- Próbkowanie adaptacyjne jest domyślnie włączone we wszystkich najnowszych wersjach usługi Application Insights ASP.NET i ASP.NET Core Software Development Kit (SDK) i azure Functions.
- Próbkowanie o stałej szybkości jest dostępne w ostatnich wersjach zestawów SDK usługi Application Insights dla ASP.NET, ASP.NET Core, Java (zarówno agenta, jak i zestawu SDK), JavaScript i Python.
- W języku Java dostępne są przesłonięcia próbkowania i są przydatne, gdy trzeba zastosować różne współczynniki próbkowania do wybranych zależności, żądań i kontroli kondycji. Użyj przesłonięć próbkowania, aby dostroić niektóre hałaśliwe zależności, podczas gdy na przykład wszystkie ważne błędy są przechowywane na poziomie 100%. To zachowanie jest formą stałego próbkowania, która zapewnia precyzyjny poziom kontroli nad telemetrią.
- Próbkowanie pozyskiwania działa w punkcie końcowym usługi Application Insights. Ma zastosowanie tylko wtedy, gdy żadne inne próbkowanie nie jest stosowane. Jeśli zestaw SDK próbkuje dane telemetryczne, próbkowanie pozyskiwania jest wyłączone.
- W przypadku aplikacji internetowych, jeśli rejestrujesz zdarzenia niestandardowe i musisz upewnić się, że zestaw zdarzeń jest zachowywany lub odrzucany razem, zdarzenia muszą mieć taką samą
OperationId
wartość. - W przypadku pisania zapytań analitycznych należy wziąć pod uwagę próbkowanie. W szczególności zamiast po prostu zliczać rekordy, należy użyć polecenia
summarize sum(itemCount)
. - Niektóre typy danych telemetrycznych, w tym metryki wydajności i metryki niestandardowe, są zawsze przechowywane niezależnie od tego, czy próbkowanie jest włączone, czy nie.
Poniższa tabela zawiera podsumowanie typów próbkowania dostępnych dla każdego zestawu SDK i typu aplikacji:
Application Insights SDK | Obsługiwane próbkowanie adaptacyjne | Obsługiwane próbkowanie o stałej szybkości | Obsługiwane próbkowanie pozyskiwania |
---|---|---|---|
ASP.NET | Tak (domyślnie) | Tak | Tylko wtedy, gdy nie obowiązują żadne inne próbkowanie |
ASP.NET Core | Tak (domyślnie) | Tak | Tylko wtedy, gdy nie obowiązują żadne inne próbkowanie |
Azure Functions | Tak (domyślnie) | Nie. | Tylko wtedy, gdy nie obowiązują żadne inne próbkowanie |
Java | Nie. | Tak | Tylko wtedy, gdy nie obowiązują żadne inne próbkowanie |
JavaScript | Nie. | Tak | Tylko wtedy, gdy nie obowiązują żadne inne próbkowanie |
Node.JS | Nie. | Tak | Tylko wtedy, gdy nie obowiązują żadne inne próbkowanie |
Python | Nie. | Tak | Tylko wtedy, gdy nie obowiązują żadne inne próbkowanie |
Wszystkie inne | Nie | Nie. | Tak |
Uwaga
- Agent aplikacji Java w wersji 3.4.0 lub nowszej używa próbkowania z ograniczoną szybkością jako domyślnego podczas wysyłania danych telemetrycznych do usługi Application Insights. Aby uzyskać więcej informacji, zobacz Próbkowanie z ograniczoną szybkością.
- Informacje na większości tej strony dotyczą bieżących wersji zestawów SDK usługi Application Insights. Aby uzyskać informacje na temat starszych wersji zestawów SDK, zobacz starsze wersje zestawu SDK.
Kiedy należy używać próbkowania
Ogólnie rzecz biorąc, w przypadku większości małych i średnich aplikacji nie potrzebujesz próbkowania. Najbardziej przydatne informacje diagnostyczne i najbardziej dokładne statystyki są uzyskiwane przez zbieranie danych dotyczących wszystkich działań użytkownika.
Główne zalety próbkowania to:
- Usługa Application Insights spada ("ograniczenia") punktów danych, gdy aplikacja wysyła wysoką szybkość telemetrii w krótkim przedziale czasu. Próbkowanie zmniejsza prawdopodobieństwo wystąpienia ograniczania przepustowości przez aplikację.
- Aby zachować limit przydziału punktów danych dla warstwy cenowej.
- Aby zmniejszyć ruch sieciowy z kolekcji danych telemetrycznych.
Jak działa próbkowanie
Algorytm próbkowania decyduje o tym, które elementy telemetryczne są trzymane lub popadają, niezależnie od tego, czy zestaw SDK, czy usługa Application Insights wykonuje próbkowanie. Jest to zgodne z regułami, aby zachować wszystkie powiązane punkty danych bez zmian, dzięki czemu usługa Application Insights zapewnia praktyczne i niezawodne środowisko diagnostyczne, nawet przy mniejszej ilości danych. Na przykład jeśli przykład zawiera żądanie, które zakończyło się niepowodzeniem, zachowuje wszystkie powiązane elementy telemetrii, takie jak wyjątki i ślady. W ten sposób podczas wyświetlania szczegółów żądania w usłudze Application Insights zawsze widoczne jest żądanie i skojarzone z nim dane telemetryczne.
Decyzja o próbkowaniu jest oparta na identyfikatorze operacji żądania, co oznacza, że wszystkie elementy telemetrii należące do określonej operacji są zachowywane lub porzucane. W przypadku elementów telemetrii, które nie mają zestawu identyfikatorów operacji (takich jak elementy telemetrii zgłaszane z wątków asynchronicznych bez kontekstu HTTP), próbkowanie po prostu przechwytuje procent elementów telemetrii każdego typu.
Podczas prezentowania telemetrii z powrotem do Ciebie usługa Application Insights dostosowuje metryki o taki sam procent próbkowania, który był używany w czasie zbierania, aby zrekompensować brakujące punkty danych. W związku z tym podczas przeglądania danych telemetrycznych w usłudze Application Insights użytkownicy widzą statystycznie poprawne przybliżenia zbliżone do rzeczywistych liczb.
Dokładność przybliżenia zależy w dużej mierze od skonfigurowanego procentu próbkowania. Ponadto dokładność zwiększa się w przypadku aplikacji obsługujących dużą liczbę podobnych żądań od wielu użytkowników. Z drugiej strony w przypadku aplikacji, które nie działają ze znaczącym obciążeniem, próbkowanie nie jest potrzebne, ponieważ te aplikacje zwykle mogą wysyłać wszystkie dane telemetryczne podczas pozostawania w ramach limitu przydziału bez powodowania utraty danych z ograniczania przepustowości.
Typy próbkowania
Istnieją trzy różne metody próbkowania:
Próbkowanie adaptacyjne automatycznie dostosowuje ilość danych telemetrycznych wysyłanych z zestawu SDK w aplikacji ASP.NET/ASP.NET Core i z usługi Azure Functions. Jest to domyślne próbkowanie podczas korzystania z zestawu SDK ASP.NET lub ASP.NET Core. Próbkowanie adaptacyjne jest obecnie dostępne tylko dla telemetrii po stronie serwera ASP.NET/ASP.NET Core i dla usługi Azure Functions.
Próbkowanie o stałej szybkości zmniejsza ilość danych telemetrycznych wysyłanych zarówno z serwera ASP.NET, ASP.NET Core, jak i Java oraz z przeglądarek użytkowników. Ustawiasz stawkę. Klient i serwer synchronizują próbkowanie, aby w obszarze Wyszukaj można nawigować między powiązanymi widokami stron i żądaniami.
Próbkowanie pozyskiwania odbywa się w punkcie końcowym usługi Application Insights. Odrzuca ona niektóre dane telemetryczne pochodzące z aplikacji z ustawioną częstotliwością próbkowania. Nie zmniejsza ona ruchu telemetrycznego wysyłanego z aplikacji, ale pomaga zachować miesięczny limit przydziału. Główną zaletą próbkowania pozyskiwania jest możliwość ustawienia częstotliwości próbkowania bez ponownego wdrażania aplikacji. Próbkowanie pozyskiwania działa równomiernie dla wszystkich serwerów i klientów, ale nie ma zastosowania, gdy istnieją inne typy próbkowania.
Ważne
Jeśli dla typu telemetrii włączono metody próbkowania adaptacyjnego lub stałego częstotliwości, próbkowanie pozyskiwania jest wyłączone dla tej telemetrii. Jednak typy danych telemetrycznych, które są wykluczone z próbkowania na poziomie zestawu SDK, będą nadal podlegać próbkowaniu pozyskiwania w tempie ustawionym w portalu.
Próbkowanie adaptacyjne
Próbkowanie adaptacyjne wpływa na ilość danych telemetrycznych wysyłanych z aplikacji serwera internetowego do punktu końcowego usługi Application Insights.
Napiwek
Próbkowanie adaptacyjne jest domyślnie włączone w przypadku korzystania z zestawu SDK ASP.NET lub zestawu ASP.NET Core SDK, a także jest domyślnie włączona dla usługi Azure Functions.
Wolumin automatycznie dostosowuje się, aby utrzymać się w limicie MaxTelemetryItemsPerSecond
szybkości. Jeśli aplikacja generuje niską telemetrię, na przykład podczas debugowania lub niskiego użycia, nie upuszcza elementów, o ile wolumin pozostaje w obszarze MaxTelemetryItemsPerSecond
. W miarę wzrostu ilości danych telemetrycznych dopasowuje częstotliwość próbkowania w celu osiągnięcia woluminu docelowego. Ta korekta, obliczana ponownie w regularnych odstępach czasu, jest oparta na średniej ruchomej szybkości transmisji wychodzącej.
Aby osiągnąć wolumin docelowy, niektóre wygenerowane dane telemetryczne są odrzucane. Jednak podobnie jak w przypadku innych typów próbkowania algorytm zachowuje powiązane elementy telemetryczne. Na przykład podczas inspekcji telemetrii w obszarze Wyszukiwanie można znaleźć żądanie związane z konkretnym wyjątkiem.
Liczby metryk, takie jak częstotliwość żądań i częstotliwość wyjątków, są dostosowywane w celu zrekompensowania częstotliwości próbkowania, dzięki czemu są wyświetlane przybliżone wartości w Eksploratorze metryk.
Konfigurowanie próbkowania adaptacyjnego dla aplikacji ASP.NET
Uwaga
Ta sekcja dotyczy aplikacji ASP.NET, a nie aplikacji ASP.NET Core. Dowiedz się więcej o konfigurowaniu próbkowania adaptacyjnego dla aplikacji ASP.NET Core w dalszej części tego dokumentu.
W ApplicationInsights.config
systemie można dostosować kilka parametrów w węźle AdaptiveSamplingTelemetryProcessor
. Wyświetlane wartości są wartościami domyślnymi:
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
Docelowa szybkość operacji logicznych, które algorytm adaptacyjny ma na celu zebranie na każdym hoście serwera. Jeśli aplikacja internetowa działa na wielu hostach, zmniejsz tę wartość, aby zachować docelową szybkość ruchu w portalu usługi Application Insights.
<EvaluationInterval>00:00:15</EvaluationInterval>
Interwał, w którym jest ponownie oceniana bieżąca szybkość telemetrii. Ocena jest wykonywana jako średnia ruchoma. Możesz skrócić ten interwał, jeśli dane telemetryczne mogą być podatne na nagłe wybuchy.
<SamplingPercentageDecreaseTimeout>00:02:00</SamplingPercentageDecreaseTimeout>
Gdy wartość procentowa próbkowania zmienia się, określa, jak szybko możemy ponownie zmniejszyć procent próbkowania, aby przechwycić mniej danych.
<SamplingPercentageIncreaseTimeout>00:15:00</SamplingPercentageIncreaseTimeout>
Gdy wartość procentowa próbkowania zmieni się, określa, jak szybko możemy ponownie zwiększyć procent próbkowania, aby przechwycić więcej danych.
<MinSamplingPercentage>0.1</MinSamplingPercentage>
Ponieważ procent próbkowania jest różny, jaka jest minimalna wartość, jaką możemy ustawić?
<MaxSamplingPercentage>100.0</MaxSamplingPercentage>
Ponieważ procent próbkowania jest różny, jaka jest maksymalna wartość, jaką możemy ustawić?
<MovingAverageRatio>0.25</MovingAverageRatio>
W obliczeniu średniej ruchomej ta wartość określa wagę, którą należy przypisać do najnowszej wartości. Użyj wartości równej lub mniejszej niż 1. Mniejsze wartości sprawiają, że algorytm jest mniej reaktywny do nagłych zmian.
<InitialSamplingPercentage>100</InitialSamplingPercentage>
Ilość danych telemetrycznych do próbkowania po uruchomieniu aplikacji. Nie zmniejszaj tej wartości podczas debugowania.
<ExcludedTypes>type;type</ExcludedTypes>
Rozdzielana średnikami lista typów, których nie chcesz podlegać próbkowaniu. Rozpoznane typy to:
Dependency
, ,Exception
Event
,PageView
,Request
, .Trace
Wszystkie dane telemetryczne określonych typów są przesyłane; typy, które nie są określone, są próbkowane.<IncludedTypes>type;type</IncludedTypes>
Rozdzielana średnikami lista typów, które chcesz poddać próbkowaniu. Rozpoznane typy to:
Dependency
, ,Exception
Event
,PageView
,Request
, .Trace
Określone typy są próbkowane; wszystkie dane telemetryczne innych typów są zawsze przesyłane.
Aby wyłączyć próbkowanie adaptacyjne, usuń AdaptiveSamplingTelemetryProcessor
węzły z ApplicationInsights.config
programu .
Alternatywa: Konfigurowanie próbkowania adaptacyjnego w kodzie
Zamiast ustawiać parametr próbkowania w .config
pliku, można programowo ustawić te wartości.
Usuń wszystkie
AdaptiveSamplingTelemetryProcessor
węzły z.config
pliku.Użyj następującego fragmentu kodu, aby skonfigurować próbkowanie adaptacyjne:
using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.WindowsServer.Channel.Implementation; using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel; // ... var builder = TelemetryConfiguration.Active.DefaultTelemetrySink.TelemetryProcessorChainBuilder; // For older versions of the Application Insights SDK, use the following line instead: // var builder = TelemetryConfiguration.Active.TelemetryProcessorChainBuilder; // Enable AdaptiveSampling so as to keep overall telemetry volume to 5 items per second. builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5); // If you have other telemetry processors: builder.Use((next) => new AnotherProcessor(next)); builder.Build();
(Dowiedz się więcej o procesorach telemetrii).
Można również dostosować częstotliwość próbkowania dla każdego typu telemetrii indywidualnie, a nawet wykluczyć niektóre typy z próbkowania w ogóle:
// The following configures adaptive sampling with 5 items per second, and also excludes Dependency telemetry from being subjected to sampling.
builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");
Konfigurowanie próbkowania adaptacyjnego dla aplikacji ASP.NET Core
aplikacje ASP.NET Core można skonfigurować w kodzie lub za pośrednictwem appsettings.json
pliku. Aby uzyskać więcej informacji, zobacz Konfiguracja na platformie ASP.NET Core.
Próbkowanie adaptacyjne jest domyślnie włączone dla wszystkich aplikacji ASP.NET Core. Możesz wyłączyć lub dostosować zachowanie próbkowania.
Wyłączanie próbkowania adaptacyjnego
Domyślną funkcję próbkowania można wyłączyć podczas dodawania usługi Application Insights.
Dodaj ApplicationInsightsServiceOptions
po metodzie WebApplication.CreateBuilder()
Program.cs
w pliku:
var builder = WebApplication.CreateBuilder(args);
var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();
aiOptions.EnableAdaptiveSampling = false;
builder.Services.AddApplicationInsightsTelemetry(aiOptions);
var app = builder.Build();
Powyższy kod wyłącza próbkowanie adaptacyjne. Wykonaj poniższe kroki, aby dodać próbkowanie przy użyciu większej liczby opcji dostosowywania.
Konfigurowanie ustawień próbkowania
Użyj następujących metod rozszerzenia, TelemetryProcessorChainBuilder
aby dostosować zachowanie próbkowania.
Ważne
Jeśli używasz tej metody do konfigurowania próbkowania, pamiętaj, aby ustawić aiOptions.EnableAdaptiveSampling
właściwość na false
wartość podczas wywoływania metody AddApplicationInsightsTelemetry()
. Po wprowadzeniu tej zmiany należy postępować zgodnie z instrukcjami w poniższym bloku kodu dokładnie w celu ponownego włączenia próbkowania adaptacyjnego przy użyciu wprowadzonych dostosowań. Nie można tego zrobić, może spowodować nadmierne pozyskiwanie danych. Zawsze testuj po zmianie ustawień próbkowania i ustaw odpowiedni dzienny limit danych, aby ułatwić kontrolowanie kosztów.
using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.ApplicationInsights.Extensibility;
var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure<TelemetryConfiguration>(telemetryConfiguration =>
{
var telemetryProcessorChainBuilder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
// Using adaptive sampling
telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond: 5);
// Alternately, the following configures adaptive sampling with 5 items per second, and also excludes DependencyTelemetry from being subject to sampling:
// telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");
telemetryProcessorChainBuilder.Build();
});
builder.Services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
{
EnableAdaptiveSampling = false,
});
var app = builder.Build();
Inne ustawienia próbkowania można dostosować przy użyciu klasy SamplingPercentageEstimatorSettings :
using Microsoft.ApplicationInsights.WindowsServer.Channel.Implementation;
telemetryProcessorChainBuilder.UseAdaptiveSampling(new SamplingPercentageEstimatorSettings
{
MinSamplingPercentage = 0.01,
MaxSamplingPercentage = 100,
MaxTelemetryItemsPerSecond = 5
}, null, excludedTypes: "Dependency");
Konfigurowanie próbkowania adaptacyjnego dla usługi Azure Functions
Postępuj zgodnie z instrukcjami na tej stronie , aby skonfigurować próbkowanie adaptacyjne dla aplikacji działających w usłudze Azure Functions.
Próbkowanie o stałej częstotliwości
Próbkowanie o stałej szybkości zmniejsza ruch wysyłany z serwera internetowego i przeglądarek internetowych. W przeciwieństwie do próbkowania adaptacyjnego zmniejsza ona telemetrię w stałej szybkości decydowanej przez Ciebie. Próbkowanie o stałej szybkości jest dostępne dla aplikacji ASP.NET, ASP.NET Core, Java i Python.
Podobnie jak inne techniki, zachowuje również powiązane elementy. Synchronizuje również próbkowanie klienta i serwera, tak aby powiązane elementy zostały zachowane. Na przykład podczas przeglądania widoku strony w obszarze Wyszukiwanie można znaleźć powiązane żądania serwera.
W Eksploratorze metryk współczynniki, takie jak liczba żądań i wyjątków, są mnożone przez współczynnik, aby zrekompensować częstotliwość próbkowania, tak aby były one tak dokładne, jak to możliwe.
Konfigurowanie próbkowania o stałej szybkości dla aplikacji ASP.NET
Wyłącz próbkowanie adaptacyjne: w
ApplicationInsights.config
pliku usuń lub oznacz jako komentarzAdaptiveSamplingTelemetryProcessor
węzeł.<TelemetryProcessors> <!-- Disabled adaptive sampling: <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel"> <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond> </Add> -->
Włącz moduł próbkowania o stałej szybkości. Dodaj ten fragment kodu do elementu
ApplicationInsights.config
:W tym przykładzie próbkowaniePercentage wynosi 20, więc próbkowane są 20% wszystkich elementów. Wartości w Eksploratorze metryk są mnożone przez (100/20) = 5 , aby zrekompensować.
<TelemetryProcessors> <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.SamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel"> <!-- Set a percentage close to 100/N where N is an integer. --> <!-- E.g. 50 (=100/2), 33.33 (=100/3), 25 (=100/4), 20, 1 (=100/100), 0.1 (=100/1000) --> <SamplingPercentage>20</SamplingPercentage> </Add> </TelemetryProcessors>
Alternatywnie zamiast ustawiać parametr próbkowania w
ApplicationInsights.config
pliku, można programowo ustawić następujące wartości:using Microsoft.ApplicationInsights.Extensibility; using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel; // ... var builder = TelemetryConfiguration.Active.DefaultTelemetrySink.TelemetryProcessorChainBuilder; // For older versions of the Application Insights SDK, use the following line instead: // var builder = TelemetryConfiguration.Active.TelemetryProcessorChainBuilder; builder.UseSampling(10.0); // percentage // If you have other telemetry processors: builder.Use((next) => new AnotherProcessor(next)); builder.Build();
(Dowiedz się więcej o procesorach telemetrii).
Konfigurowanie próbkowania o stałej szybkości dla aplikacji ASP.NET Core
Wyłączanie próbkowania adaptacyjnego
Zmiany można wprowadzać po metodzie
WebApplication.CreateBuilder()
przy użyciu poleceniaApplicationInsightsServiceOptions
:var builder = WebApplication.CreateBuilder(args); var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions(); aiOptions.EnableAdaptiveSampling = false; builder.Services.AddApplicationInsightsTelemetry(aiOptions); var app = builder.Build();
Włączanie modułu próbkowania o stałej szybkości
Zmiany można wprowadzać po metodzie
WebApplication.CreateBuilder()
:var builder = WebApplication.CreateBuilder(args); builder.Services.Configure<TelemetryConfiguration>(telemetryConfiguration => { var builder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder; // Using fixed rate sampling double fixedSamplingPercentage = 10; builder.UseSampling(fixedSamplingPercentage); builder.Build(); }); builder.Services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions { EnableAdaptiveSampling = false, }); var app = builder.Build();
Konfigurowanie przesłonięć próbkowania i próbkowania o stałej szybkości dla aplikacji Java
Domyślnie w autoinstrumentacji i zestawie SDK języka Java nie jest włączone próbkowanie. Obecnie obsługiwane są autoinstrumentacje języka Java, przesłonięcia próbkowania i próbkowanie o stałej szybkości. Próbkowanie adaptacyjne nie jest obsługiwane w języku Java.
Konfigurowanie automatycznejinstrumentacji języka Java
- Aby skonfigurować przesłonięcia próbkowania, które przesłaniają domyślną częstotliwość próbkowania i stosują różne częstotliwości próbkowania do wybranych żądań i zależności, użyj przewodnika zastępowania próbkowania.
- Aby skonfigurować próbkowanie o stałej szybkości, które ma zastosowanie do wszystkich danych telemetrycznych, użyj przewodnika próbkowania o stałej szybkości.
Uwaga
Dla wartości procentowej próbkowania wybierz wartość procentową zbliżoną do 100/N, gdzie N jest liczbą całkowitą. Obecnie próbkowanie nie obsługuje innych wartości.
Konfigurowanie próbkowania o stałej szybkości dla aplikacji OpenCensus w języku Python
Instrumentacja aplikacji przy użyciu najnowszych eksporterów openCensus usługi Azure Monitor.
Uwaga
Próbkowanie o stałej szybkości nie jest dostępne dla eksportera metryk. Oznacza to, że metryki niestandardowe są jedynymi typami telemetrii, w których nie można skonfigurować próbkowania. Eksporter metryk wyśle wszystkie dane telemetryczne, które śledzi.
Próbkowanie o stałej szybkości do śledzenia
Możesz określić sampler
element w ramach Tracer
konfiguracji. Jeśli nie podano jawnego przykładu, ProbabilitySampler
parametr jest używany domyślnie. Domyślnie ProbabilitySampler
używana jest stawka 1/10000, co oznacza, że co 10 000 żądań jest wysyłanych do usługi Application Insights. Jeśli chcesz określić częstotliwość próbkowania, zobacz następujące szczegóły.
Aby określić częstotliwość próbkowania, upewnij się, że Tracer
określono próbkator z częstotliwością próbkowania z przedziału od 0,0 do 1,0 włącznie. Częstotliwość próbkowania 1,0 reprezentuje 100%, co oznacza, że wszystkie żądania są wysyłane jako dane telemetryczne do usługi Application Insights.
tracer = Tracer(
exporter=AzureExporter(
instrumentation_key='00000000-0000-0000-0000-000000000000',
),
sampler=ProbabilitySampler(1.0),
)
Próbkowanie o stałej szybkości dla dzienników
Możesz skonfigurować próbkowanie o stałej logging_sampling_rate
szybkości, AzureLogHandler
modyfikując opcjonalny argument. Jeśli argument nie zostanie podany, zostanie użyta częstotliwość próbkowania 1,0. Częstotliwość próbkowania 1,0 reprezentuje 100%, co oznacza, że wszystkie żądania są wysyłane jako dane telemetryczne do usługi Application Insights.
handler = AzureLogHandler(
instrumentation_key='00000000-0000-0000-0000-000000000000',
logging_sampling_rate=0.5,
)
Konfigurowanie próbkowania o stałej szybkości dla stron internetowych przy użyciu języka JavaScript
Strony internetowe oparte na języku JavaScript można skonfigurować do korzystania z usługi Application Insights. Dane telemetryczne są wysyłane z aplikacji klienckiej działającej w przeglądarce użytkownika, a strony mogą być hostowane z dowolnego serwera.
Podczas konfigurowania stron internetowych opartych na języku JavaScript dla usługi Application Insights zmodyfikuj fragment kodu JavaScript uzyskany z portalu usługi Application Insights.
Napiwek
W aplikacjach ASP.NET z dołączonym językiem JavaScript fragment kodu zazwyczaj znajduje się w pliku _Layout.cshtml
.
Wstaw wiersz podobny samplingPercentage: 10,
do następującego przed kluczem instrumentacji:
<script>
var appInsights = // ...
({
// Value must be 100/N where N is an integer.
// Valid examples: 50, 25, 20, 10, 5, 1, 0.1, ...
samplingPercentage: 10,
instrumentationKey: ...
});
window.appInsights = appInsights;
appInsights.trackPageView();
</script>
Uwaga
31 marca 2025 r. zostanie zakończone świadczenie pomocy technicznej dla pozyskiwania klucza instrumentacji. Pozyskiwanie klucza instrumentacji będzie nadal działać, ale nie udostępnimy już aktualizacji ani obsługi funkcji. Przejście do parametry połączenia w celu skorzystania z nowych funkcji.
Dla wartości procentowej próbkowania wybierz wartość procentową zbliżoną do 100/N, gdzie N jest liczbą całkowitą. Obecnie próbkowanie nie obsługuje innych wartości.
Koordynowanie próbkowania po stronie serwera i po stronie klienta
Zestaw SDK języka JavaScript po stronie klienta uczestniczy w próbkowaniu o stałej szybkości za pomocą zestawu SDK po stronie serwera. Instrumentowane strony wysyłają dane telemetryczne po stronie klienta tylko od tego samego użytkownika, dla którego zestaw SDK po stronie serwera podjął decyzję o dołączeniu do próbkowania. Ta logika została zaprojektowana tak, aby zachować integralność sesji użytkowników w aplikacjach po stronie klienta i serwera. W związku z tym z dowolnego określonego elementu telemetrii w usłudze Application Insights można znaleźć wszystkie inne elementy telemetrii dla tego użytkownika lub sesji i w obszarze Wyszukiwanie, można nawigować między powiązanymi widokami stron i żądaniami.
Jeśli dane telemetryczne po stronie klienta i serwera nie pokazują skoordynowanych przykładów:
- Sprawdź, czy włączono próbkowanie zarówno na serwerze, jak i kliencie.
- Sprawdź, czy ustawiono tę samą wartość procentową próbkowania zarówno w kliencie, jak i na serwerze.
- Upewnij się, że zestaw SDK ma wersję 2.0 lub nowszą.
Próbkowanie fragmentaryczne
Próbkowanie pozyskiwania działa w punkcie, w którym dane telemetryczne z serwera internetowego, przeglądarek i urządzeń docierają do punktu końcowego usługi Application Insights. Chociaż nie zmniejsza ona ruchu telemetrycznego wysyłanego z aplikacji, zmniejsza ilość przetwarzanych i przechowywanych (i pobieranych opłat) przez usługę Application Insights.
Użyj tego typu próbkowania, jeśli aplikacja często przekroczy miesięczny limit przydziału i nie masz możliwości użycia jednego z typów próbkowania opartego na zestawie SDK.
Ustaw częstotliwość próbkowania na stronie Użycie i szacowane koszty:
Podobnie jak w przypadku innych typów próbkowania, algorytm zachowuje powiązane elementy telemetrii. Na przykład podczas inspekcji telemetrii w obszarze Wyszukiwanie można znaleźć żądanie związane z konkretnym wyjątkiem. Liczniki metryk, takie jak szybkość żądań i częstotliwość wyjątków, są poprawnie zachowywane.
Próbkowanie odrzuca niektóre punkty danych, co czyni je niedostępnymi w dowolnej funkcji usługi Application Insights, takiej jak eksport ciągły.
Próbkowanie pozyskiwania nie działa obok próbkowania adaptacyjnego lub stałego częstotliwości. Próbkowanie adaptacyjne jest automatycznie aktywowane za pomocą zestawu SDK ASP.NET, zestawu SDK platformy ASP.NET Core w usłudze aplikacja systemu Azure lub agenta usługi Application Insights. Gdy punkt końcowy usługi Application Insights odbiera dane telemetryczne i wykrywa częstotliwość próbkowania poniżej 100% (co wskazuje aktywne próbkowanie), ignoruje wszelkie ustawione współczynniki próbkowania pozyskiwania.
Ostrzeżenie
Wartość wyświetlana na kafelku portalu wskazuje wartość ustawioną na potrzeby próbkowania pozyskiwania. Nie reprezentuje rzeczywistej częstotliwości próbkowania, jeśli w ogóle próbkowanie zestawu SDK (próbkowanie adaptacyjne lub stałe) działa.
Jakiego typu próbkowanie należy użyć?
Użyj próbkowania pozyskiwania, jeśli:
- Często używasz miesięcznego limitu przydziału danych telemetrycznych.
- Otrzymujesz zbyt wiele danych telemetrycznych z przeglądarek internetowych użytkowników.
- Używasz wersji zestawu SDK, która nie obsługuje próbkowania — na przykład ASP.NET wersji wcześniejszych niż 2.0.
Użyj próbkowania o stałej szybkości, jeśli:
- Musisz zsynchronizować próbkowanie między klientem a serwerem, aby nawigować między powiązanymi zdarzeniami. Na przykład wyświetlenia strony i żądania HTTP w wyszukiwaniu podczas badania zdarzeń.
- Masz pewność, że odpowiedni procent próbkowania dla aplikacji. Powinno być wystarczająco wysokie, aby uzyskać dokładne metryki, ale poniżej stawki przekraczającej limit przydziału cen i limitów ograniczania przepustowości.
Użyj próbkowania adaptacyjnego:
Jeśli warunki korzystania z innych form próbkowania nie mają zastosowania, zalecamy próbkowanie adaptacyjne. To ustawienie jest domyślnie włączone w zestawie SDK platformy ASP.NET/ASP.NET Core. Nie zmniejsza ruchu, dopóki nie zostanie osiągnięty określony minimalny współczynnik, dlatego witryny o niskim użyciu prawdopodobnie w ogóle nie są próbkowane.
Jak sprawdzić, czy próbkowanie jest w toku
Użyj zapytania analizy, aby znaleźć częstotliwość próbkowania.
union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > ago(1d)
| summarize RetainedPercentage = 100/avg(itemCount) by bin(timestamp, 1h), itemType
Jeśli zobaczysz, że wartość RetainedPercentage
dla dowolnego typu jest mniejsza niż 100, oznacza to, że ten typ danych telemetrycznych jest próbkowany.
Ważne
Usługa Application Insights nie próbkuje sesji, metryk (w tym metryk niestandardowych) ani typów telemetrii licznika wydajności w żadnej z technik próbkowania. Te typy są zawsze wykluczane z próbkowania, ponieważ zmniejszenie dokładności może być wysoce niepożądane dla tych typów telemetrii.
Dokładność zapytań dzienników i wysokie współczynniki próbkowania
Gdy aplikacja jest skalowana w górę, może przetwarzać dziesiątki, setki lub tysiące elementów roboczych na sekundę. Rejestrowanie zdarzenia dla każdego z nich nie jest zasobem ani opłacalne. Usługa Application Insights używa próbkowania, aby dostosować się do rosnącego woluminu telemetrii w elastyczny sposób i kontrolować użycie zasobów i koszty.
Ostrzeżenie
Integralność widoku kompleksowego operacji rozproszonej może mieć wpływ, jeśli którakolwiek aplikacja w operacji rozproszonej włączyła próbkowanie. Różne decyzje dotyczące próbkowania są podejmowane przez każdą aplikację w operacji rozproszonej, dlatego dane telemetryczne dla jednego identyfikatora operacji mogą być zapisywane przez jedną aplikację, podczas gdy inne aplikacje mogą zdecydować się nie próbkować telemetrii dla tego samego identyfikatora operacji.
W miarę zwiększania częstotliwości próbkowania dokładność zapytań opartych na dziennikach zmniejsza się i są zawyżone. Ma to wpływ tylko na dokładność zapytań opartych na dziennikach, gdy próbkowanie jest włączone, a częstotliwości próbkowania znajdują się w wyższym zakresie (~ 60%). Wpływ zależy od typów telemetrii, liczby danych telemetrycznych na operację i inne czynniki.
Zestawy SDK używają wstępnie zagregowanych metryk do rozwiązywania problemów spowodowanych próbkowaniem. Aby uzyskać więcej informacji na temat tych metryk, zobacz aplikacja systemu Azure Insights — Azure Monitor | Microsoft Docs. Zestawy SDK identyfikują odpowiednie właściwości zarejestrowanych danych i wyodrębniają statystyki przed próbkowaniem. Aby zminimalizować użycie zasobów i koszty, metryki są agregowane. Ten proces powoduje wyświetlenie kilku elementów telemetrii metryk na minutę, a nie tysięcy elementów telemetrii zdarzeń. Na przykład te metryki mogą zgłaszać "ta aplikacja internetowa przetworzyła 25 żądań" na koncie MDM z wartością itemCount
100 w rekordzie telemetrii wysłanego żądania. Te wstępnie agregowane metryki zapewniają dokładne liczby i są niezawodne nawet wtedy, gdy próbkowanie wpływa na wyniki zapytania opartego na dzienniku. Można je wyświetlić w okienku Metryki portalu usługi Application Insights.
Często zadawane pytania
Czy próbkowanie ma wpływ na dokładność alertów?
- Tak. Alerty mogą być wyzwalane tylko po próbkowanych danych. Agresywne filtrowanie może spowodować, że alerty nie będą wyzwalane zgodnie z oczekiwaniami.
Uwaga
Próbkowanie nie jest stosowane do metryk, ale metryki mogą pochodzić z danych próbkowanych. W ten sposób próbkowanie może pośrednio wpływać na dokładność alertów.
Jakie jest domyślne zachowanie próbkowania w zestawach SDK ASP.NET i ASP.NET Core?
- Jeśli używasz jednej z najnowszych wersji powyższego zestawu SDK, próbkowanie adaptacyjne jest domyślnie włączone z pięcioma elementami telemetrii na sekundę.
Domyślnie system dodaje dwa
AdaptiveSamplingTelemetryProcessor
węzły: jeden zawieraEvent
typ próbkowania, a drugi je wyklucza. Ta konfiguracja ogranicza dane telemetryczne do pięciuEvent
elementów typu i pięciu elementów wszystkich innych typów połączonych, zapewniając, żeEvents
próbkowane są oddzielnie od innych typów telemetrii.
Użyj przykładów we wcześniejszej sekcji tej strony, aby zmienić to domyślne zachowanie.
Czy dane telemetryczne mogą być próbkowane więcej niż raz?
- L.p. SamplingTelemetryProcessors ignorują elementy z zagadnień dotyczących próbkowania, jeśli element jest już próbkowany. Dotyczy to również próbkowania pozyskiwania, które nie stosuje próbkowania do tych elementów, które zostały już próbkowane w samym zestawie SDK.
Dlaczego próbkowanie nie jest proste "zbieranie X procent każdego typu telemetrii"?
- Chociaż takie podejście do próbkowania zapewniałoby wysoki poziom dokładności w przybliżeniach metryk, spowodowałoby to przerwanie możliwości korelowania danych diagnostycznych na użytkownika, sesję i żądanie, co ma kluczowe znaczenie dla diagnostyki. W związku z tym próbkowanie działa lepiej z zasadami, takimi jak "zbieranie wszystkich elementów telemetrycznych dla X procent użytkowników aplikacji" lub "zbieranie wszystkich danych telemetrycznych dla X żądań aplikacji". W przypadku elementów telemetrii, które nie są skojarzone z żądaniami (takich jak przetwarzanie asynchroniczne w tle), rezerwa polega na "zbieraniu procentu X wszystkich elementów dla każdego typu telemetrii".
Czy procent próbkowania może ulec zmianie w czasie?
- Tak, próbkowanie adaptacyjne stopniowo zmienia wartość procentową próbkowania na podstawie aktualnie obserwowanej ilości danych telemetrycznych.
Jeśli używam próbkowania o stałej szybkości, jak sprawdzić, który procent próbkowania działa najlepiej dla mojej aplikacji?
Jednym ze sposobów jest rozpoczęcie od próbkowania adaptacyjnego, sprawdzenie, jaka szybkość się rozstrzygnie (patrz powyższe pytanie), a następnie przełącz się do próbkowania o stałej szybkości przy użyciu tej szybkości.
W przeciwnym razie musisz odgadnąć. Przeanalizuj bieżące użycie danych telemetrycznych w usłudze Application Insights, obserwuj wszelkie występujące ograniczenia i szacuj ilość zebranych danych telemetrycznych. Te trzy dane wejściowe wraz z wybraną warstwą cenową sugerują, ile można zmniejszyć ilości zebranych danych telemetrycznych. Jednak zwiększenie liczby użytkowników lub innej zmiany ilości danych telemetrycznych może spowodować unieważnienie oszacowania.
Co się stanie, jeśli skonfiguruję procent próbkowania tak, aby był zbyt niski?
- Zbyt niskie wartości procentowe próbkowania powodują zbyt agresywne próbkowanie i zmniejszają dokładność przybliżeń, gdy usługa Application Insights próbuje zrekompensować wizualizację danych na potrzeby redukcji ilości danych. Ponadto środowisko diagnostyczne może mieć negatywny wpływ, ponieważ niektóre z rzadko zakończonych niepowodzeniem lub powolnych żądań mogą być próbkowane.
Co się stanie, jeśli skonfiguruję procent próbkowania tak, aby był zbyt wysoki?
- Skonfigurowanie zbyt dużej wartości procentowej próbkowania (nie wystarczająco agresywnej) powoduje niewystarczającą redukcję ilości zebranych danych telemetrycznych. Nadal możesz doświadczyć utraty danych telemetrycznych związanych z ograniczaniem przepustowości, a koszt korzystania z usługi Application Insights może być wyższy niż planowano z powodu opłat za użycie nadwyżkowe.
Co się stanie, jeśli skonfiguruję ustawienia IncludedTypes i ExcludedTypes?
- Najlepiej nie ustawiać ustawień zarówno, jak
ExcludedTypes
iIncludedTypes
w konfiguracji, aby zapobiec konfliktom i zapewnić jasne ustawienia zbierania danych telemetrycznych. - Typy telemetryczne wymienione w sekcji
ExcludedTypes
są wykluczone, nawet jeśli są one również ustawione wIncludedTypes
ustawieniach. Wartości ExcludedTypes będą miały pierwszeństwo przed parametrami IncludedTypes.
Na jakich platformach mogę używać próbkowania?
- Próbkowanie pozyskiwania może nastąpić automatycznie dla dowolnej telemetrii powyżej określonego woluminu, jeśli zestaw SDK nie wykonuje próbkowania. Ta konfiguracja będzie działać, na przykład jeśli używasz starszej wersji zestawu SDK ASP.NET lub zestawu JAVA SDK.
- Jeśli używasz bieżących zestawów SDK ASP.NET lub ASP.NET Core (hostowanych na platformie Azure lub na własnym serwerze), domyślnie uzyskujesz próbkowanie adaptacyjne, ale możesz przełączyć się na stałą częstotliwość zgodnie z wcześniejszym opisem. W przypadku próbkowania o stałej szybkości zestaw SDK przeglądarki automatycznie synchronizuje się z przykładowymi zdarzeniami pokrewnymi.
- Jeśli używasz bieżącego agenta Języka Java, możesz skonfigurować
applicationinsights.json
(dla zestawu Java SDK, skonfigurować ),ApplicationInsights.xml
aby włączyć próbkowanie o stałej szybkości. Próbkowanie jest domyślnie wyłączone. W przypadku próbkowania o stałej szybkości zestaw SDK przeglądarki i serwer automatycznie synchronizują się z przykładowymi zdarzeniami pokrewnymi.
Istnieją pewne rzadkie wydarzenia, które zawsze chcę zobaczyć. Jak mogę je przejść do modułu próbkowania?
Najlepszym sposobem, aby zawsze widzieć niektóre zdarzenia, jest napisanie niestandardowej telemetriiInitializer, która ustawia
SamplingPercentage
wartość 100 na element telemetrii, który ma zostać zachowany, jak pokazano w poniższym przykładzie. Inicjatory mają gwarancję uruchomienia przed procesorami telemetrii (w tym próbkowaniem), dzięki czemu wszystkie techniki próbkowania ignorują ten element z wszelkich zagadnień dotyczących próbkowania. Inicjatory niestandardowych danych telemetrycznych są dostępne w zestawie SDK ASP.NET, ASP.NET Core SDK, zestawie SDK języka JavaScript i zestawie SDK języka Java. Można na przykład skonfigurować inicjator telemetrii przy użyciu zestawu SDK ASP.NET:public class MyTelemetryInitializer : ITelemetryInitializer { public void Initialize(ITelemetry telemetry) { if(somecondition) { ((ISupportSampling)telemetry).SamplingPercentage = 100; } } }
Starsze wersje zestawu SDK
Próbkowanie adaptacyjne jest dostępne dla zestawu SDK usługi Application Insights dla ASP.NET w wersji 2.0.0-beta3 i nowszych, Microsoft.ApplicationInsights.AspNetCore SDK w wersji 2.2.0-beta1 lub nowszej oraz jest domyślnie włączone.
Próbkowanie o stałym tempie jest funkcją zestawu SDK w wersjach ASP.NET z wersji 2.0.0 i Java SDK w wersji 2.0.1 i nowszych.
Przed wersją 2.5.0-beta2 zestawu SDK ASP.NET i wersji 2.2.0-beta3 zestawu ASP.NET Core SDK decyzje dotyczące próbkowania aplikacji definiujących "użytkownika" (na przykład większość aplikacji internetowych) polegały na skrótzie identyfikatora użytkownika. W przypadku aplikacji, które nie definiują użytkowników (takich jak usługi internetowe), opiera się na decyzji o identyfikatorze operacji żądania. Najnowsze wersje zestawów SDK ASP.NET i ASP.NET Core używają teraz identyfikatora operacji do podejmowania decyzji dotyczących próbkowania.
Następne kroki
- Filtrowanie może zapewnić bardziej ścisłą kontrolę nad tym, co wysyła zestaw SDK.
- Przeczytaj artykuł Developer Network Optimize Telemetry with Application Insights (Optymalizowanie telemetrii za pomocą usługi Application Insights).