Campionamento in Application InsightsSampling in Application Insights

Il campionamento è una funzionalità di Azure Application Insights.Sampling is a feature in Azure Application Insights. È l'approccio consigliato per ridurre il traffico e l'archiviazione della telemetria mantenendo però un'analisi statisticamente corretta dei dati dell'applicazione.It is the recommended way to reduce telemetry traffic and storage, while preserving a statistically correct analysis of application data. Il filtro seleziona gli elementi correlati per poter passare dall'uno all'altro nel corso delle indagini diagnostiche.The filter selects items that are related, so that you can navigate between items when you are doing diagnostic investigations. Quando i conteggi delle metriche vengono presentati nel portale, vengono nuovamente normalizzati tenendo in considerazione il campionamento, per ridurre al minimo gli effetti sulle statistiche.When metric counts are presented to you in the portal, they are renormalized to take account of the sampling, to minimize any effect on the statistics.

Il campionamento riduce i costi del traffico e dei dati e consente di evitare la limitazione.Sampling reduces traffic and data costs, and helps you avoid throttling.

In breve:In brief:

  • Il campionamento mantiene 1 nei record n e rimuove il resto.Sampling retains 1 in n records and discards the rest. Ad esempio, potrebbe mantenere 1 un evento su 5, corrispondente a una frequenza di campionamento del 20%.For example, it might retain 1 in 5 events, a sampling rate of 20%.
  • Nelle app server Web ASP.NET, il campionamento viene eseguito automaticamente se l'applicazione invia molti dati di telemetria.Sampling happens automatically if your application sends a lot of telemetry, in ASP.NET web server apps.
  • È anche possibile impostare il campionamento manualmente, nella pagina del portale relativa ai prezzi oppure nel file con estensione config di ASP.NET SDK, per ridurre anche il traffico di rete.You can also set sampling manually, either in the portal on the pricing page; or in the ASP.NET SDK in the .config file, to also reduce the network traffic.
  • Se si registrano eventi personalizzati e ci si vuole assicurare che gli eventi di un set vengano mantenuti o rimossi insieme, verificare che abbiano lo stesso valore OperationId.If you log custom events and you want to make sure that a set of events is either retained or discarded together, make sure that they have the same OperationId value.
  • Il divisore di campionamento n è indicato in ogni record nella proprietà itemCount, visualizzata nella ricerca con il nome descrittivo "Conteggio delle richieste" o "Conteggio degli eventi".The sampling divisor n is reported in each record in the property itemCount, which in Search appears under the friendly name "request count" or "event count". Quando il campionamento non è in esecuzione, itemCount==1.When sampling is not in operation, itemCount==1.
  • 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).

Tipi di campionamentoTypes of sampling

Esistono tre diversi metodi di campionamento:There are three alternative sampling methods:

  • Campionamento adattivo , che regola automaticamente il volume dei dati di telemetria inviati dall'SDK nell'app ASP.NET.Adaptive sampling automatically adjusts the volume of telemetry sent from the SDK in your ASP.NET app. A partire dalla versione 2.0.0-beta3 dell'SDK questo è il metodo di campionamento predefinito.Beginning with SDK v 2.0.0-beta3 this is the default sampling method. Il campionamento adattativo è attualmente disponibile solo per la telemetria lato server di ASP.NET.Adaptive sampling is currently only available for ASP.NET server-side telemetry.
  • Campionamento a frequenza fissa , che riduce il volume dei dati di telemetria inviati sia dal server ASP.NET che dai browser degli utenti.Fixed-rate sampling reduces the volume of telemetry sent from both your ASP.NET 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.
  • Campionamento per inserimento funziona nel portale di Azure.Ingestion sampling works in the Azure portal. 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 principale vantaggio del campionamento per inserimento consiste nella possibilità di impostare la velocità di campionamento senza ridistribuire l'app, oltre al fatto di funzionare in modo uniforme per tutti i server e i client.The main advantage of ingestion sampling is that you can set the sampling rate without redeploying your app, and it works uniformly for all servers and clients.

Se è in esecuzione il campionamento adattivo o a frequenza fissa, il campionamento per inserimento è disabilitato.If Adaptive or Fixed rate sampling are in operation, Ingestion sampling is disabled.

Campionamento per inserimentoIngestion sampling

Questa forma di campionamento opera nel punto in cui i dati di telemetria di server Web, browser e dispositivi raggiungono l'endpoint di servizio di Application Insights.This form of 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 nel pannello Quota + prezzi:Set the sampling rate in the Quotas and Pricing blade:

Nel pannello Panoramica sull'applicazione fare clic su Impostazioni, Quota, Esempi e 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 per inserimento non funziona mentre è attivo il campionamento a frequenza fissa o adattivo basato sull'SDK.Ingestion sampling doesn't operate while SDK-based adaptive or fixed-rate sampling is in operation. Si noti che il campionamento adattivo è abilitato per impostazione predefinita quando il SDK di ASP.NET è abilitato in Visual Studio o tramite Status Monitor e il campionamento per inserimento è disattivato.Note that adaptive sampling is enabled by default when ASP.NET SDK is enabled in Visual Studio or by using Status Monitor, and ingestion sampling is disabled. Se la frequenza di campionamento nell'SDK è inferiore al 100%, la frequenza di campionamento di inserimento impostata viene ignorata.If the sampling rate at the SDK is less than 100%, then the ingestion sampling rate that you set is ignored.

Avviso

Il valore visualizzato nel riquadro indica il valore impostato per il campionamento per inserimento.The value shown on the tile indicates the value that you set for ingestion sampling. Non rappresenta la frequenza di campionamento effettiva se il campionamento dell'SDK è in funzione.It doesn't represent the actual sampling rate if SDK sampling is in operation.

Campionamento adattivo nel server WebAdaptive sampling at your web server

Il campionamento adattivo è abilitato per impostazione predefinita ed è disponibile in Application Insights SDK per ASP.NET, versione 2.0.0-beta3 o successiva.Adaptive sampling is available for the Application Insights SDK for ASP.NET v 2.0.0-beta3 and later, and is enabled by default.

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. Il volume viene regolato automaticamente affinché rimanga in una frequenza massima specificata del traffico.The volume is adjusted automatically to keep within a specified maximum rate of traffic.

Non opera a bassi volumi di dati di telemetria, pertanto un'app per eseguire il debug o un sito Web con un basso utilizzo non saranno interessate.It doesn't operate at low volumes of telemetry, so an app in debugging or a website with low usage won't be affected.

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.

Aggiornare i pacchetti NuGetUpdate NuGet packages

Aggiornare i pacchetti NuGet del progetto all'ultima versione preliminare di Application Insights.Update your project's NuGet packages to the latest pre-release version of Application Insights. In Visual Studio fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni, scegliere Gestisci pacchetti NuGet, selezionare Includi versione preliminare e cercare Microsoft.ApplicationInsights.Web.In Visual Studio, right-click the project in Solution Explorer, choose Manage NuGet Packages, check Include prerelease and search for Microsoft.ApplicationInsights.Web.

Configurazione del campionamento adattivoConfiguring adaptive sampling

In ApplicationInsights.config è possibile regolare diversi parametri nel nodo AdaptiveSamplingTelemetryProcessor.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 che l'algoritmo adattivo deve raggiungere su ogni host server.The target rate that the adaptive algorithm aims for 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 base al quale la frequenza corrente della telemetria viene rivalutata.The interval at which the current rate of telemetry is re-evaluated. 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 il valore della percentuale di campionamento cambia, periodo di tempo dopo il quale è consentito ridurre nuovamente la percentuale di campionamento per acquisire meno dati.When sampling percentage value changes, how soon after are we allowed to lower sampling percentage again to capture less data.

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

    Quando il valore della percentuale di campionamento cambia, periodo di tempo dopo il quale è consentito aumentare nuovamente la percentuale di campionamento per acquisire più dati.When sampling percentage value changes, how soon after are we allowed to increase sampling percentage again to capture more data.

  • <MinSamplingPercentage>0.1</MinSamplingPercentage>

    Quando la percentuale di campionamento varia, 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, 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 mobile, peso assegnato al valore più recente.In the calculation of the moving average, the weight 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>

    Valore assegnato quando l'app è appena stata avviata.The value assigned when the app has just started. Non ridurlo durante il debug.Don't reduce this while you're debugging.

  • <ExcludedTypes>Trace;Exception</ExcludedTypes>

    Elenco dei tipi da non campionare delimitato dal punto e virgola.A semi-colon delimited list of types that you do not want to be sampled. I tipi riconosciuti sono: dipendenza, evento, eccezione, pageview, richiesta, traccia.Recognized types are: Dependency, Event, Exception, PageView, Request, Trace. Tutte le istanze dei tipi specificati vengono trasmesse; i tipi non specificati vengono campionati.All instances of the specified types are transmitted; the types that are not specified are sampled.

  • <IncludedTypes>Request;Dependency</IncludedTypes>

    Elenco dei tipi da campionare delimitato dal punto e virgola.A semi-colon delimited list of types that you want to be sampled. I tipi riconosciuti sono: dipendenza, evento, eccezione, pageview, richiesta, traccia.Recognized types are: Dependency, Event, Exception, PageView, Request, Trace. I tipi specificati vengono campionati; tutte le istanze degli altri tipi vengono sempre trasmesse.The specified types are sampled; all instances of the other types will always be transmitted.

Per disattivare il campionamento adattivo, rimuovere il nodo AdaptiveSamplingTelemetryProcessor da applicationinsights-config.To switch off adaptive sampling, remove the AdaptiveSamplingTelemetryProcessor node from applicationinsights-config.

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

Invece di impostare il parametro di campionamento nel file con estensione config è possibile impostare questi valori a livello di codice.Instead of setting the sampling parameter in the .config file, you can programmatically set these values. Ciò consente di specificare una funzione di callback che viene richiamata ogni volta che si valuta nuovamente la frequenza di campionamento.This allows you to specify a callback function that is invoked whenever the sampling rate is re-evaluated. È possibile utilizzarlo, ad esempio, per scoprire quale frequenza di campionamento si sta utilizzando.You could use this, for example, to find out what sampling rate is being used.

Rimuovere il nodo AdaptiveSamplingTelemetryProcessor dal file .config.Remove the AdaptiveSamplingTelemetryProcessor node from the .config file.

C#C#


    using Microsoft.ApplicationInsights;
    using Microsoft.ApplicationInsights.Extensibility;
    using Microsoft.ApplicationInsights.WindowsServer.Channel.Implementation;
    using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;
    ...

    var adaptiveSamplingSettings = new SamplingPercentageEstimatorSettings();

    // Optional: here you can adjust the settings from their defaults.

    var builder = TelemetryConfiguration.Active.TelemetryProcessorChainBuilder;

    builder.UseAdaptiveSampling(
         adaptiveSamplingSettings,

        // Callback on rate re-evaluation:
        (double afterSamplingTelemetryItemRatePerSecond,
         double currentSamplingPercentage,
         double newSamplingPercentage,
         bool isSamplingPercentageChanged,
         SamplingPercentageEstimatorSettings s
        ) =>
        {
          if (isSamplingPercentageChanged)
          {
             // Report the sampling rate.
             telemetryClient.TrackMetric("samplingPercentage", newSamplingPercentage);
          }
      });

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

    builder.Build();

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

Campionamento per pagine Web con JavaScriptSampling for web pages with JavaScript

È possibile configurare le pagine Web per il campionamento a frequenza fissa da qualsiasi server.You can configure web pages for fixed-rate sampling from any server.

Quando si configurano le pagine Web per Application Insights, modificare il frammento JavaScript ottenuto dal portale di Application Insights.When you configure the web pages for Application Insights, modify the JavaScript snippet that you get from the Application Insights portal. Nelle app ASP.NET il frammento viene in genere salvato in _Layout.cshtml. Inserire una riga simile a samplingPercentage: 10, prima della chiave di strumentazione:(In ASP.NET apps, the snippet typically goes in _Layout.cshtml.) 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.

Se si abilita il campionamento a frequenza fissa nel server, i client e il server si sincronizzeranno in modo che nella ricerca sia possibile spostarsi tra le visualizzazioni pagina e le richieste correlate.If you also enable fixed-rate sampling at the server, the clients and server will synchronize so that, in Search, you can navigate between related page views and requests.

Campionamento a frequenza fissa per siti Web ASP.NETFixed-rate sampling for ASP.NET web sites

Il campionamento a frequenza fissa riduce il traffico inviato dal server 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. Sincronizza inoltre il campionamento del client e del server in modo che gli elementi correlati vengano mantenuti, ad esempio quando si esamina una pagina di ricerca, è possibile trovare la richiesta correlata.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 request.

L'algoritmo di campionamento mantiene gli elementi correlati.The sampling algorithm retains related items. Per ciascun evento di richiesta HTTP, la richiesta e gli eventi correlati vengono eliminati o trasmessi congiuntamente.For each HTTP request event, the request and its related events are either discarded or transmitted together.

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 fissaConfiguring fixed-rate sampling

  1. Aggiornare i pacchetti NuGet del progetto all'ultima versione preliminare di Application Insights.Update your project's NuGet packages to the latest pre-release version of Application Insights. In Visual Studio fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni, scegliere Gestisci pacchetti NuGet, selezionare Includi versione preliminare e cercare Microsoft.ApplicationInsights.Web.In Visual Studio, right-click the project in Solution Explorer, choose Manage NuGet Packages, check Include prerelease and search for Microsoft.ApplicationInsights.Web.
  2. Disabilitare il campionamento adattivo: in ApplicationInsights.config rimuovere o impostare come commento il nodo AdaptiveSamplingTelemetryProcessor.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>
    -->
    
  3. Abilitare il modulo di campionamento a frequenza fissa.Enable the fixed-rate sampling module. Aggiungere questo frammento ad 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>
    

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.

Alternativa: abilitare il campionamento a frequenza fissa nel codice del server localeAlternative: enable fixed-rate sampling in your server code

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

C#C#


    using Microsoft.ApplicationInsights.Extensibility;
    using Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel;
    ...

    var builder = TelemetryConfiguration.Active.GetTelemetryProcessorChainBuilder();
    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.)

Quando usare il campionamento?When to use sampling?

Il campionamento adattivo viene automaticamente abilitato se si usa ASP.NET SDK versione 2.0.0-beta3 o successiva.Adaptive sampling is automatically enabled if you use the ASP.NET SDK version 2.0.0-beta3 or later. Indipendentemente dalla versione di SDK usata, è possibile abilitare il campionamento per inserimento in modo da consentire ad Application Insights di campionare i dati raccolti.Regardless of which version of the SDK you use, you can enable ingestion sampling to allow Application Insights to sample the collected data.

In linea generale, per la maggior parte delle applicazioni di piccole e medie dimensioni il campionamento non è necessario.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:

  • Il servizio Application Insights rimuove ("limita") i punti dati quando l'app invia una frequenza di telemetria molto elevata in un breve intervallo di tempo.Application Insights service drops ("throttles") data points when your app sends a very high rate of telemetry in short time interval.
  • 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:

  • Si supera spesso la quota mensile dei dati di telemetria.You often go through your monthly quota of telemetry.
  • Si usa una versione dell'SDK che non supporta il campionamento, ad esempio Java SDK o versioni di ASP.NET precedenti alla 2.You're using a version of the SDK that doesn't support sampling - for example, the Java SDK or ASP.NET versions earlier than 2.
  • Si ricevono grandi quantità di dati di telemetria dal Web browser degli utenti.You're getting a lot of telemetry from your users' web browsers.

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

  • Si usa Application Insights SDK per i servizi Web ASP.NET versione 2.0.0 o successiva eYou're using the Application Insights SDK for ASP.NET web services version 2.0.0 or later, and
  • È necessario il campionamento sincronizzato tra client e server, in modo che, quando si esaminano gli eventi in Cerca, sia possibile spostarsi tra gli eventi correlati nel client e nel server, ad esempio visualizzazioni pagina e 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. Questo tipo di campionamento è abilitato per impostazione predefinita nell'SDK del server ASP.NET versione 2.0.0-beta3.This is enabled by default in the ASP.NET server SDK, version 2.0.0-beta3 or later. Non riduce il traffico fino al raggiungimento di una frequenza minima specificata. Di conseguenza, i siti con bassi livelli di uso non saranno interessati.It will not reduce traffic until a certain minimum rate is reached, therefore, low-use sites will not be affected.

Come è possibile sapere se il campionamento è in esecuzione?How do I know 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:

requests | where timestamp > ago(1d)
| summarize 100/avg(itemCount) by bin(timestamp, 1h) 
| render areachart 

In ogni record conservato, itemCount indica il numero di record originali che rappresenta, uguale a 1 + il numero di record precedenti scartati.In each retained record, itemCount indicates the number of original records that it represents, equal to 1 + the number of previous discarded records.

Come funziona il campionamento?How does sampling work?

Il campionamento a frequenza fissa e il campionamento adattivo sono funzionalità dell'SDK nella versione ASP.NET 2.0.0 o successiva.Fixed-rate and adaptive sampling are a feature of the SDK in ASP.NET versions from 2.0.0 onwards. Il campionamento per inserimento è una funzionalità del servizio Application Insights ed è operativo se l'SDK non sta eseguendo un altro campionamento.Ingestion sampling is a feature of the Application Insights service, and can be in operation if the SDK is not performing sampling.

L'algoritmo di campionamento decide quali elementi di telemetria eliminare e quali mantenere, sia che venga eseguito nell'SDK o nel servizio Application Insights.The sampling algorithm decides which telemetry items to drop, and which ones to keep (whether it's in 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. Se, ad esempio, per una richiesta non riuscita l'app invia elementi di telemetria aggiuntivi (come eccezioni e tracce registrate da questa richiesta), il campionamento non dividerà la richiesta e il resto della telemetria,For example, if for a failed request your app sends additional telemetry items (such as exception and traces logged from this request), sampling will not split this request and other telemetry. ma conserverà o rimuoverà gli elementi tutti insieme.It 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.

Per le applicazioni che definiscono "user" (la maggior parte delle normali applicazioni Web), la decisione sul campionamento si basa sull'hash dell'ID utente, vale a dire che tutta la telemetria associata a un particolare utente viene conservata o rimossa.For applications that define "user" (that is, most typical web applications), the sampling decision is based on the hash of the user id, which means that all telemetry for any particular user is either preserved or dropped. Per i tipi di applicazioni che non definiscono gli utenti (ad esempio, i servizi Web), la decisione sul campionamento si basa sull'ID operazione della richiesta.For the types of applications that don't define users (such as web services) the sampling decision is based on the operation id of the request. Infine, per gli elementi della telemetria per cui non è impostato né l'ID utente né l'ID operazione (ad esempio, gli elementi della telemetria segnalati da thread asincroni senza contesto http), il campionamento si limita ad acquisire una percentuale degli elementi della telemetria di ogni tipo.Finally, for the telemetry items that neither have user nor operation id set (for example 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.

Avviso

Application Insights non esegue il campionamento di metriche e tipi di dati di telemetria delle sessioni.Application Insights does not sample metrics and sessions telemetry types. La riduzione della precisione può risultare estremamente inappropriata per questi tipi di dati di telemetria.Reduction in the precision can be highly undesirable for these telemetry types.

Campionamento adattivoAdaptive sampling

Il campionamento adattivo aggiunge un componente che monitora la frequenza corrente di trasmissione dall'SDK e regola la percentuale di campionamento per cercare di rimanere entro la frequenza massima di destinazione.Adaptive sampling adds a component that monitors the current rate of transmission from the SDK, and adjusts the sampling percentage to try to stay within the target maximum rate. 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.

Campionamento e JavaScript SDKSampling and the JavaScript SDK

L'SDK lato client (JavaScript) partecipa al campionamento a frequenza fissa insieme all'SDK lato server.The client-side (JavaScript) SDK participates in fixed-rate sampling in conjunction with the server-side SDK. Le pagine instrumentate invieranno solo la telemetria lato client dagli stessi utenti per cui il lato server ha preso la decisione di "eseguire il campionamento internamente".The instrumented pages will only send client-side telemetry from the same users for which the server-side made its decision to "sample in." Questa logica è concepita per mantenere l'integrità della sessione utente sui lati client e server.This logic is designed to maintain integrity of user session across client- and server-sides. Di conseguenza, da un particolare elemento della telemetria in Application Insights è possibile trovare tutti gli altri elementi della telemetria per questa sessione utente.As a result, from any particular telemetry item in Application Insights you can find all other telemetry items for this user or session.

La telemetria lato e client e server non mostra i campioni coordinati, come descritto sopra.My client and server-side telemetry don't show coordinated samples as you describe above.

  • Verificare di avere abilitato il campionamento a frequenza fissa sia sul server che sul client.Verify that you enabled fixed-rate sampling both on server and client.
  • Assicurarsi che la versione dell'SDK sia 2.0 o successiva.Make sure that the SDK version is 2.0 or above.
  • 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.

Domande frequentiFrequently Asked Questions

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

  • Anche se questo approccio al campionamento offre una precisione davvero elevata nelle approssimazioni delle metriche, tuttavia non permette di correlare i dati diagnostici per utente, sessione e richiesta, come è indispensabile per la diagnostica.While this sampling approach would provide with a very high precision in metric approximations, it would break ability to correlate diagnostic data per user, session, and request, which is critical for diagnostics. Il campionamento quindi funziona meglio come logica di "raccolta di tutti gli elementi della telemetria per una percentuale X di utenti dell'app" o di "raccolta di tutta la telemetria per una percentuale X di richieste app".Therefore, sampling works better with "collect all telemetry items for X percent of app users", or "collect all telemetry for X percent of app requests" logic. Per gli elementi della telemetria non associati alle richieste, ad esempio l'elaborazione asincrona in background, il fallback prevede la "raccolta di una 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 fall back 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 sampling percentage too low?

  • Una percentuale di campionamento troppo bassa (campionamento eccessivamente aggressivo) ridurrà la precisione delle approssimazioni, quando Application Insights tenterà di compensare la visualizzazione dei dati per la riduzione del volume dei dati.Excessively low sampling percentage (over-aggressive sampling) reduces the accuracy of the approximations, when Application Insights attempts to compensate the visualization of the data for the data volume reduction. Anche l'esperienza di diagnostica potrebbe risultare compromessa, perché potrebbero venire campionate alcune richieste lente o non riuscite.Also, 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 alta?What happens if I configure sampling percentage too high?

  • Configurando una percentuale di campionamento troppo elevata (non abbastanza aggressiva), si otterrà una riduzione insufficiente del volume dei dati di telemetria raccolti.Configuring too high 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. Si verifica, ad esempio, se l'app usa un server Java o se si esegue una versione precedente dell'SDK ASP.NET.This would work, for example, if your app uses a Java server, or if you are using an older version of the ASP.NET SDK.
  • Se si usa l'SDK ASP.NET versione 2.0.0 o successiva, ospitato in Azure o sul server in uso, per impostazione predefinita viene eseguito il campionamento adattivo, ma è comunque possibile passare al campionamento a frequenza fissa, come descritto in precedenza.If you're using ASP.NET SDK versions 2.0.0 and above (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.

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?

  • Inizializzare un'istanza separata di TelemetryClient con una nuova TelemetryConfiguration (non con quello predefinito attivo).Initialize a separate instance of TelemetryClient with a new TelemetryConfiguration (not the default Active one). Usarla per inviare gli eventi rari.Use that to send your rare events.

Passaggi successiviNext steps

  • applicazione di filtri può garantire un controllo più rigoroso sui dati inviati dall'SDK.Filtering can provide more strict control of what your SDK sends.