Campionamento in Application InsightsSampling in Application Insights

Il campionamento è una funzionalità di Azure Application Insights.Sampling is a feature in Azure Application Insights. Si tratta del metodo consigliato per ridurre il traffico di telemetria, i costi dei dati e i costi di archiviazione, mantenendo al tempo stesso un'analisi statisticamente corretta dei dati dell'applicazione.It is the recommended way to reduce telemetry traffic, data costs, and storage costs, while preserving a statistically correct analysis of application data. Il campionamento consente anche di evitare Application Insights la limitazione dei dati di telemetria.Sampling also helps you avoid Application Insights throttling your telemetry. Il filtro di campionamento seleziona gli elementi correlati, in modo che sia possibile spostarsi tra gli elementi quando si eseguono ricerche diagnostiche.The sampling filter selects items that are related, so that you can navigate between items when you are doing diagnostic investigations.

Quando vengono presentati i conteggi delle metriche nel portale, vengono rinormalizzati per tenere conto del campionamento.When metric counts are presented in the portal, they are renormalized to take into account sampling. Questa operazione riduce al minimo gli effetti sulle statistiche.Doing so minimizes any effect on the statistics.

Riepilogo breveBrief summary

  • Sono disponibili tre tipi diversi di campionamento, ovvero il campionamento adattivo, il campionamento a frequenza fissa e il campionamento per inserimento.There are three different types of sampling: adaptive sampling, fixed-rate sampling, and ingestion sampling.
  • Il campionamento adattivo è abilitato per impostazione predefinita in tutte le versioni più recenti del Application Insights ASP.NET e ASP.NET Core SDK (Software Development Kit).Adaptive sampling is enabled by default in all the latest versions of the Application Insights ASP.NET and ASP.NET Core Software Development Kits (SDKs). Viene usato anche da funzioni di Azure.It is also used by Azure Functions.
  • Il campionamento a frequenza fissa è disponibile nelle versioni recenti degli SDK Application Insights per ASP.NET, ASP.NET Core, Java (sia l'agente che l'SDK) e Python.Fixed-rate sampling is available in recent versions of the Application Insights SDKs for ASP.NET, ASP.NET Core, Java (both the agent and the SDK), and Python.
  • Il campionamento di inserimento funziona sull'endpoint del servizio Application Insights.Ingestion sampling works on the Application Insights service endpoint. Si applica solo quando non è attivo alcun altro campionamento.It only applies when no other sampling is in effect. Se l'SDK campiona i dati di telemetria, il campionamento per inserimento è disabilitato.If the SDK samples your telemetry, ingestion sampling is disabled.
  • Per le applicazioni Web, se si registrano eventi personalizzati ed è necessario assicurarsi che un set di eventi venga mantenuto o rimosso insieme, gli eventi devono avere lo stesso OperationId valore.For web applications, if you log custom events and need to ensure that a set of events is retained or discarded together, the events must have the same OperationId value.
  • Se si scrivono query di Dati di analisi, è necessario tener conto del campionamento.If you write Analytics queries, you should take account of sampling. In particolare, anziché eseguire semplicemente il conteggio dei record, è necessario usare summarize sum(itemCount).In particular, instead of simply counting records, you should use summarize sum(itemCount).
  • Alcuni tipi di telemetria, incluse le metriche delle prestazioni e le metriche personalizzate, vengono sempre mantenuti indipendentemente dal fatto che il campionamento sia abilitato o meno.Some telemetry types, including performance metrics and custom metrics, are always kept regardless of whether sampling is enabled or not.

La tabella seguente riepiloga i tipi di campionamento disponibili per ogni SDK e tipo di applicazione:The following table summarizes the sampling types available for each SDK and type of application:

Application Insights SDKApplication Insights SDK Campionamento adattivo supportatoAdaptive sampling supported Supporto del campionamento a frequenza fissaFixed-rate sampling supported Campionamento di inserimento supportatoIngestion sampling supported
ASP.NETASP.NET Sì (attiva per impostazione predefinita)Yes (on by default) Yes Solo se non è attivo alcun altro campionamentoOnly if no other sampling is in effect
ASP.NET CoreASP.NET Core Sì (attiva per impostazione predefinita)Yes (on by default) Yes Solo se non è attivo alcun altro campionamentoOnly if no other sampling is in effect
Funzioni di AzureAzure Functions Sì (attiva per impostazione predefinita)Yes (on by default) NoNo Solo se non è attivo alcun altro campionamentoOnly if no other sampling is in effect
JavaJava NoNo Yes Solo se non è attivo alcun altro campionamentoOnly if no other sampling is in effect
Node.JSNode.JS NoNo Yes Solo se non è attivo alcun altro campionamentoOnly if no other sampling is in effect
PythonPython NoNo Yes Solo se non è attivo alcun altro campionamentoOnly if no other sampling is in effect
Tutti gli altriAll others NoNo NoNo Yes

Nota

Le informazioni nella maggior parte di questa pagina sono valide per le versioni correnti degli SDK Application Insights.The information on most of this page applies to the current versions of the Application Insights SDKs. Per informazioni sulle versioni precedenti degli SDK, vedere la sezione seguente.For information on older versions of the SDKs, see the section below.

Tipi di campionamentoTypes of sampling

Sono disponibili tre diversi metodi di campionamento:There are three different sampling methods:

  • Il campionamento adattivo regola automaticamente il volume dei dati di telemetria inviati dall'SDK nell'app ASP.NET/ASP.NET Core e da funzioni di Azure.Adaptive sampling automatically adjusts the volume of telemetry sent from the SDK in your ASP.NET/ASP.NET Core app, and from Azure Functions. Si tratta del campionamento predefinito quando si usa ASP.NET o ASP.NET Core SDK.This is the default sampling when you use the ASP.NET or ASP.NET Core SDK. Il campionamento adattivo è attualmente disponibile solo per la telemetria lato server di ASP.NET e per funzioni di Azure.Adaptive sampling is currently only available for ASP.NET server-side telemetry, and for Azure Functions.

  • Il campionamento a frequenza fissa riduce il volume dei dati di telemetria inviati dal server ASP.NET o ASP.NET Core o Java e dai browser degli utenti.Fixed-rate sampling reduces the volume of telemetry sent from both your ASP.NET or ASP.NET Core or Java server and from your users' browsers. È necessario impostare la frequenza.You set the rate. Il client e il server sincronizzeranno il rispettivo campionamento in modo che nella ricerca sia possibile spostarsi tra le visualizzazioni pagina e le richieste correlate.The client and server will synchronize their sampling so that, in Search, you can navigate between related page views and requests.

  • Il campionamento di inserimento si verifica in corrispondenza dell'endpoint del servizio Application Insights.Ingestion sampling happens at the Application Insights service endpoint. Rimuove alcuni dati di telemetria provenienti dall'app, a una velocità di campionamento impostata.It discards some of the telemetry that arrives from your app, at a sampling rate that you set. Non riduce il traffico di telemetria inviato dall'app, ma consente all'utente di rispettare la quota mensile.It doesn't reduce telemetry traffic sent from your app, but helps you keep within your monthly quota. Il vantaggio principale del campionamento per inserimento è che è possibile impostare la frequenza di campionamento senza ridistribuire l'app.The main advantage of ingestion sampling is that you can set the sampling rate without redeploying your app. Il campionamento di inserimento funziona in modo uniforme per tutti i server e i client, ma non si applica quando sono in esecuzione altri tipi di campionamento.Ingestion sampling works uniformly for all servers and clients, but it does not apply when any other types of sampling are in operation.

Importante

Se sono in esecuzione metodi di campionamento a frequenza fissa o adattiva, il campionamento per inserimento è disabilitato.If adaptive or fixed rate sampling methods are in operation, ingestion sampling is disabled.

Campionamento adattivoAdaptive sampling

Il campionamento adattivo riguarda il volume dei dati di telemetria inviati dall'app del server Web all'endpoint del servizio Application Insights.Adaptive sampling affects the volume of telemetry sent from your web server app to the Application Insights service endpoint.

Suggerimento

Il campionamento adattivo è abilitato per impostazione predefinita quando si usa ASP.NET SDK o ASP.NET Core SDK ed è abilitato per impostazione predefinita anche per le funzioni di Azure.Adaptive sampling is enabled by default when you use the ASP.NET SDK or the ASP.NET Core SDK, and is also enabled by default for Azure Functions.

Il volume viene regolato automaticamente per rimanere entro una frequenza massima specificata di traffico e viene controllato tramite l'impostazione MaxTelemetryItemsPerSecond .The volume is adjusted automatically to keep within a specified maximum rate of traffic, and is controlled via the setting MaxTelemetryItemsPerSecond. Se l'applicazione produce una quantità ridotta di dati di telemetria, ad esempio durante il debug o a causa di un utilizzo ridotto, gli elementi non verranno eliminati dal processore di campionamento purché il volume sia inferiore MaxTelemetryItemsPerSecond .If the application produces a low amount of telemetry, such as when debugging or due to low usage, items won't be dropped by the sampling processor as long as volume is below MaxTelemetryItemsPerSecond. Man mano che aumenta il volume dei dati di telemetria, la frequenza di campionamento viene regolata in modo da ottenere il volume di destinazione.As the volume of telemetry increases, the sampling rate is adjusted so as to achieve the target volume. La rettifica viene ricalcolata a intervalli regolari e si basa su una media mobile della frequenza di trasmissione in uscita.The adjustment is recalculated at regular intervals, and is based on a moving average of the outgoing transmission rate.

Per ottenere il volume di destinazione, alcuni dei dati di telemetria generati vengono eliminati.To achieve the target volume, some of the generated telemetry is discarded. Tuttavia, come in altri tipi di campionamento, l'algoritmo consente di mantenere gli elementi di telemetria correlati.But like other types of sampling, the algorithm retains related telemetry items. Ad esempio, quando si controllano i dati di telemetria nella ricerca, sarà possibile trovare la richiesta correlata a una particolare eccezione.For example, when you're inspecting the telemetry in Search, you'll be able to find the request related to a particular exception.

I conteggi di metrica, ad esempio la frequenza delle richieste e delle eccezioni, vengono adattati per compensare la frequenza di campionamento, in modo che mostrino i valori corretti in Esplora metriche.Metric counts such as request rate and exception rate are adjusted to compensate for the sampling rate, so that they show approximately correct values in Metric Explorer.

Configurazione del campionamento adattivo per le applicazioni ASP.NETConfiguring adaptive sampling for ASP.NET applications

Nota

Questa sezione è valida per le applicazioni ASP.NET, non per ASP.NET Core applicazioni.This section applies to ASP.NET applications, not to ASP.NET Core applications. Informazioni sulla configurazione del campionamento adattivo per applicazioni ASP.NET Core più avanti in questo documento.Learn about configuring adaptive sampling for ASP.NET Core applications later in this document.

In ApplicationInsights.config è possibile modificare diversi parametri nel AdaptiveSamplingTelemetryProcessor nodo.In ApplicationInsights.config, you can adjust several parameters in the AdaptiveSamplingTelemetryProcessor node. Le cifre indicate sono i valori predefiniti:The figures shown are the default values:

  • <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>

    Frequenza di destinazione delle operazioni logiche che l'algoritmo adattivo intende raccogliere in ogni host server.The target rate of logical operations that the adaptive algorithm aims to collect on each server host. Se l'app Web viene eseguita su più host, ridurre questo valore per non superare la frequenza di destinazione del traffico nel portale di Application Insights.If your web app runs on many hosts, reduce this value so as to remain within your target rate of traffic at the Application Insights portal.

  • <EvaluationInterval>00:00:15</EvaluationInterval>

    Intervallo in corrispondenza del quale viene rivalutata la frequenza corrente dei dati di telemetria.The interval at which the current rate of telemetry is reevaluated. La valutazione viene eseguita come media mobile.Evaluation is performed as a moving average. Potrebbe essere necessario ridurre questo intervallo se la telemetria è responsabile di burst improvvisi.You might want to shorten this interval if your telemetry is liable to sudden bursts.

  • <SamplingPercentageDecreaseTimeout>00:02:00</SamplingPercentageDecreaseTimeout>

    Quando viene modificato il valore della percentuale di campionamento, dopo quanto tempo è consentito ridurre nuovamente la percentuale di campionamento per acquisire meno dati?When sampling percentage value changes, how soon after are we allowed to lower the sampling percentage again to capture less data?

  • <SamplingPercentageIncreaseTimeout>00:15:00</SamplingPercentageIncreaseTimeout>

    Quando viene modificato il valore della percentuale di campionamento, dopo quanto tempo è possibile aumentare nuovamente la percentuale di campionamento per acquisire più dati?When sampling percentage value changes, how soon after are we allowed to increase the sampling percentage again to capture more data?

  • <MinSamplingPercentage>0.1</MinSamplingPercentage>

    Quando la percentuale di campionamento varia, qual è il valore minimo che è consentito impostare?As sampling percentage varies, what is the minimum value we're allowed to set?

  • <MaxSamplingPercentage>100.0</MaxSamplingPercentage>

    Quando la percentuale di campionamento varia, qual è il valore massimo che è consentito impostare?As sampling percentage varies, what is the maximum value we're allowed to set?

  • <MovingAverageRatio>0.25</MovingAverageRatio>

    Nel calcolo della media mobili, specifica il peso da assegnare al valore più recente.In the calculation of the moving average, this specifies the weight that should be assigned to the most recent value. Usare un valore uguale o inferiore a 1.Use a value equal to or less than 1. I valori più bassi rendono l'algoritmo meno reattivo alle modifiche improvvise.Smaller values make the algorithm less reactive to sudden changes.

  • <InitialSamplingPercentage>100</InitialSamplingPercentage>

    Quantità di dati di telemetria da campionare quando l'app è stata appena avviata.The amount of telemetry to sample when the app has just started. Non ridurre questo valore durante il debug.Don't reduce this value while you're debugging.

  • <ExcludedTypes>Trace;Exception</ExcludedTypes>

    Elenco delimitato da punti e virgola di tipi che non si desidera sottoporre al campionamento.A semi-colon delimited list of types that you do not want to be subject to sampling. I tipi riconosciuti sono: Dependency ,, Event Exception , PageView , Request , Trace .Recognized types are: Dependency, Event, Exception, PageView, Request, Trace. Vengono trasmessi tutti i dati di telemetria dei tipi specificati; i tipi non specificati verranno campionati.All telemetry of the specified types is transmitted; the types that are not specified will be sampled.

  • <IncludedTypes>Request;Dependency</IncludedTypes>

    Elenco delimitato da punti e virgola di tipi che si desidera sottoporre al campionamento.A semi-colon delimited list of types that you do want to subject to sampling. I tipi riconosciuti sono: Dependency ,, Event Exception , PageView , Request , Trace .Recognized types are: Dependency, Event, Exception, PageView, Request, Trace. I tipi specificati verranno campionati; tutti i dati di telemetria degli altri tipi verranno sempre trasmessi.The specified types will be sampled; all telemetry of the other types will always be transmitted.

Per disattivare il campionamento adattivo, rimuovere il AdaptiveSamplingTelemetryProcessor nodo o i nodi da ApplicationInsights.config .To switch off adaptive sampling, remove the AdaptiveSamplingTelemetryProcessor node(s) from ApplicationInsights.config.

Alternativa: configurare il campionamento adattivo nel codiceAlternative: Configure adaptive sampling in code

Invece di impostare il parametro di campionamento nel .config file, è possibile impostare questi valori a livello di codice.Instead of setting the sampling parameter in the .config file, you can programmatically set these values.

  1. Rimuovere tutti i AdaptiveSamplingTelemetryProcessor nodi dal .config file.Remove all the AdaptiveSamplingTelemetryProcessor node(s) from the .config file.

  2. Usare il frammento di codice seguente per configurare il campionamento adattivo:Use the following snippet to configure adaptive sampling:

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

    (Informazioni sui processori di telemetria.)(Learn about telemetry processors.)

È anche possibile regolare la frequenza di campionamento per ogni tipo di telemetria singolarmente oppure escludere determinati tipi dall'esempio:You can also adjust the sampling rate for each telemetry type individually, or can even exclude certain types from being sampled at all:

// 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");

Configurazione del campionamento adattivo per applicazioni ASP.NET CoreConfiguring adaptive sampling for ASP.NET Core applications

Non esiste alcuna ApplicationInsights.config per ASP.NET Core applicazioni, quindi tutte le operazioni di configurazione vengono eseguite tramite codice.There is no ApplicationInsights.config for ASP.NET Core applications, so all configuration is done via code. Il campionamento adattivo è abilitato per impostazione predefinita in tutte le applicazioni ASP.NET Core,Adaptive sampling is enabled by default for all ASP.NET Core applications. ma può essere disabilitato o è possibile personalizzarne il comportamento.You can disable or customize the sampling behavior.

Disattivazione del campionamento adattivoTurning off adaptive sampling

La funzionalità di campionamento predefinita può essere disabilitata durante l'aggiunta Application Insights servizio nel metodo ConfigureServices usando ApplicationInsightsServiceOptions all'interno del Startup.cs file:The default sampling feature can be disabled while adding Application Insights service, in the method ConfigureServices, using ApplicationInsightsServiceOptions within the Startup.cs file:

public void ConfigureServices(IServiceCollection services)
{
    // ...

    var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();
    aiOptions.EnableAdaptiveSampling = false;
    services.AddApplicationInsightsTelemetry(aiOptions);

    //...
}

Il codice precedente Disabilita il campionamento adattivo.The above code will disable adaptive sampling. Seguire la procedura descritta di seguito per aggiungere al campionamento più opzioni di personalizzazione.Follow the steps below to add sampling with more customization options.

Configurare le impostazioni di campionamentoConfigure sampling settings

Usare i metodi di estensione di TelemetryProcessorChainBuilder, come illustrato di seguito, per personalizzare il comportamento della funzionalità di campionamento.Use extension methods of TelemetryProcessorChainBuilder as shown below to customize sampling behavior.

Importante

Se si usa questo metodo per configurare il campionamento, assicurarsi di impostare la aiOptions.EnableAdaptiveSampling proprietà su false quando si chiama AddApplicationInsightsTelemetry() .If you use this method to configure sampling, please make sure to set the aiOptions.EnableAdaptiveSampling property to false when calling AddApplicationInsightsTelemetry().

using Microsoft.ApplicationInsights.Extensibility

public void Configure(IApplicationBuilder app, IHostingEnvironment env, TelemetryConfiguration configuration)
{
    var builder = configuration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
    // For older versions of the Application Insights SDK, use the following line instead:
    // var builder = configuration.TelemetryProcessorChainBuilder;

    // Using adaptive sampling
    builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5);

    // Alternately, the following configures adaptive sampling with 5 items per second, and also excludes DependencyTelemetry from being subject to sampling.
    // builder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");

    // If you have other telemetry processors:
    builder.Use((next) => new AnotherProcessor(next));
    
    builder.Build();

    // ...
}

Configurazione del campionamento adattivo per funzioni di AzureConfiguring adaptive sampling for Azure Functions

Seguire le istruzioni disponibili in Questa pagina per configurare il campionamento adattivo per le app in esecuzione in funzioni di Azure.Follow instructions from this page to configure adaptive sampling for apps running in Azure Functions.

Campionamento a frequenza fissaFixed-rate sampling

Il campionamento a frequenza fissa riduce il traffico inviato dal server Web e dai Web browser.Fixed-rate sampling reduces the traffic sent from your web server and web browsers. A differenza del campionamento adattivo, riduce i dati di telemetria a una frequenza fissa definita dall'utente.Unlike adaptive sampling, it reduces telemetry at a fixed rate decided by you. È disponibile il campionamento a frequenza fissa per le applicazioni ASP.NET, ASP.NET Core, Java e Python.Fixed-rate sampling is available for ASP.NET, ASP.NET Core, Java and Python applications.

Analogamente ad altre tecniche di campionamento, questo mantiene anche gli elementi correlati.Like other sampling techniques, this also retains related items. Sincronizza inoltre il campionamento del client e del server in modo che gli elementi correlati vengano conservati, ad esempio quando si esamina una visualizzazione pagina nella ricerca, è possibile trovare le richieste server correlate.It also synchronizes the client and server sampling so that related items are retained - for example, when you look at a page view in Search, you can find its related server requests.

In Esplora metriche, frequenze quali il numero di richieste ed eccezioni vengono moltiplicate per un fattore in modo da compensare la frequenza di campionamento ed essere quindi corretti.In Metrics Explorer, rates such as request and exception counts are multiplied by a factor to compensate for the sampling rate, so that they are approximately correct.

Configurazione del campionamento a frequenza fissa per le applicazioni ASP.NETConfiguring fixed-rate sampling for ASP.NET applications

  1. Disabilitare il campionamento adattivo: in ApplicationInsights.config rimuovere o impostare come commento il AdaptiveSamplingTelemetryProcessor nodo.Disable adaptive sampling: In ApplicationInsights.config, remove or comment out the AdaptiveSamplingTelemetryProcessor node.

    <TelemetryProcessors>
        <!-- Disabled adaptive sampling:
        <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
            <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
        </Add>
        -->
    
  2. Abilitare il modulo di campionamento a frequenza fissa.Enable the fixed-rate sampling module. Aggiungere questo frammento a ApplicationInsights.config :Add this snippet to ApplicationInsights.config:

    <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>10</SamplingPercentage>
        </Add>
    </TelemetryProcessors>
    

    In alternativa, invece di impostare il parametro di campionamento nel ApplicationInsights.config file, è possibile impostare questi valori a livello di codice:Alternatively, instead of setting the sampling parameter in the ApplicationInsights.config file, you can programmatically set these values:

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

    (Informazioni sui processori di telemetria.)(Learn about telemetry processors.)

Configurazione del campionamento a frequenza fissa per applicazioni ASP.NET CoreConfiguring fixed-rate sampling for ASP.NET Core applications

  1. Disabilitare il campionamento adattivo: le modifiche possono essere apportate nel ConfigureServices Metodo usando ApplicationInsightsServiceOptions :Disable adaptive sampling: Changes can be made in the ConfigureServices method, using ApplicationInsightsServiceOptions:

    public void ConfigureServices(IServiceCollection services)
    {
        // ...
    
        var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();
        aiOptions.EnableAdaptiveSampling = false;
        services.AddApplicationInsightsTelemetry(aiOptions);
    
        //...
    }
    
  2. Abilitare il modulo di campionamento a frequenza fissa.Enable the fixed-rate sampling module. Le modifiche possono essere apportate nel Configure metodo, come illustrato nel frammento di codice seguente:Changes can be made in the Configure method as shown in the below snippet:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        var configuration = app.ApplicationServices.GetService<TelemetryConfiguration>();
    
        var builder = configuration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
        // For older versions of the Application Insights SDK, use the following line instead:
        // var builder = TelemetryConfiguration.Active.TelemetryProcessorChainBuilder;
    
        // Using fixed rate sampling   
        double fixedSamplingPercentage = 10;
        builder.UseSampling(fixedSamplingPercentage);
    
        builder.Build();
    
        // ...
    }
    

Configurazione del campionamento a frequenza fissa per le applicazioni JavaConfiguring fixed-rate sampling for Java applications

Per impostazione predefinita, nessun campionamento è abilitato nell'agente Java e nell'SDK.By default no sampling is enabled in the Java agent and SDK. Attualmente supporta solo il campionamento a frequenza fissa.Currently it only supports fixed rate sampling. Il campionamento adattivo non è supportato in Java.Adaptive sampling is not supported in Java.

Configurazione dell'agente JavaConfiguring Java Agent

  1. Scaricare applicationinsights-Agent-3.0.0-Preview. 5. jarDownload applicationinsights-agent-3.0.0-PREVIEW.5.jar

  2. Per abilitare il campionamento, aggiungere il codice seguente al ApplicationInsights.json file:To enable sampling add the following to your ApplicationInsights.json file:

{
  "instrumentationSettings": {
    "preview": {
      "sampling": {
        "fixedRate": {
          "percentage": 10 //this is just an example that shows you how to enable only only 10% of transaction 
        }
      }
    }
  }
}

Configurazione di Java SDKConfiguring Java SDK

  1. Scaricare e configurare l'applicazione Web con la versione più recente di Application Insights Java SDK.Download and configure your web application with the latest Application Insights Java SDK.

  2. Per abilitare il modulo di campionamento a frequenza fissa , aggiungere il frammento di codice seguente al ApplicationInsights.xml file:Enable the fixed-rate sampling module by adding the following snippet to ApplicationInsights.xml file:

    <TelemetryProcessors>
        <BuiltInProcessors>
            <Processor type="FixedRateSamplingTelemetryProcessor">
                <!-- 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) -->
                <Add name="SamplingPercentage" value="50" />
            </Processor>
        </BuiltInProcessors>
    </TelemetryProcessors>
    
  3. È possibile includere o escludere tipi specifici di dati di telemetria dal campionamento usando i tag seguenti all'interno del Processor tag FixedRateSamplingTelemetryProcessor :You can include or exclude specific types of telemetry from sampling using the following tags inside the Processor tag's FixedRateSamplingTelemetryProcessor:

    <ExcludedTypes>
        <ExcludedType>Request</ExcludedType>
    </ExcludedTypes>
    
    <IncludedTypes>
        <IncludedType>Exception</IncludedType>
    </IncludedTypes>
    

I tipi di dati di telemetria che possono essere inclusi o esclusi dal campionamento sono: Dependency ,, Event Exception , PageView , Request e Trace .The telemetry types that can be included or excluded from sampling are: Dependency, Event, Exception, PageView, Request, and Trace.

Nota

Come percentuale di campionamento, sceglierne una vicina a 100/N dove N è un numero intero.For the sampling percentage, choose a percentage that is close to 100/N where N is an integer. Il campionamento attualmente non supporta altri valori.Currently sampling doesn't support other values.

Configurazione del campionamento a frequenza fissa per le applicazioni Python OpenCensusConfiguring fixed-rate sampling for OpenCensus Python applications

Instrumentare l'applicazione con le più recenti utilità di esportazione di monitoraggio di Azure OpenCensus.Instrument your application with the latest OpenCensus Azure Monitor exporters.

Nota

Il campionamento a frequenza fissa non è disponibile per l'esportatore di metriche.Fixed-rate sampling is not available for the metrics exporter. Ciò significa che le metriche personalizzate sono gli unici tipi di dati di telemetria in cui non è possibile configurare il campionamento.This means custom metrics are the only types of telemetry where sampling can NOT be configured. L'esportatore di metriche invierà tutti i dati di telemetria che tiene traccia.The metrics exporter will send all telemetry that it tracks.

Campionamento a frequenza fissa per la tracciaFixed-rate sampling for tracing

È possibile specificare un sampler come parte della configurazione Tracer.You may specify a sampler as part of your Tracer configuration. Se non viene fornito alcun campionatore esplicito, ProbabilitySampler verrà utilizzato per impostazione predefinita.If no explicit sampler is provided, the ProbabilitySampler will be used by default. ProbabilitySamplerPer impostazione predefinita, utilizzerà una frequenza di 1/10000, ovvero una di ogni 10000 richieste verrà inviata a Application Insights.The ProbabilitySampler would use a rate of 1/10000 by default, meaning one out of every 10000 requests will be sent to Application Insights. Se si desidera specificare una frequenza di campionamento, vedere di seguito.If you want to specify a sampling rate, see below.

Per specificare la frequenza di campionamento, assicurarsi che Tracer specifichi un campionatore con una frequenza di campionamento compresa tra 0,0 e 1,0 inclusi.To specify the sampling rate, make sure your Tracer specifies a sampler with a sampling rate between 0.0 and 1.0 inclusive. Una frequenza di campionamento di 1,0 rappresenta il 100%, vale a dire che tutte le richieste verranno inviate come dati di telemetria a Application Insights.A sampling rate of 1.0 represents 100%, meaning all of your requests will be sent as telemetry to Application Insights.

tracer = Tracer(
    exporter=AzureExporter(
        instrumentation_key='00000000-0000-0000-0000-000000000000',
    ),
    sampler=ProbabilitySampler(1.0),
)

Campionamento a frequenza fissa per i logFixed-rate sampling for logs

È possibile configurare il campionamento a frequenza fissa per AzureLogHandler modificando l' logging_sampling_rate argomento facoltativo.You can configure fixed-rate sampling for AzureLogHandler by modifying the logging_sampling_rate optional argument. Se non viene fornito alcun argomento, verrà usata una frequenza di campionamento pari a 1,0.If no argument is supplied, a sampling rate of 1.0 will be used. Una frequenza di campionamento di 1,0 rappresenta il 100%, vale a dire che tutte le richieste verranno inviate come dati di telemetria a Application Insights.A sampling rate of 1.0 represents 100%, meaning all of your requests will be sent as telemetry to Application Insights.

handler = AzureLogHandler(
    instrumentation_key='00000000-0000-0000-0000-000000000000',
    logging_sampling_rate=0.5,
)

Configurazione del campionamento a frequenza fissa per le pagine Web con JavaScriptConfiguring fixed-rate sampling for web pages with JavaScript

Le pagine Web basate su JavaScript possono essere configurate per usare Application Insights.JavaScript-based web pages can be configured to use Application Insights. I dati di telemetria vengono inviati dall'applicazione client in esecuzione nel browser dell'utente e le pagine possono essere ospitate da qualsiasi server.Telemetry is sent from the client application running within the user's browser, and the pages can be hosted from any server.

Quando si configurano le pagine Web basate su JavaScript per Application Insights, modificare il frammento di codice JavaScript ottenuto dal portale di Application Insights.When you configure your JavaScript-based web pages for Application Insights, modify the JavaScript snippet that you get from the Application Insights portal.

Suggerimento

Nelle app ASP.NET con JavaScript incluso, il frammento viene in genere inserito _Layout.cshtml .In ASP.NET apps with JavaScript included, the snippet typically goes in _Layout.cshtml.

Inserire una riga simile a samplingPercentage: 10, prima della chiave di strumentazione:Insert a line like samplingPercentage: 10, before the instrumentation key:

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

Come percentuale di campionamento, sceglierne una vicina a 100/N dove N è un numero intero.For the sampling percentage, choose a percentage that is close to 100/N where N is an integer. Il campionamento attualmente non supporta altri valori.Currently sampling doesn't support other values.

Coordinamento del campionamento lato server e lato clientCoordinating server-side and client-side sampling

L'SDK JavaScript sul lato client fa parte del campionamento a frequenza fissa in combinazione con l'SDK lato server.The client-side JavaScript SDK participates in fixed-rate sampling in conjunction with the server-side SDK. Le pagine instrumentate invieranno i dati di telemetria lato client solo dallo stesso utente per il quale l'SDK lato server ha deciso di includere nel campionamento.The instrumented pages will only send client-side telemetry from the same user for which the server-side SDK made its decision to include in the sampling. Questa logica è progettata per mantenere l'integrità delle sessioni utente nelle applicazioni lato client e lato server.This logic is designed to maintain the integrity of user sessions across client- and server-side applications. Di conseguenza, da un particolare elemento di telemetria in Application Insights è possibile trovare tutti gli altri elementi di telemetria per questo utente o sessione e nella ricerca, è possibile spostarsi tra le visualizzazioni pagina e le richieste correlate.As a result, from any particular telemetry item in Application Insights you can find all other telemetry items for this user or session and in Search, you can navigate between related page views and requests.

Se i dati di telemetria lato client e server non mostrano esempi coordinati:If your client and server-side telemetry don't show coordinated samples:

  • Verificare che sia stato abilitato il campionamento sia nel server che nel client.Verify that you enabled sampling both on the server and client.
  • Controllare di avere impostato la stessa percentuale di campionamento sia nel client che nel server.Check that you set the same sampling percentage in both the client and server.
  • Assicurarsi che la versione dell'SDK sia 2.0 o successiva.Make sure that the SDK version is 2.0 or above.

Campionamento per inserimentoIngestion sampling

Il campionamento di inserimento opera nel punto in cui i dati di telemetria del server Web, dei browser e dei dispositivi raggiungono l'endpoint del servizio Application Insights.Ingestion sampling operates at the point where the telemetry from your web server, browsers, and devices reaches the Application Insights service endpoint. Anche se non riduce il traffico dei dati di telemetria inviato dall'app, riduce la quantità di dati elaborati, conservati e addebitati da Application Insights.Although it doesn't reduce the telemetry traffic sent from your app, it does reduce the amount processed and retained (and charged for) by Application Insights.

Usare questo tipo di campionamento se l'app spesso supera la quota mensile e non si ha la possibilità di usare uno dei tipi di campionamento basati sull'SDK.Use this type of sampling if your app often goes over its monthly quota and you don't have the option of using either of the SDK-based types of sampling.

Impostare la frequenza di campionamento nella pagina Utilizzo e costi stimati:Set the sampling rate in the Usage and estimated costs page:

Nel pannello Panoramica dell'applicazione fare clic su impostazioni, quota, esempi, quindi selezionare una frequenza di campionamento e fare clic su Aggiorna.

Come in altri tipi di campionamento, l'algoritmo consente di mantenere gli elementi di telemetria correlati.Like other types of sampling, the algorithm retains related telemetry items. Ad esempio, quando si controllano i dati di telemetria nella ricerca, sarà possibile trovare la richiesta correlata a una particolare eccezione.For example, when you're inspecting the telemetry in Search, you'll be able to find the request related to a particular exception. I conteggi di metrica, ad esempio la frequenza delle richieste e delle eccezioni, vengono mantenuti correttamente.Metric counts such as request rate and exception rate are correctly retained.

I punti dati che vengono rimossi dal campionamento non sono disponibili in alcuna funzionalità di Application Insights, ad esempio nell' esportazione continua.Data points that are discarded by sampling are not available in any Application Insights feature such as Continuous Export.

Il campionamento di inserimento non funziona mentre è in esecuzione il campionamento adattivo o a frequenza fissa.Ingestion sampling doesn't operate while adaptive or fixed-rate sampling is in operation. Il campionamento adattivo è abilitato per impostazione predefinita quando si usa ASP.NET SDK o ASP.NET Core SDK oppure quando Application Insights è abilitato nel servizio app Azure o usando status monitor.Adaptive sampling is enabled by default when the ASP.NET SDK or the ASP.NET Core SDK is being used, or when Application Insights is enabled in Azure App Service or by using Status Monitor. Quando l'endpoint del servizio Application Insights riceve i dati di telemetria, esamina i dati di telemetria e se la frequenza di campionamento viene segnalata come inferiore al 100% (che indica che la telemetria viene campionata), la frequenza di campionamento di inserimento impostata viene ignorata.When telemetry is received by the Application Insights service endpoint, it examines the telemetry and if the sampling rate is reported to be less than 100% (which indicates that telemetry is being sampled) then the ingestion sampling rate that you set is ignored.

Avviso

Il valore visualizzato nel riquadro del portale indica il valore impostato per il campionamento di inserimento.The value shown on the portal tile indicates the value that you set for ingestion sampling. Non rappresenta la frequenza di campionamento effettiva se è in esecuzione un qualsiasi tipo di campionamento SDK (campionamento adattivo o a frequenza fissa).It doesn't represent the actual sampling rate if any sort of SDK sampling (adaptive or fixed-rate sampling) is in operation.

Quando usare il campionamentoWhen to use sampling

In generale, per la maggior parte delle applicazioni di piccole e medie dimensioni non è necessario il campionamento.In general, for most small and medium size applications you don't need sampling. Le informazioni di diagnostica più utili e le statistiche più accurate si ottengono raccogliendo dati su tutte le attività utente.The most useful diagnostic information and most accurate statistics are obtained by collecting data on all your user activities.

I vantaggi principali del campionamento sono:The main advantages of sampling are:

  • Application Insights servizio Elimina i punti dati ("limitazioni") quando l'app invia una frequenza molto elevata di dati di telemetria in un intervallo di tempo breve.Application Insights service drops ("throttles") data points when your app sends a very high rate of telemetry in a short time interval. Il campionamento riduce la probabilità che l'applicazione visualizzi la limitazione delle richieste.Sampling reduces the likelihood that your application will see throttling occur.
  • Non superare la quota di punti dati per il proprio piano tariffario.To keep within the quota of data points for your pricing tier.
  • Ridurre il traffico di rete dalla raccolta di telemetria.To reduce network traffic from the collection of telemetry.

Quale tipo di campionamento è opportuno usare?Which type of sampling should I use?

Usare il campionamento per inserimento se:Use ingestion sampling if:

  • Spesso si usa la quota mensile dei dati di telemetria.You often use your monthly quota of telemetry.
  • Si stanno ottenendo troppi dati di telemetria dai Web browser degli utenti.You're getting too much telemetry from your users' web browsers.
  • Si usa una versione dell'SDK che non supporta il campionamento, ad esempio le versioni di ASP.NET precedenti alla 2.You're using a version of the SDK that doesn't support sampling - for example ASP.NET versions earlier than 2.

Usare il campionamento a frequenza fissa se:Use fixed-rate sampling if:

  • Si vuole eseguire il campionamento sincronizzato tra client e server in modo che, durante l'analisi degli eventi nella ricerca, sia possibile spostarsi tra gli eventi correlati nel client e nel server, ad esempio le visualizzazioni pagina e le richieste HTTP.You want synchronized sampling between client and server so that, when you're investigating events in Search, you can navigate between related events on the client and server, such as page views and HTTP requests.
  • Se è certi della percentuale di campionamento appropriata per l'app.You are confident of the appropriate sampling percentage for your app. Deve essere abbastanza elevata da ottenere metriche accurate, ma al di sotto della frequenza che fa superare la quota di prezzo e le soglie di limitazione.It should be high enough to get accurate metrics, but below the rate that exceeds your pricing quota and the throttling limits.

Usare il campionamento adattivo:Use adaptive sampling:

Se le condizioni per l'uso di altre forme di campionamento non sono valide per uno scenario specifico, è consigliabile adottare il campionamento adattativo.If the conditions to use the other forms of sampling do not apply, we recommend adaptive sampling. Questa impostazione è abilitata per impostazione predefinita in ASP.NET/ASP.NET Core SDK.This setting is enabled by default in the ASP.NET/ASP.NET Core SDK. Non ridurrà il traffico fino a quando non viene raggiunta una determinata frequenza minima, quindi i siti con utilizzo ridotto probabilmente non verranno campionati.It will not reduce traffic until a certain minimum rate is reached, therefore low-use sites will probably not be sampled at all.

Sapere se il campionamento è in esecuzioneKnowing whether sampling is in operation

Per individuare la frequenza di campionamento effettiva indipendentemente dal punto in cui è stata applicata, usare una query di Analisi simile alla seguente:To discover the actual sampling rate no matter where it has been applied, use an Analytics query such as this:

union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > ago(1d)
| summarize RetainedPercentage = 100/avg(itemCount) by bin(timestamp, 1h), itemType

Se si nota che RetainedPercentage per qualsiasi tipo è minore di 100, viene campionato tale tipo di dati di telemetria.If you see that RetainedPercentage for any type is less than 100, then that type of telemetry is being sampled.

Importante

Application Insights non campiona la sessione, le metriche (incluse le metriche personalizzate) o i tipi di telemetria dei contatori delle prestazioni in una delle tecniche di campionamento.Application Insights does not sample session, metrics (including custom metrics), or performance counter telemetry types in any of the sampling techniques. Questi tipi sono sempre esclusi dal campionamento poiché una riduzione della precisione può essere estremamente indesiderata per questi tipi di telemetria.These types are always excluded from sampling as a reduction in precision can be highly undesirable for these telemetry types.

Funzionamento del campionamentoHow sampling works

L'algoritmo di campionamento decide gli elementi di telemetria da eliminare e quelli da contenere.The sampling algorithm decides which telemetry items to drop, and which ones to keep. Questo vale se il campionamento viene eseguito dall'SDK o nel servizio Application Insights.This is true whether sampling is done by the SDK or in the Application Insights service. La decisione sul campionamento si basa su alcune regole che hanno lo scopo di lasciare intatti tutti i punti dati correlati, mantenendo in Application Insights un'esperienza di diagnostica sfruttabile e affidabile anche con un set di dati ridotto.The sampling decision is based on several rules that aim to preserve all interrelated data points intact, maintaining a diagnostic experience in Application Insights that is actionable and reliable even with a reduced data set. Ad esempio, se l'app ha una richiesta non riuscita inclusa in un esempio, verranno conservati gli elementi di telemetria aggiuntivi, ad esempio l'eccezione e le tracce registrate per questa richiesta.For example, if your app has a failed request included in a sample, the additional telemetry items (such as exception and traces logged for this request) will be retained. Il campionamento li mantiene o li rilascia tutti insieme.Sampling either keeps or drops them all together. Di conseguenza, quando si osservano i dettagli della richiesta in Application Insights, è sempre possibile visualizzare la richiesta con gli elementi di telemetria associati.As a result, when you look at the request details in Application Insights, you can always see the request along with its associated telemetry items.

La decisione di campionamento è basata sull'ID operazione della richiesta, il che significa che tutti gli elementi di telemetria appartenenti a una determinata operazione vengono conservati o eliminati.The sampling decision is based on the operation ID of the request, which means that all telemetry items belonging to a particular operation is either preserved or dropped. Per gli elementi di telemetria che non hanno un set di ID operazione, ad esempio gli elementi di telemetria segnalati da thread asincroni senza contesto HTTP, il campionamento acquisisce semplicemente una percentuale di elementi di telemetria di ogni tipo.For the telemetry items that do not have an operation ID set (such as telemetry items reported from asynchronous threads with no HTTP context) sampling simply captures a percentage of telemetry items of each type.

Quando la telemetria viene ripresentata all'utente, il servizio Application Insights modifica le metriche in base alla stessa percentuale di campionamento usata in fase di raccolta, per compensare i punti dati mancanti.When presenting telemetry back to you, the Application Insights service adjusts the metrics by the same sampling percentage that was used at the time of collection, to compensate for the missing data points. Quindi, quando osservano la telemetria in Application Insights, gli utenti visualizzano approssimazioni statisticamente corrette molto vicine ai numeri reali.Hence, when looking at the telemetry in Application Insights, the users are seeing statistically correct approximations that are very close to the real numbers.

La precisione dell'approssimazione dipende in gran parte dalla percentuale di campionamento configurata.The accuracy of the approximation largely depends on the configured sampling percentage. La precisione è anche maggiore per le applicazioni che gestiscono un volume elevato di richieste generalmente simili da una grande quantità di utenti.Also, the accuracy increases for applications that handle a large volume of generally similar requests from lots of users. Per le applicazioni che non gestiscono un carico di lavoro significativo, invece, il campionamento non è necessario perché queste applicazioni in genere riescono a inviare tutti i dati di telemetria senza superare la quota e senza causare perdite di dati dovute alla limitazione.On the other hand, for applications that don't work with a significant load, sampling is not needed as these applications can usually send all their telemetry while staying within the quota, without causing data loss from throttling.

Domande frequentiFrequently asked questions

Qual è il comportamento di campionamento predefinito in ASP.NET e ASP.NET Core SDK?What is the default sampling behavior in the ASP.NET and ASP.NET Core SDKs?

  • Se si usa una delle versioni più recenti dell'SDK precedente, il campionamento adattivo è abilitato per impostazione predefinita con cinque elementi di telemetria al secondo.If you are using one of the latest versions of the above SDK, Adaptive Sampling is enabled by default with five telemetry items per second. Sono presenti due AdaptiveSamplingTelemetryProcessor nodi aggiunti per impostazione predefinita e uno include il Event tipo in campionamento, mentre l'altro esclude il Event tipo dal campionamento.There are two AdaptiveSamplingTelemetryProcessor nodes added by default, and one includes the Event type in sampling, while the other excludes the Event type from sampling. Questa configurazione significa che l'SDK tenterà di limitare gli elementi di telemetria a cinque elementi di telemetria di Event tipi e cinque elementi di telemetria di tutti gli altri tipi combinati, garantendo così che Events vengano campionati separatamente da altri tipi di dati di telemetria.This configuration means that the SDK will try to limit telemetry items to five telemetry items of Event types, and five telemetry items of all other types combined, thereby ensuring that Events are sampled separately from other telemetry types. Gli eventi vengono in genere usati per la telemetria aziendale e probabilmente non dovrebbero essere interessati dai volumi di telemetria di diagnostica.Events are typically used for business telemetry, and most likely should not be affected by diagnostic telemetry volumes.

    Di seguito viene illustrato il ApplicationInsights.config file predefinito generato.The following shows the default ApplicationInsights.config file generated. In ASP.NET Core lo stesso comportamento predefinito è abilitato nel codice.In ASP.NET Core, the same default behavior is enabled in code. Usare gli esempi nella sezione precedente di questa pagina per modificare questo comportamento predefinito.Use the examples in the earlier section of this page to change this default behavior.

    <TelemetryProcessors>
        <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
            <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
            <ExcludedTypes>Event</ExcludedTypes>
        </Add>
        <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
            <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
            <IncludedTypes>Event</IncludedTypes>
        </Add>
    </TelemetryProcessors>
    

È possibile campionare i dati di telemetria più di una volta?Can telemetry be sampled more than once?

  • No.No. SamplingTelemetryProcessors ignora gli elementi dalle considerazioni di campionamento se l'elemento è già campionato.SamplingTelemetryProcessors ignore items from sampling considerations if the item is already sampled. Lo stesso vale anche per il campionamento di inserimento, che non applica il campionamento a tali elementi già campionati nell'SDK stesso.The same is true for ingestion sampling as well, which won't apply sampling to those items already sampled in the SDK itself.

Perché il campionamento non è una semplice "raccolta di percentuale X di ogni tipo di telemetria"?Why isn't sampling a simple "collect X percent of each telemetry type"?

  • Sebbene questo approccio di campionamento fornisca un livello elevato di precisione nelle approssimazioni delle metriche, potrebbe non essere in grado di correlare i dati di diagnostica per utente, sessione e richiesta, che è fondamentale per la diagnostica.While this sampling approach would provide with a high level of precision in metric approximations, it would break the ability to correlate diagnostic data per user, session, and request, which is critical for diagnostics. Di conseguenza, il campionamento funziona meglio con criteri come "raccogliere tutti gli elementi di telemetria per la percentuale X degli utenti dell'app" o "raccogliere tutti i dati di telemetria per la percentuale X delle richieste di app".Therefore, sampling works better with policies like "collect all telemetry items for X percent of app users", or "collect all telemetry for X percent of app requests". Per gli elementi di telemetria non associati alle richieste, ad esempio l'elaborazione asincrona in background, il fallback consiste nel "raccogliere la percentuale X di tutti gli elementi per ogni tipo di telemetria".For the telemetry items not associated with the requests (such as background asynchronous processing), the fallback is to "collect X percent of all items for each telemetry type."

La percentuale di campionamento può variare nel tempo?Can the sampling percentage change over time?

  • Sì, il campionamento adattivo modifica gradualmente la percentuale di campionamento, in base al volume attualmente osservato della telemetria.Yes, adaptive sampling gradually changes the sampling percentage, based on the currently observed volume of the telemetry.

Se si usa il campionamento a frequenza fissa, come stabilire quale sarà la percentuale di campionamento ideale per l'app?If I use fixed-rate sampling, how do I know which sampling percentage will work the best for my app?

  • Una modalità è quella di iniziare con il campionamento adattivo, scoprire quale frequenza è impostata (vedere la domanda precedente) e quindi cambiarla a campionamento a frequenza fissa usando quella frequenza.One way is to start with adaptive sampling, find out what rate it settles on (see the above question), and then switch to fixed-rate sampling using that rate.

    In caso contrario, è necessario usare l'intuito.Otherwise, you have to guess. Analizzare l'uso della telemetria corrente in Application Insights, osservare le possibili limitazioni in corso e stimare il volume della telemetria raccolta.Analyze your current telemetry usage in Application Insights, observe any throttling that is occurring, and estimate the volume of the collected telemetry. Questi tre input, insieme al piano tariffario selezionato, suggeriscono di quanto ridurre il volume dei dati di telemetria raccolti.These three inputs, together with your selected pricing tier, suggest how much you might want to reduce the volume of the collected telemetry. Tuttavia, un aumento nel numero degli utenti o qualsiasi altra migrazione nel volume di telemetria potrebbe invalidare la stima.However, an increase in the number of your users or some other shift in the volume of telemetry might invalidate your estimate.

Cosa accade se si configura una percentuale di campionamento troppo bassa?What happens if I configure the sampling percentage to be too low?

  • Le percentuali di campionamento eccessivamente basse provocano un campionamento eccessivamente aggressivo e riducono l'accuratezza delle approssimazioni quando Application Insights tenta di compensare la visualizzazione dei dati per la riduzione del volume dei dati.Excessively low sampling percentages cause over-aggressive sampling, and reduce the accuracy of the approximations when Application Insights attempts to compensate the visualization of the data for the data volume reduction. Inoltre, l'esperienza di diagnostica potrebbe avere un impatto negativo, poiché alcune delle richieste con errori o lenti non frequenti possono essere campionate.Also your diagnostic experience might be negatively impacted, as some of the infrequently failing or slow requests may be sampled out.

Cosa accade se si configura una percentuale di campionamento troppo elevata?What happens if I configure the sampling percentage to be too high?

  • La configurazione di una percentuale di campionamento troppo elevata (non sufficientemente aggressiva) comporta una riduzione insufficiente del volume dei dati di telemetria raccolti.Configuring too high a sampling percentage (not aggressive enough) results in an insufficient reduction in the volume of the collected telemetry. Potrebbe tuttavia verificarsi una perdita dei dati di telemetria correlata alla limitazione e il costo per l'uso di Application Insights potrebbe essere superiore al previsto per l'applicazione di tariffe aggiuntive.You may still experience telemetry data loss related to throttling, and the cost of using Application Insights might be higher than you planned due to overage charges.

Su quali piattaforme è possibile usare il campionamento?On what platforms can I use sampling?

  • Se nell'SDK non è impostato il campionamento, si verifica automaticamente il campionamento per inserimento per i dati di telemetria superiori a un determinato volume.Ingestion sampling can occur automatically for any telemetry above a certain volume, if the SDK is not performing sampling. Questa configurazione funziona, ad esempio, se si usa una versione precedente di ASP.NET SDK o Java SDK.This configuration would work, for example, if you are using an older version of the ASP.NET SDK or Java SDK.
  • Se si usa ASP.NET o ASP.NET Core SDK correnti (ospitati in Azure o nel proprio server), per impostazione predefinita si ottiene il campionamento adattivo, ma è possibile passare a una frequenza fissa, come descritto in precedenza.If you're using the current ASP.NET or ASP.NET Core SDKs (hosted either in Azure or on your own server), you get adaptive sampling by default, but you can switch to fixed-rate as described above. Con il campionamento a frequenza fissa, l'SDK del browser si sincronizza automaticamente con gli eventi correlati al campione.With fixed-rate sampling, the browser SDK automatically synchronizes to sample related events.
  • Se si usa l'agente Java corrente, è possibile configurare ApplicationInsights.json (per Java SDK, Configure ApplicationInsights.xml ) per attivare il campionamento a frequenza fissa.If you're using the current Java agent, you can configure ApplicationInsights.json (for Java SDK, configure ApplicationInsights.xml) to turn on fixed-rate sampling. Il campionamento viene disattivato per impostazione predefinita.Sampling is turned off by default. Con il campionamento a frequenza fissa, browser SDK e il server vengono sincronizzati automaticamente per campionare gli eventi correlati.With fixed-rate sampling, the browser SDK and the server automatically synchronize to sample related events.

Esistono alcuni eventi rari che si vuole visualizzare sempre. Come è possibile passarli al modulo di campionamento?There are certain rare events I always want to see. How can I get them past the sampling module?

  • Il modo migliore per ottenere questo risultato è scrivere un personalizzata telemetryinitializerpersonalizzato, che imposta SamplingPercentage su 100 sull'elemento di telemetria che si vuole mantenere, come illustrato di seguito.The best way to achieve this is to write a custom TelemetryInitializer, which sets the SamplingPercentage to 100 on the telemetry item you want retained, as shown below. Poiché gli inizializzatori sono garantiti per l'esecuzione prima dei processori di telemetria (incluso il campionamento), ciò garantisce che tutte le tecniche di campionamento ignoreranno questo elemento da eventuali considerazioni di campionamento.As initializers are guaranteed to be run before telemetry processors (including sampling), this ensures that all sampling techniques will ignore this item from any sampling considerations. Gli inizializzatori di telemetria personalizzati sono disponibili in ASP.NET SDK, SDK ASP.NET Core, JavaScript SDK e Java SDK.Custom telemetry initializers are available in the ASP.NET SDK, the ASP.NET Core SDK, the JavaScript SDK, and the Java SDK. Ad esempio, è possibile configurare un inizializzatore di telemetria usando ASP.NET SDK:For example, you can configure a telemetry initializer using the ASP.NET SDK:

    public class MyTelemetryInitializer : ITelemetryInitializer
    {
        public void Initialize(ITelemetry telemetry)
        {
            if(somecondition)
            {
                ((ISupportSampling)telemetry).SamplingPercentage = 100;
            }
        }
    }
    

Versioni precedenti dell'SDKOlder SDK versions

Il campionamento adattivo è disponibile per Application Insights SDK per ASP.NET versione 2.0.0-beta3 e versioni successive, Microsoft. ApplicationInsights. AspNetCore SDK v 2.2.0-beta1 e versioni successive ed è abilitato per impostazione predefinita.Adaptive sampling is available for the Application Insights SDK for ASP.NET v2.0.0-beta3 and later, Microsoft.ApplicationInsights.AspNetCore SDK v2.2.0-beta1 and later, and is enabled by default.

Il campionamento a frequenza fissa è una funzionalità dell'SDK nelle versioni ASP.NET da 2.0.0 e Java SDK versione 2.0.1 e successive.Fixed-rate sampling is a feature of the SDK in ASP.NET versions from 2.0.0 and Java SDK version 2.0.1 and onwards.

Nelle versioni precedenti a v 2.5.0-beta2 di ASP.NET SDK e v 2.2.0-beta3 di ASP.NET Core SDK, la decisione di campionamento è basata sull'hash dell'ID utente per le applicazioni che definiscono "User", ovvero la maggior parte delle applicazioni Web tipiche.Prior to v2.5.0-beta2 of the ASP.NET SDK, and v2.2.0-beta3 of ASP.NET Core SDK, the sampling decision was based on the hash of the user ID for applications that define "user" (that is, most typical web applications). Per i tipi di applicazioni che non definiscono gli utenti, ad esempio i servizi Web, la decisione di campionamento è basata sull'ID operazione della richiesta.For the types of applications that didn't define users (such as web services) the sampling decision was based on the operation ID of the request. Le versioni recenti degli SDK ASP.NET e ASP.NET Core usano l'ID operazione per la decisione di campionamento.Recent versions of the ASP.NET and ASP.NET Core SDKs use the operation ID for the sampling decision.

Passaggi successiviNext steps