Campionamento in Application Insights
Il campionamento è una funzionalità di Application Insights. Si tratta dell'approccio consigliato per ridurre il traffico dei dati di telemetria, i costi legati ai dati e i costi dell'archiviazione, mantenendo al tempo stesso un'analisi corretta dei dati dell'applicazione a livello statistico. Il campionamento consente anche di evitare che Application Insights limiti la telemetria. Il filtro di campionamento seleziona gli elementi correlati, in modo da poter spostarsi tra gli elementi durante l'esecuzione di indagini diagnostiche.
Quando i conteggi delle metriche vengono presentati nel portale, vengono rinormalizzati per tenere conto del campionamento. In questo modo si riduce al minimo qualsiasi effetto sulle statistiche.
Nota
- Se è stata adottata la distribuzione OpenTelemetry e si stanno cercando le opzioni di configurazione, vedere Abilitare il campionamento.
Attenzione
È consigliabile distribuire OpenTelemetry di Monitoraggio di Azure per le nuove applicazioni o i clienti per attivare Application Insights per Monitoraggio di Azure. La distribuzione OpenTelemetry di Monitoraggio di Azure offre funzionalità ed esperienza simili come Application Insights SDK. È possibile eseguire la migrazione da Application Insights SDK usando le guide alla migrazione per .NET, Node.js e Python, ma stiamo ancora lavorando per aggiungere altre funzionalità per la compatibilità con le versioni precedenti.
Breve riepilogo
- Esistono tre tipi diversi di campionamento: campionamento adattivo, campionamento a frequenza fissa e campionamento per inserimento.
- Il campionamento adattivo è abilitato per impostazione predefinita in tutte le versioni più recenti di Application Insights ASP.NET e ASP.NET Core Software Development Kit (SDK) e Funzioni di Azure.
- Il campionamento a frequenza fissa è disponibile nelle versioni recenti degli SDK di Application Insights per ASP.NET, ASP.NET Core, Java (sia l'agente che l'SDK), JavaScript e Python.
- In Java sono disponibili override di campionamento, utili quando è necessario applicare frequenze di campionamento diverse a dipendenze, richieste e controlli di integrità selezionati. Usare gli override di campionamento per ignorare alcune dipendenze di disturbo mentre, ad esempio, tutti gli errori importanti vengono mantenuti al 100%. Questo comportamento è una forma di campionamento fisso che offre un livello granulare di controllo sui dati di telemetria.
- Il campionamento per inserimento viene eseguito nell'endpoint servizio di Application Insights. Viene utilizzato solo quando non sono applicati altri tipi di campionamento. Se l'SDK campiona i dati di telemetria, il campionamento per inserimento viene disabilitato.
- Per le applicazioni Web, se si registrano eventi personalizzati ed è necessario assicurarsi che un set di eventi venga conservato o rimosso insieme, gli eventi devono avere lo stesso valore
OperationId
. - Se si scrivono query di Dati di analisi, è necessario tener conto del campionamento. In particolare, anziché eseguire semplicemente il conteggio dei record, è necessario usare
summarize sum(itemCount)
. - Alcuni tipi di telemetria, tra cui le metriche delle prestazioni e le metriche personalizzate, vengono sempre mantenuti indipendentemente dal fatto che il campionamento sia abilitato o meno.
La tabella seguente riepiloga i tipi di campionamento disponibili per ogni SDK e tipo di applicazione:
Application Insights SDK | Campionamento adattivo supportato | Campionamento a frequenza fissa supportato | Campionamento per inserimento supportato |
---|---|---|---|
ASP.NET | Sì (attivo per impostazione predefinita) | Sì | Solo quando non sono applicati altri tipi di campionamento |
ASP.NET Core | Sì (attivo per impostazione predefinita) | Sì | Solo quando non sono applicati altri tipi di campionamento |
Funzioni di Azure | Sì (attivo per impostazione predefinita) | No | Solo quando non sono applicati altri tipi di campionamento |
Java | No | Sì | Solo quando non sono applicati altri tipi di campionamento |
JavaScript | No | Sì | Solo quando non sono applicati altri tipi di campionamento |
Node.JS | No | Sì | Solo quando non sono applicati altri tipi di campionamento |
Python | No | Sì | Solo quando non sono applicati altri tipi di campionamento |
Tutti gli altri | No | No | Sì |
Nota
- Java Application Agent 3.4.0 e versione successiva usa il campionamento a frequenza limitata come impostazione predefinita quando si inviano dati di telemetria ad Application Insights. Per altre informazioni, vedere Campionamento a frequenza limitata.
- La maggior parte delle informazioni in questa pagina si applica alle versioni correnti degli SDK di Application Insights. Per informazioni sulle versioni precedenti degli SDK, vedere le versioni precedenti dell'SDK.
Quando usare il campionamento
In generale, per la maggior parte delle applicazioni di piccole e medie dimensioni non è necessario il campionamento. Le informazioni di diagnostica più utili e le statistiche più accurate si ottengono raccogliendo dati su tutte le attività utente.
I vantaggi principali del campionamento sono:
- Il servizio Application Insights elimina i punti dati ("limitazioni") quando l'app invia una frequenza elevata di dati di telemetria in un breve intervallo di tempo. Il campionamento riduce la probabilità che l'applicazione veda la limitazione.
- Non superare la quota di punti dati per il proprio piano tariffario.
- Ridurre il traffico di rete dalla raccolta di telemetria.
Funzionamento del campionamento
L'algoritmo di campionamento decide quali dati di telemetria mantenere o eliminare, sia che il campionamento venga eseguito nell'SDK o nel servizio Application Insights. Segue le regole per mantenere intatti tutti i punti dati correlati, assicurandosi che Application Insights fornisca un'esperienza diagnostica fruibile e affidabile, anche con meno dati. Ad esempio, se un campione include una richiesta non riuscita, mantiene tutti gli elementi di telemetria correlati, ad esempio eccezioni e tracce. In questo modo, quando si visualizzano i dettagli della richiesta in Application Insights, è sempre possibile visualizzare la richiesta con i dati di telemetria associati.
La decisione di campionamento è basata sull'ID operazione della richiesta, il che significa che tutti gli elementi di telemetria che appartengono a una particolare operazione vengono mantenuti o eliminati. Per gli elementi di telemetria che non hanno un set di ID operazione,ad esempio gli elementi di telemetria segnalati dai thread asincroni senza contesto HTTP, il campionamento acquisisce semplicemente una percentuale di elementi di telemetria di ogni tipo.
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. Quindi, quando osservano la telemetria in Application Insights, gli utenti visualizzano approssimazioni statisticamente corrette vicine ai numeri reali.
La precisione dell'approssimazione dipende in gran parte dalla percentuale di campionamento configurata. Inoltre, l'accuratezza aumenta per le applicazioni che gestiscono un volume elevato di richieste simili da molti utenti. D'altra parte, per le applicazioni che non funzionano con un carico significativo, il campionamento non è necessario perché queste applicazioni in genere possono inviare tutti i dati di telemetria pur rimanendo entro la quota, senza causare la perdita di dati dalla limitazione.
Tipi di campionamento
Esistono tre diversi metodi di campionamento:
Campionamento adattivo, che regola automaticamente il volume dei dati di telemetria inviati dall'SDK nell'app ASP.NET/ASP.NET Core e da Funzioni di Azure. Si tratta del campionamento predefinito quando si usa ASP.NET o ASP.NET Core SDK. Il campionamento adattivo è attualmente disponibile solo per la telemetria lato server ASP.NET/ASP.NET Core e per Funzioni di Azure.
Campionamento a frequenza fissa, che riduce il volume dei dati di telemetria inviati sia dal server ASP.NET o ASP.NET Core o Java che dai browser degli utenti. È necessario impostare la frequenza. Il client e il server sincronizzano il rispettivo campionamento in modo che nella ricerca sia possibile spostarsi tra le visualizzazioni di pagina e le richieste correlate.
Campionamento per inserimento, che viene eseguito nell'endpoint servizio di Application Insights. Rimuove alcuni dati di telemetria provenienti dall'app, a una velocità di campionamento impostata. Non riduce il traffico di telemetria inviato dall'app, ma consente all'utente di rispettare la quota mensile. Il vantaggio principale del campionamento di inserimento è il fatto che consente di impostare la frequenza di campionamento senza ridistribuire l'app. Il campionamento dell'inserimento funziona in modo uniforme per tutti i server e i client, ma non si applica quando sono in funzione altri tipi di campionamento.
Importante
Se i metodi di campionamento adattivi o a frequenza fissa sono abilitati per un tipo di telemetria, il campionamento dell'inserimento è disabilitato per tale telemetria. Tuttavia, i tipi di telemetria esclusi dal campionamento a livello di SDK saranno comunque soggetti al campionamento di inserimento alla velocità impostata nel portale.
Campionamento adattivo
Il campionamento adattivo riguarda il volume dei dati di telemetria inviati dall'app del server Web all'endpoint del servizio Application Insights.
Suggerimento
Il campionamento adattivo è abilitato per impostazione predefinita quando si usa ASP.NET SDK o ASP.NET Core SDK ed è anche abilitato per impostazione predefinita per Funzioni di Azure.
Il volume si adatta automaticamente per rimanere entro il limite di frequenza MaxTelemetryItemsPerSecond
. Se l'applicazione genera un volume di telemetria basso, ad esempio durante il debug o un utilizzo ridotto, non vengono eliminati elementi finché il volume rimane inferiore a MaxTelemetryItemsPerSecond
. Man mano che il volume di telemetria aumenta, regola la frequenza di campionamento per raggiungere il volume target. Questa rettifica, ricalcolata a intervalli regolari, si basa su una media mobile della frequenza di trasmissione in uscita.
Per ottenere il volume di destinazione, alcuni dei dati di telemetria generati vengono eliminati. Tuttavia, come in altri tipi di campionamento, l'algoritmo consente di mantenere gli elementi di telemetria correlati. Ad esempio, quando si controllano i dati di telemetria nella ricerca, è possibile trovare la richiesta correlata a una particolare eccezione.
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 valori approssimativi in Esplora metriche.
Configurazione del campionamento adattivo per le applicazioni ASP.NET
Nota
Questa sezione si applica alle applicazioni ASP.NET, non alle applicazioni ASP.NET Core. Informazioni sulla configurazione del campionamento adattivo per le applicazioni ASP.NET Core sono disponibili più avanti in questo documento.
In ApplicationInsights.config
è possibile regolare diversi parametri nel nodo AdaptiveSamplingTelemetryProcessor
. Le cifre indicate sono i valori predefiniti:
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
Frequenza target delle operazioni logiche che l'algoritmo adattivo mira a raccogliere in ogni host server. 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.
<EvaluationInterval>00:00:15</EvaluationInterval>
Intervallo in base al quale la frequenza corrente della telemetria viene rivalutata. La valutazione viene eseguita come media mobile. Potrebbe essere necessario ridurre questo intervallo se la telemetria è responsabile di burst improvvisi.
<SamplingPercentageDecreaseTimeout>00:02:00</SamplingPercentageDecreaseTimeout>
Quando il valore percentuale di campionamento cambia, determina la velocità con cui è possibile ridurre di nuovo la percentuale di campionamento per acquisire meno dati.
<SamplingPercentageIncreaseTimeout>00:15:00</SamplingPercentageIncreaseTimeout>
Quando il valore percentuale di campionamento cambia, determina quando è possibile aumentare di nuovo la percentuale di campionamento per acquisire più dati.
<MinSamplingPercentage>0.1</MinSamplingPercentage>
Quando la percentuale di campionamento varia, valore minimo che è consentito impostare.
<MaxSamplingPercentage>100.0</MaxSamplingPercentage>
Quando la percentuale di campionamento varia, valore massimo che è consentito impostare.
<MovingAverageRatio>0.25</MovingAverageRatio>
Nel calcolo della media mobile, questo valore specifica il peso che deve essere assegnato al valore più recente. Usare un valore uguale o inferiore a 1. I valori più bassi rendono l'algoritmo meno reattivo alle modifiche improvvise.
<InitialSamplingPercentage>100</InitialSamplingPercentage>
Quantità di dati di telemetria da campionare all'avvio dell'app. Non ridurre questo valore durante il debug.
<ExcludedTypes>type;type</ExcludedTypes>
Elenco delimitato da punto e virgola dei tipi che non si vuole siano soggetti a campionamento. I tipi riconosciuti sono:
Dependency
,Event
,Exception
,PageView
,Request
,Trace
. Tutti i dati di telemetria dei tipi specificati vengono trasmessi. I tipi non specificati vengono campionati.<IncludedTypes>type;type</IncludedTypes>
Elenco delimitato da punto e virgola dei tipi che si vuole siano soggetti a campionamento. I tipi riconosciuti sono:
Dependency
,Event
,Exception
,PageView
,Request
,Trace
. I tipi specificati vengono campionati. Tutti i dati di telemetria degli altri tipi vengono sempre trasmessi.
Per disattivare il campionamento adattivo, rimuovere i nodi AdaptiveSamplingTelemetryProcessor
da ApplicationInsights.config
.
Alternativa: configurare il campionamento adattivo nel codice
Invece di impostare il parametro di campionamento nel file .config
è possibile impostare questi valori a livello di codice.
Rimuovere tutti i nodi
AdaptiveSamplingTelemetryProcessor
dal file.config
.Usare il frammento di codice seguente per configurare il campionamento adattivo:
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();
È anche possibile modificare la frequenza di campionamento per ogni tipo di telemetria singolarmente o anche escludere del tutto determinati tipi da campionamento:
// 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 le applicazioni ASP.NET Core
Le applicazioni ASP.NET Core possono essere configurate nel codice o tramite il file appsettings.json
. Per altre informazioni, vedere Configurazione in ASP.NET Core.
Il campionamento adattivo è abilitato per impostazione predefinita in tutte le applicazioni ASP.NET Core, ma può essere disabilitato o è possibile personalizzarne il comportamento.
Disattivazione del campionamento adattivo
La funzionalità di campionamento predefinita può essere disabilitata quando si aggiunge il servizio Application Insights.
Aggiungere ApplicationInsightsServiceOptions
dopo il metodo WebApplication.CreateBuilder()
nel file Program.cs
:
var builder = WebApplication.CreateBuilder(args);
var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();
aiOptions.EnableAdaptiveSampling = false;
builder.Services.AddApplicationInsightsTelemetry(aiOptions);
var app = builder.Build();
Il codice precedente disabilita il campionamento adattivo. Seguire la procedura descritta di seguito per aggiungere al campionamento più opzioni di personalizzazione.
Configurare le impostazioni del campionamento
Usare i metodi di estensione di TelemetryProcessorChainBuilder
seguenti per personalizzare il comportamento di campionamento.
Importante
Se si usa questo metodo per configurare il campionamento, assicurarsi di impostare la proprietà aiOptions.EnableAdaptiveSampling
su false
quando si chiama AddApplicationInsightsTelemetry()
. Dopo aver apportato questa modifica, è quindi necessario seguire le istruzioni nel blocco di codice seguente esattamente per riabilitare il campionamento adattivo con le personalizzazioni. In caso contrario, può verificarsi l'inserimento di dati in eccesso. Testare sempre le impostazioni di campionamento dopo averle modificate e impostare un limite di dati giornaliero appropriato per controllare i costi.
using Microsoft.ApplicationInsights.AspNetCore.Extensions;
using Microsoft.ApplicationInsights.Extensibility;
var builder = WebApplication.CreateBuilder(args);
builder.Services.Configure<TelemetryConfiguration>(telemetryConfiguration =>
{
var telemetryProcessorChainBuilder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder;
// Using adaptive sampling
telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond: 5);
// Alternately, the following configures adaptive sampling with 5 items per second, and also excludes DependencyTelemetry from being subject to sampling:
// telemetryProcessorChainBuilder.UseAdaptiveSampling(maxTelemetryItemsPerSecond:5, excludedTypes: "Dependency");
telemetryProcessorChainBuilder.Build();
});
builder.Services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
{
EnableAdaptiveSampling = false,
});
var app = builder.Build();
È possibile personalizzare altre impostazioni di campionamento usando la classe SamplingPercentageEstimatorSettings:
using Microsoft.ApplicationInsights.WindowsServer.Channel.Implementation;
telemetryProcessorChainBuilder.UseAdaptiveSampling(new SamplingPercentageEstimatorSettings
{
MinSamplingPercentage = 0.01,
MaxSamplingPercentage = 100,
MaxTelemetryItemsPerSecond = 5
}, null, excludedTypes: "Dependency");
Configurazione del campionamento adattivo per Funzioni di Azure
Seguire le istruzioni in questa pagina per configurare il campionamento adattivo per le app in esecuzione in Funzioni di Azure.
Campionamento a frequenza fissa
Il campionamento a frequenza fissa riduce il traffico inviato dal server Web e dai Web browser. A differenza del campionamento adattivo, riduce i dati di telemetria a una frequenza fissa definita dall'utente. Il campionamento a frequenza fissa è disponibile per le applicazioni ASP.NET, ASP.NET Core, Java e Python.
Analogamente ad altre tecniche, mantiene anche gli elementi correlati. Sincronizza anche il campionamento client e server in modo che gli elementi correlati vengano conservati. Ad esempio, quando si esamina una visualizzazione di pagina nella ricerca è possibile trovare le relative richieste server correlate.
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 il più accurate possibile.
Configurazione del campionamento a frequenza fissa per le applicazioni ASP.NET
Disabilitare il campionamento adattivo: in
ApplicationInsights.config
rimuovere o impostare come commento il nodoAdaptiveSamplingTelemetryProcessor
.<TelemetryProcessors> <!-- Disabled adaptive sampling: <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel"> <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond> </Add> -->
Abilitare il modulo di campionamento a frequenza fissa. Aggiungere questo frammento di codice a
ApplicationInsights.config
:In questo esempio, SamplingPercentage è 20, quindi viene campionato il 20% di tutti gli elementi. I valori in Esplora metriche vengono moltiplicati per (100/20) = 5 per compensare.
<TelemetryProcessors> <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.SamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel"> <!-- Set a percentage close to 100/N where N is an integer. --> <!-- E.g. 50 (=100/2), 33.33 (=100/3), 25 (=100/4), 20, 1 (=100/100), 0.1 (=100/1000) --> <SamplingPercentage>20</SamplingPercentage> </Add> </TelemetryProcessors>
In alternativa, invece di impostare il parametro di campionamento nel file
ApplicationInsights.config
è possibile impostare questi valori a livello di codice: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();
Configurazione del campionamento a frequenza fissa per le applicazioni ASP.NET Core
Disabilitare il campionamento adattivo
Le modifiche possono essere apportate dopo il metodo
WebApplication.CreateBuilder()
, usandoApplicationInsightsServiceOptions
:var builder = WebApplication.CreateBuilder(args); var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions(); aiOptions.EnableAdaptiveSampling = false; builder.Services.AddApplicationInsightsTelemetry(aiOptions); var app = builder.Build();
Abilitare il modulo di campionamento a frequenza fissa
Le modifiche possono essere apportate dopo il metodo
WebApplication.CreateBuilder()
:var builder = WebApplication.CreateBuilder(args); builder.Services.Configure<TelemetryConfiguration>(telemetryConfiguration => { var builder = telemetryConfiguration.DefaultTelemetrySink.TelemetryProcessorChainBuilder; // Using fixed rate sampling double fixedSamplingPercentage = 10; builder.UseSampling(fixedSamplingPercentage); builder.Build(); }); builder.Services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions { EnableAdaptiveSampling = false, }); var app = builder.Build();
Configurazione degli override di campionamento e del campionamento a frequenza fissa per le applicazioni Java
Per impostazione predefinita, non è abilitato alcun campionamento nella strumentazione automatica Java e nell'SDK. Attualmente, nella strumentazione automatica Java sono supportati gli override di campionamento e il campionamento a frequenza fissa. Il campionamento adattivo non è supportato in Java.
Configurazione della strumentazione automatica di Java
- Per configurare gli override di campionamento che eseguono l'override della frequenza di campionamento predefinita e applicano frequenze di campionamento diverse alle richieste e alle dipendenze selezionate, usare la guida all'override del campionamento.
- Per configurare il campionamento a frequenza fissa che si applica a tutti i dati di telemetria, usare la guida al campionamento a frequenza fissa.
Nota
Come percentuale di campionamento, sceglierne una vicina a 100/N dove N è un numero intero. Il campionamento attualmente non supporta altri valori.
Configurazione del campionamento a frequenza fissa per le applicazioni Python OpenCensus
Instrumentare l'applicazione con le utilità di esportazione di Monitoraggio di Azure OpenCensus più recenti.
Nota
Il campionamento a frequenza fissa non è disponibile per l'utilità di esportazione delle metriche. Ciò significa che le metriche personalizzate sono gli unici tipi di telemetria per cui NON è possibile configurare il campionamento. L'utilità di esportazione delle metriche invierà tutti i dati di telemetria di cui tiene traccia.
Campionamento a frequenza fissa per la traccia
È possibile specificare un sampler
come parte della configurazione di Tracer
. Se non viene indicato alcun campionatore esplicito, verrà usato ProbabilitySampler
per impostazione predefinita. Per impostazione predefinita, ProbabilitySampler
utilizzerà una frequenza di 1/10000, ovvero una richiesta su 10.000 verrà inviata ad Application Insights. Se si vuole specificare una frequenza di campionamento, vedere i dettagli seguenti.
Per specificare la frequenza di campionamento, verificare che Tracer
specifichi un campionatore con una frequenza di campionamento compresa tra 0,0 e 1,0 inclusi. Una frequenza di campionamento di 1,0 rappresenta il 100%, vale a dire che tutte le richieste vengono inviate come dati di telemetria ad Application Insights.
tracer = Tracer(
exporter=AzureExporter(
instrumentation_key='00000000-0000-0000-0000-000000000000',
),
sampler=ProbabilitySampler(1.0),
)
Campionamento a frequenza fissa per i log
È possibile configurare il campionamento a frequenza fissa per AzureLogHandler
modificando l'argomento facoltativo logging_sampling_rate
. Se non viene specificato alcun argomento, viene utilizzata una frequenza di campionamento pari a 1,0. Una frequenza di campionamento di 1,0 rappresenta il 100%, vale a dire che tutte le richieste vengono inviate come dati di telemetria ad Application Insights.
handler = AzureLogHandler(
instrumentation_key='00000000-0000-0000-0000-000000000000',
logging_sampling_rate=0.5,
)
Configurazione del campionamento a frequenza fissa per pagine Web con JavaScript
Le pagine Web basate su JavaScript possono essere configurate per l'uso di 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.
Quando si configurano le pagine Web basate su JavaScript per Application Insights, modificare il frammento di codice JavaScript ottenuto dal portale di Application Insights.
Suggerimento
Nelle app ASP.NET con JavaScript incluso, il frammento di codice viene in genere inserito in _Layout.cshtml
.
Inserire una riga simile a samplingPercentage: 10,
prima della chiave di strumentazione:
<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>
Nota
Il 31 marzo 2025, il supporto per l'inserimento delle chiavi di strumentazione terminerà. L'inserimento delle chiavi di strumentazione continuerà a funzionare, ma non saranno più garantiti aggiornamenti o supporto per la funzionalità. Eseguire la transizione alle stringhe di connessione per sfruttare le nuove funzionalità.
Come percentuale di campionamento, sceglierne una vicina a 100/N dove N è un numero intero. Il campionamento attualmente non supporta altri valori.
Coordinamento del campionamento lato server e lato client
L'SDK JavaScript lato client partecipa al campionamento a frequenza fissa insieme all'SDK lato server. Le pagine instrumentate inviano solo la telemetria lato client dagli stessi utenti che l'SDK lato server ha deciso di includere nel campionamento. Questa logica è concepita per mantenere l'integrità delle sessioni utente per le applicazioni lato client e server. Di conseguenza, da un particolare elemento della telemetria in Application Insights è possibile trovare tutti gli altri elementi della telemetria per questo utente o questa sessione e nella ricerca è possibile esplorare le visualizzazioni di pagina e le richieste correlate.
Se la telemetria lato e client e server non mostra campioni coordinati:
- Verificare di avere abilitato il campionamento sia sul server che sul client.
- Controllare di avere impostato la stessa percentuale di campionamento sia nel client che nel server.
- Assicurarsi che la versione dell'SDK sia 2.0 o successiva.
Campionamento per inserimento
Il campionamento per inserimento opera nel punto in cui i dati di telemetria di server Web, browser e dispositivi raggiungono l'endpoint servizio di Application Insights. 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.
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.
Impostare la frequenza di campionamento nella pagina Utilizzo e costi stimati:
Come in altri tipi di campionamento, l'algoritmo consente di mantenere gli elementi di telemetria correlati. Ad esempio, quando si controllano i dati di telemetria nella ricerca, è possibile trovare la richiesta correlata a una particolare eccezione. I conteggi di metrica, ad esempio la frequenza delle richieste e delle eccezioni, vengono mantenuti correttamente.
Il campionamento rimuove determinati punti dati, rendendoli non disponibili per alcuna funzionalità di Application Insights, ad esempio l'esportazione continua.
Il campionamento per inserimento non funziona insieme al campionamento a frequenza fissa o adattivo. Il campionamento adattivo viene attivato automaticamente con ASP.NET SDK, ASP.NET Core SDK, in Servizio app di Azure o con l'agente di Application Insights. Quando l'endpoint servizio di Application Insights riceve i dati di telemetria e rileva una frequenza di campionamento inferiore al 100% (che indica il campionamento attivo), ignora qualsiasi frequenza di campionamento per inserimento impostata.
Avviso
Il valore visualizzato nel riquadro del portale indica il valore impostato per il campionamento per inserimento. Non rappresenta la frequenza di campionamento effettiva se è operativo qualsiasi tipo di campionamento dell'SDK (adattivo o a frequenza fissa).
Quale tipo di campionamento è opportuno usare?
Usare il campionamento per inserimento se:
- Si usa spesso la quota mensile dei dati di telemetria.
- Si ricevono troppi dati di telemetria dal Web browser degli utenti.
- Si usa una versione dell'SDK che non supporta il campionamento, ad esempio le versioni di ASP.NET precedenti alla 2.0.
Usare il campionamento a frequenza fissa se:
- È necessario sincronizzare il campionamento tra client e server per spostarsi tra gli eventi correlati. Ad esempio, le visualizzazioni di pagina e le richieste HTTP in Cerca durante l'analisi degli eventi.
- Si è certi della percentuale di campionamento appropriata per l'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.
Usare il campionamento adattivo:
Se le condizioni per l'uso di altre forme di campionamento non sono applicabili, è consigliabile adottare il campionamento adattativo. Questa impostazione è abilitata per impostazione predefinita in ASP.NET/ASP.NET Core SDK. Non riduce il traffico fino al raggiungimento di una frequenza minima specificata. Di conseguenza, i siti con bassi livelli di uso probabilmente non vengono campionati affatto.
Sapere se il campionamento è in esecuzione
Usare una query di Log Analytics per trovare la frequenza di campionamento.
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, il tipo di dati di telemetria è sottoposto a campionamento.
Importante
Application Insights non esegue il campionamento della sessione, delle metriche (incluse le metriche personalizzate) o dei tipi di telemetria del contatore delle prestazioni in una delle tecniche di campionamento. Questi tipi vengono sempre esclusi dal campionamento perché una riduzione della precisione può essere altamente indesiderata per questi tipi di telemetria.
Accuratezza delle query su log e frequenze di campionamento elevate
Con l'aumento delle prestazioni dell'applicazione, è possibile che elabori decine, centinaia o migliaia di elementi di lavoro al secondo. La registrazione di un evento per ognuno di essi non è efficace sia a livello di risorse che di costi. Application Insights usa il campionamento per adattarsi alla crescita del volume di telemetria in modo flessibile e per controllare l'utilizzo e i costi delle risorse.
Avviso
Possono esserci effetti sull'integrità della visualizzazione end-to-end di un'operazione distribuita se un'applicazione nell'operazione distribuita ha attivato il campionamento. Ogni applicazione prende decisioni di campionamento diverse in un'operazione distribuita, pertanto è possibile che i dati di telemetria per un ID operazione vengano salvati da un'applicazione mentre altre applicazioni potrebbero decidere di non campionare i dati di telemetria per lo stesso ID operazione.
Con l'aumento delle frequenze di campionamento, la precisione delle query basate su log diminuisce e viene gonfiata. Si ha un effetto sulla precisione delle query basate su log solo quando il campionamento è abilitato e le frequenze di campionamento si trovano in un intervallo superiore (~ 60%). L'impatto varia in base ai tipi di telemetria, ai conteggi dei dati di telemetria per ogni operazione e ad altri fattori.
Gli SDK usano metriche preaggregate per risolvere i problemi causati dal campionamento. Per altre informazioni su queste metriche, vedere Azure Application Insights - Monitoraggio di Azure | Microsoft Docs. Gli SDK identificano le proprietà rilevanti dei dati registrati ed estraggono le statistiche prima del campionamento. Per ridurre al minimo l'uso delle risorse e i costi, le metriche vengono aggregate. Questo processo genera pochi elementi di telemetria delle metriche al minuto, anziché migliaia di elementi di telemetria degli eventi. Ad esempio, queste metriche potrebbero segnalare "questa app Web ha elaborato 25 richieste" all'account MDM, con un itemCount
di 100 nel record di telemetria della richiesta inviata. Queste metriche preaggregate forniscono numeri accurati e sono affidabili anche quando il campionamento influisce sui risultati delle query basate su log. È possibile visualizzarle nel riquadro Metriche del portale di Application Insights.
Domande frequenti
Il campionamento influisce sull'accuratezza degli avvisi?
- Sì. Gli avvisi possono essere attivati solo sui dati campionati. L'applicazione di filtri aggressivi può comportare la mancata attivazione degli avvisi come previsto.
Nota
Il campionamento non viene applicato alle metriche, ma le metriche possono essere derivate da dati campionati. In questo modo il campionamento potrebbe influire indirettamente sull'accuratezza degli avvisi.
Qual è il comportamento di campionamento predefinito negli SDK ASP.NET e ASP.NET Core?
- 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.
Per impostazione predefinita, il sistema aggiunge due nodi
AdaptiveSamplingTelemetryProcessor
: uno include il tipoEvent
nel campionamento, mentre l'altro lo esclude. Questa configurazione limita i dati di telemetria a cinque elementi di tipoEvent
e cinque elementi di tutti gli altri tipi combinati, assicurando che il campionamentoEvents
avvenga separatamente dagli altri tipi di telemetria.
Usare gli esempi di nella sezione precedente di questa pagina per modificare questo comportamento predefinito.
I dati di telemetria possono essere campionati più volte?
- No. SamplingTelemetryProcessors ignora gli elementi già campionati dalle considerazioni per il campionamento. Lo stesso vale anche per il campionamento per inserimento, che non applica il campionamento agli elementi già campionati nell'SDK stesso.
Perché il campionamento non è una semplice "raccolta di percentuale X di ogni tipo di telemetria"?
- Anche se questo approccio al campionamento offre un alto livello di precisione nelle approssimazioni delle metriche, non permette di correlare i dati diagnostici per utente, sessione e richiesta, come è indispensabile per la diagnostica. Il campionamento funziona quindi meglio con criteri del tipo "raccolta di tutti gli elementi della telemetria per una percentuale X di utenti dell'app" o "raccolta di tutta la telemetria per una percentuale X di richieste app". 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".
La percentuale di campionamento può variare nel tempo?
- Sì, il campionamento adattivo modifica gradualmente la percentuale di campionamento, in base al volume attualmente osservato della telemetria.
Se si usa il campionamento a frequenza fissa, come stabilire la percentuale di campionamento ideale per l'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.
In caso contrario, è necessario usare l'intuito. Analizzare l'uso della telemetria corrente in Application Insights, osservare le possibili limitazioni in corso e stimare il volume della telemetria raccolta. Questi tre input, insieme al piano tariffario selezionato, suggeriscono di quanto ridurre il volume dei dati di telemetria raccolti. Tuttavia, un aumento nel numero degli utenti o qualsiasi altra migrazione nel volume di telemetria potrebbe invalidare la stima.
Cosa accade se si configura una percentuale di campionamento troppo bassa?
- Una percentuale di campionamento troppo bassa causa un campionamento eccessivamente aggressivo e riduce la precisione delle approssimazioni quando Application Insights tenta di compensare la visualizzazione dei dati per la riduzione del volume dei dati. Anche l'esperienza di diagnostica potrebbe risultare compromessa, perché possono essere campionate alcune richieste lente o con errori.
Cosa accade se si configura una percentuale di campionamento troppo alta?
- Configurando una percentuale di campionamento troppo elevata (non abbastanza aggressiva), si ottiene una riduzione insufficiente del volume dei dati di telemetria raccolti. Può 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 a causa di eccedenze.
Cosa accade se si configurano sia le impostazioni IncludedTypes che ExcludedTypes?
- È consigliabile non impostare sia
ExcludedTypes
cheIncludedTypes
nella configurazione per evitare conflitti e assicurarsi che le impostazioni di raccolta dei dati di telemetria siano chiare. - I tipi di telemetria elencati in
ExcludedTypes
vengono esclusi anche se sono impostati anche nelle impostazioni diIncludedTypes
. ExcludedTypes avrà la precedenza su IncludedTypes.
Su quali piattaforme è possibile usare il campionamento?
- Se l'SDK non esegue il campionamento, è possibile che venga eseguito automaticamente il campionamento per inserimento per i dati di telemetria superiori a un determinato volume. Questa configurazione funziona, ad esempio, se si usa una versione precedente di ASP.NET SDK o Java SDK.
- Se si usa la versione corrente dell'SDK ASP.NET o ASP.NET Core, ospitata in Azure o nel server in uso, per impostazione predefinita viene eseguito il campionamento adattivo, ma è comunque possibile passare al campionamento a frequenza fissa, come descritto in precedenza. Con il campionamento a frequenza fissa, l'SDK del browser si sincronizza automaticamente con gli eventi correlati al campione.
- Se si usa l'agente Java corrente, è possibile configurare
applicationinsights.json
(per Java SDK, configurareApplicationInsights.xml
) per attivare il campionamento a frequenza fissa. Il campionamento viene disattivato per impostazione predefinita. Con il campionamento a frequenza fissa, l'SDK del browser e il server si sincronizzano automaticamente con gli eventi correlati al campione.
Esistono alcuni eventi rari che si vuole visualizzare sempre. Come è possibile passarli al modulo di campionamento?
Il modo migliore per visualizzare sempre determinati eventi consiste nello scrivere un TelemetryInitializer personalizzato, che imposta
SamplingPercentage
su 100 per l'elemento di telemetria da conservare, come illustrato nell'esempio seguente. È garantito che gli inizializzatori vengano eseguiti prima dei processori di telemetria (incluso il campionamento), in modo da assicurarsi che tutte le tecniche di campionamento escludano questo elemento da eventuali considerazioni sul campionamento. Gli inizializzatori di telemetria personalizzati sono disponibili in ASP.NET SDK, ASP.NET Core SDK, JavaScript SDK e Java SDK. Ad esempio, è possibile configurare un inizializzatore di telemetria usando ASP.NET SDK:public class MyTelemetryInitializer : ITelemetryInitializer { public void Initialize(ITelemetry telemetry) { if(somecondition) { ((ISupportSampling)telemetry).SamplingPercentage = 100; } } }
Versioni precedenti dell'SDK
Il campionamento adattivo è abilitato per impostazione predefinita ed è disponibile in Application Insights SDK per ASP.NET v2.0.0-beta3 e versioni successive, Microsoft.ApplicationInsights.AspNetCore SDK v2.2.0-beta1 e versioni successive.
Il campionamento a frequenza fissa è una funzionalità di ASP.NET SDK a partire dalla versione 2.0.0 e di Java SDK a partire dalla versione 2.0.1.
Prima della versione 2.5.0-beta2 di ASP.NET SDK e della versione 2.2.0-beta3 di ASP.NET Core SDK, le decisioni di campionamento per le applicazioni che definiscono gli utenti (come la maggior parte delle applicazioni Web) si basavano sull'hash dell'ID utente. Per le applicazioni che non definiscono gli utenti (ad esempio i servizi Web), la decisione si basa sull'ID operazione della richiesta. Le versioni recenti di ASP.NET e ASP.NET Core SDK ora usano l'ID operazione per le decisioni relative al campionamento.
Passaggi successivi
- applicazione di filtri può garantire un controllo più rigoroso sui dati inviati dall'SDK.
- Leggere l'articolo di Developer Network Ottimizzare i dati di telemetria con Application Insights.