Udostępnij za pośrednictwem


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

Uwaga

Poniższa dokumentacja opiera się na klasycznym interfejsie API usługi Application Insights. Długoterminowy plan usługi Application Insights polega na zbieraniu danych przy użyciu technologii OpenTelemetry. Aby uzyskać więcej informacji, zobacz Enable Azure Monitor OpenTelemetry for .NET, Node.js, Python and Java applications and our OpenTelemetry Roadmap (Włączanie usługi Azure Monitor OpenTelemetry dla platformy .NET, Node.js, python i Java) oraz our OpenTelemetry Roadmap (Harmonogram działania openTelemetry). Wskazówki dotyczące migracji są dostępne dla platformy .NET, Node.js i języka Python.

Zrzut ekranu przedstawiający opcje konfiguracji próbkowania.

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

W ApplicationInsights.configsystemie 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, , ExceptionEvent, 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, , ExceptionEvent, 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.configprogramu .

Alternatywa: Konfigurowanie próbkowania adaptacyjnego w kodzie

Zamiast ustawiać parametr próbkowania w .config pliku, można programowo ustawić te wartości.

  1. Usuń wszystkie AdaptiveSamplingTelemetryProcessor węzły z .config pliku.

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

  1. Wyłącz próbkowanie adaptacyjne: w ApplicationInsights.configpliku usuń lub oznacz jako komentarz AdaptiveSamplingTelemetryProcessor węzeł.

    <TelemetryProcessors>
        <!-- Disabled adaptive sampling:
        <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
            <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
        </Add>
        -->
    
  2. 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

  1. Wyłączanie próbkowania adaptacyjnego

    Zmiany można wprowadzać po metodzie WebApplication.CreateBuilder() przy użyciu polecenia ApplicationInsightsServiceOptions:

    var builder = WebApplication.CreateBuilder(args);
    
    var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();
    aiOptions.EnableAdaptiveSampling = false;
    builder.Services.AddApplicationInsightsTelemetry(aiOptions);
    
    var app = builder.Build();
    
  2. 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:

W okienku Przegląd aplikacji wybierz pozycję Ustawienia, Limit przydziału, Przykłady, a następnie wybierz częstotliwość próbkowania, a następnie wybierz pozycję Aktualizuj.

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 zawiera Event typ próbkowania, a drugi je wyklucza. Ta konfiguracja ogranicza dane telemetryczne do pięciu Event elementów typu i pięciu elementów wszystkich innych typów połączonych, zapewniając, że Events 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 i IncludedTypes 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 w IncludedTypes 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.xmlaby 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