Échantillonnage dans Application Insights
L’échantillonnage est une fonctionnalité Application Insights. Il s’agit de la méthode recommandée pour réduire le trafic, les coûts des données et les coûts de stockage de la télémétrie, tout en conservant une analyse statistiquement correcte des données d’application. L’échantillonnage vous permet aussi d’éviter qu’Application Insights limite votre télémétrie. Le filtre d’échantillonnage sélectionne des éléments liés entre eux, pour vous permettre de naviguer entre les éléments quand vous effectuez un diagnostic.
Lorsque les métriques sont présentées dans le portail, elles sont renormalisées pour prendre en compte l’échantillonnage. Cette opération réduit tout effet sur les statistiques.
Remarque
- Si vous avez adopté notre OpenTelemetry Distro et recherchez des options de configuration, reportez-vous à Activer l'échantillonnage.
Remarque
La documentation suivante s’appuie sur l’API classique d’Application Insights. Le plan à long terme pour Application Insights est de collecter des données en utilisant OpenTelemetry. Pour plus d’informations, consultez Activer Azure Monitor OpenTelemetry pour les applications .NET, Node.js, Python et Java et notre feuille de route OpenTelemetry. L’aide sur la migration est disponible pour .NET, Node.js et Python.
Bref résumé
- Il existe trois types d’échantillonnages différents : échantillonnage adaptatif, échantillonnage à fréquence fixe et échantillonnage d’ingestion.
- L'échantillonnage adaptatif est activé par défaut dans toutes les dernières versions des kits de développement logiciel (SDK) Application Insights ASP.NET et ASP.NET Core, ainsi que dans Azure Functions.
- L’échantillonnage à fréquence fixe est disponible dans les versions récentes des SDK Application Insights pour ASP.NET, ASP.NET Core, Java (à la fois l’agent et le SDK), JavaScript et Python.
- En Java, les remplacements d’échantillonnage sont disponibles et sont utiles lorsque vous devez appliquer des taux d’échantillonnage différents aux dépendances sélectionnées, aux demandes et aux vérifications d’état. Utilisez des remplacements d’échantillonnage pour analyser des dépendances bruyantes alors que, par exemple, toutes les erreurs importantes sont conservées à 100 %. Ce comportement correspond à une forme d’échantillonnage fixe qui vous donne un niveau de contrôle affiné sur vos données de télémétrie.
- L’échantillonnage d’ingestion fonctionne sur le point de terminaison de service Application Insights. Il s’applique seulement quand aucun autre échantillonnage n’est appliqué. Si le SDK échantillonne votre télémétrie, l’échantillonnage d’ingestion est désactivé.
- Pour les applications web, si vous consignez des événements personnalisés et que vous devez garantir qu’un ensemble d’événements sont conservés ou ignorés conjointement, les événements doivent avoir la même valeur pour
OperationId
. - Si vous écrivez des requêtes Analytics, vous devez tenir compte de l’échantillonnage. En particulier, au lieu de compter simplement les enregistrements, vous devez utiliser
summarize sum(itemCount)
. - Certains types de données de télémétrie, notamment les métriques de performances et les métriques personnalisées, sont toujours conservées, que l’échantillonnage soit ou non activé.
Le tableau suivant récapitule les types d’échantillonnage disponibles pour chaque SDK et chaque type d’application :
Kit de développement logiciel (SDK) Application Insights | Échantillonnage adaptatif pris en charge | Échantillonnage à fréquence fixe pris en charge | Échantillonnage d’ingestion pris en charge |
---|---|---|---|
ASP.NET | Oui (activé par défaut) | Oui | Seulement si aucun autre échantillonnage n’est appliqué |
ASP.NET Core | Oui (activé par défaut) | Oui | Seulement si aucun autre échantillonnage n’est appliqué |
Azure Functions | Oui (activé par défaut) | Non | Seulement si aucun autre échantillonnage n’est appliqué |
Java | Non | Oui | Seulement si aucun autre échantillonnage n’est appliqué |
JavaScript | Non | Oui | Seulement si aucun autre échantillonnage n’est appliqué |
Node.JS | Non | Oui | Seulement si aucun autre échantillonnage n’est appliqué |
Python | Non | Oui | Seulement si aucun autre échantillonnage n’est appliqué |
Tous les autres | Non | Non | Oui |
Notes
- L’agent d’application Java 3.4.0 et versions ultérieures utilise l’échantillonnage à débit limité comme valeur par défaut lors de l’envoi de données de télémétrie à Application Insights. Pour plus d’informations, consultez Échantillonnage à débit limité.
- Les informations de la majeure partie de cette page s’appliquent aux versions actuelles des SDK Application Insights. Pour plus d’informations sur les versions antérieures des SDK, consultez les versions antérieures des SDK.
Quand utiliser l’échantillonnage
En général, pour la plupart des applications petites et moyennes, vous n’avez pas besoin de l’échantillonnage. Pour obtenir les informations de diagnostic les plus utiles et les statistiques les plus précises, le mieux est de collecter les données sur toutes vos activités utilisateur.
Les principaux avantages de l’échantillonnage sont les suivants :
- Le service Application Insights supprime (« limite ») des points de données quand votre application envoie un taux de télémétrie élevé dans un court laps de temps. L’échantillonnage réduit la probabilité que votre application subisse des limitations.
- Pour respecter le quota de points de données pour votre niveau tarifaire.
- Pour réduire le trafic réseau généré par la collecte de données de télémétrie.
Fonctionnement de l’échantillonnage
L'algorithme d'échantillonnage décide des éléments de télémétrie qu'il conserve ou annule, en fonction du kit de développement logiciel (SDK) ou du service Application Insights qui effectue l'échantillonnage. Il suit des règles pour préserver tous les points de données interdépendants, garantissant ainsi qu'Application Insights offre une expérience de diagnostic fiable et exploitable, même avec moins de données. Si un échantillon inclut par exemple une requête qui a échoué, il conserve tous les éléments de télémétrie associés, notamment les exceptions et les traces. Ainsi, lorsque vous affichez les détails d'une requête dans Application Insights, vous voyez toujours la requête et la télémétrie associée.
La décision d’échantillonnage repose sur l’identifiant d’opération de la requête, ce qui signifie que tous les éléments de télémétrie appartenant à une opération particulière sont conservés ou supprimés. Pour les éléments de télémétrie qui ne sont pas associés à un ID d’opération (comme des éléments de télémétrie provenant de threads asynchrones sans contexte HTTP), l’échantillonnage capture simplement un pourcentage d’éléments de télémétrie de chaque type.
Lorsque les données de télémétrie vous sont restituées, le service Application Insights ajuste les mesures en fonction du même pourcentage d’échantillonnage que celui utilisé au moment de la collecte, de manière à compenser les points de données manquants. Par conséquent, lorsqu’ils consultent les données de télémétrie dans Application Insights, les utilisateurs constatent des approximations correctes d’un point de vue statistique et très proches des chiffres réels.
La précision de l’approximation dépend en grande partie du pourcentage d’échantillonnage configuré. Elle est également plus précise pour les applications qui gèrent un grand nombre de requêtes similaires générées par un grand nombre d’utilisateurs. En revanche, pour les applications qui ne sont pas soumises à une charge importante, l’échantillonnage n’est pas nécessaire, car ces applications peuvent généralement envoyer toutes leurs données de télémétrie sans dépasser leur quota ni entraîner de perte de données liée à une limitation de la bande passante.
Types d’échantillonnage
Il existe trois méthodes d’échantillonnage différentes :
L’échantillonnage adaptatif ajuste automatiquement le volume de données de télémétrie envoyées à partir du SDK dans votre application ASP.NET/ASP.NET Core, et à partir d’Azure Functions. Il s'agit de l'échantillonnage par défaut lorsque vous utilisez le kit de développement logiciel (SDK) ASP.NET ou ASP.NET Core. L’échantillonnage adaptatif est actuellement disponible uniquement pour la télémétrie ASP.NET/ASP.NET Core côté serveur et pour Azure Functions.
L’échantillonnage à débit fixe réduit le volume de données de télémétrie envoyées par votre serveur ASP.NET/ASP.NET Core ou Java et par le navigateur de vos utilisateurs. Vous définissez le débit. Le client et le serveur synchronisent leur échantillonnage afin que, dans l'option Search, vous puissiez naviguer entre le mode Page et les requêtes associées.
L’échantillonnage d’ingestion est effectué sur le point de terminaison de service Application Insights. Il ignore certaines données de télémétrie provenant de votre application, à une fréquence d’échantillonnage que vous définissez. Le trafic des données de télémétrie reçu de votre application n’est pas réduit, mais cela vous permet de respecter votre quota mensuel. L’avantage principal de l’échantillonnage d’ingestion est que vous pouvez définir la fréquence d’échantillonnage sans avoir à redéployer votre application. L’échantillonnage d’ingestion fonctionne uniformément pour tous les serveurs et tous les clients, mais il ne s’applique pas quand d’autres types d’échantillonnage sont utilisés.
Important
Si les méthodes d’échantillonnage à taux adaptatif ou fixe sont activées pour un type de données de télémétrie, l’échantillonnage d’ingestion sera désactivé pour ces données de télémétrie. Toutefois, les types de télémétrie qui sont exclus de l’échantillonnage au niveau du SDK seront toujours soumis à un échantillonnage d’ingestion au taux défini dans le portail.
échantillonnage adaptatif
L’échantillonnage adaptatif a une incidence sur le volume de données de télémétrie envoyées à partir de votre application de serveur web au point de terminaison de service Application Insights.
Conseil
L’échantillonnage adaptatif est activé par défaut quand vous utilisez le SDK ASP.NET ou SDK ASP.NET Core, et il est également activé par défaut pour Azure Functions.
Le volume s'ajuste automatiquement pour rester dans la limite du taux MaxTelemetryItemsPerSecond
. Si l'application génère peu de télémétrie, par exemple lors d'un débogage ou d'une faible utilisation, elle n'annule pas les éléments tant que le volume reste inférieur à MaxTelemetryItemsPerSecond
. Lorsque le volume de télémétrie augmente, le taux d'échantillonnage est ajusté pour atteindre le volume cible. Cet ajustement, recalculé à intervalles réguliers, est basé sur la moyenne mobile du taux de transmission sortant.
Pour atteindre le volume cible, certaines des données de télémétrie générées sont ignorées. Toutefois, comme d’autres types d’échantillonnage, l’algorithme conserve les éléments de télémétrie associés. Par exemple, lorsque vous examinez la télémétrie dans Search, vous êtes en mesure de trouver la requête liée à une exception particulière.
Les données de mesure telles que le taux de demandes et le taux d’exceptions sont ajustées pour compenser le taux d’échantillonnage, afin qu’elles affichent des valeurs approximatives dans Metrics Explorer.
Configuration de l’échantillonnage adaptatif pour les applications ASP.NET
Notes
Cette section s’applique aux applications ASP.NET, et non pas aux applications ASP.NET Core. Découvrez plus d’informations sur la configuration de l’échantillonnage adaptatif pour les applications ASP.NET Core plus loin dans ce document.
Dans ApplicationInsights.config
, vous pouvez ajuster plusieurs paramètres dans le nœud AdaptiveSamplingTelemetryProcessor
. Les chiffres indiqués correspondent aux valeurs par défaut :
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
Taux cible d’opérations logiques que l’algorithme adaptatif vise à collecter sur chaque serveur hôte. Si votre application web s’exécute sur plusieurs hôtes, réduisez cette valeur afin de ne pas dépasser votre débit de trafic cible sur le portail Application Insights.
<EvaluationInterval>00:00:15</EvaluationInterval>
Intervalle auquel le taux actuel de télémétrie est réévalué. L’évaluation est effectuée sous forme de moyenne mobile. Vous souhaiterez peut-être raccourcir cet intervalle si vos données de télémétrie sont soumises à des pics soudains.
<SamplingPercentageDecreaseTimeout>00:02:00</SamplingPercentageDecreaseTimeout>
Lorsque la valeur du pourcentage d'échantillonnage change, elle détermine la vitesse à laquelle nous pouvons réduire à nouveau le pourcentage d'échantillonnage pour capturer moins de données.
<SamplingPercentageIncreaseTimeout>00:15:00</SamplingPercentageIncreaseTimeout>
Lorsque la valeur du pourcentage d'échantillonnage change, elle détermine le délai dans lequel nous pouvons augmenter à nouveau le pourcentage d'échantillonnage pour capturer plus de données.
<MinSamplingPercentage>0.1</MinSamplingPercentage>
Quand le pourcentage d’échantillonnage varie, quelle valeur minimale pouvons-nous définir ?
<MaxSamplingPercentage>100.0</MaxSamplingPercentage>
Quand le pourcentage d’échantillonnage varie, quelle valeur maximale pouvons-nous définir ?
<MovingAverageRatio>0.25</MovingAverageRatio>
Lors du calcul de la moyenne mobile, cette valeur spécifie le pondération à affecter à la valeur la plus récente. Utilisez une valeur inférieure ou égale à 1. Plus les valeurs sont petites, moins l’algorithme est réactif en cas de modifications brusques.
<InitialSamplingPercentage>100</InitialSamplingPercentage>
Quantité de données télémétriques à échantillonner au démarrage de l'application. Ne diminuez pas cette valeur pendant le débogage.
<ExcludedTypes>type;type</ExcludedTypes>
Une liste des types (délimités par des points-virgules) que vous ne voulez pas voir échantillonnés. Les types reconnus sont :
Dependency
,Event
,Exception
,PageView
,Request
,Trace
. Toute la télémétrie des types spécifiés est transmise ; les types non spécifiés sont échantillonnés.<IncludedTypes>type;type</IncludedTypes>
Une liste des types (délimités par des points-virgules) que vous voulez voir échantillonnés. Les types reconnus sont :
Dependency
,Event
,Exception
,PageView
,Request
,Trace
. Les types spécifiés sont échantillonnés ; toute la télémétrie des autres types est toujours transmise.
Pour désactiver l’échantillonnage adaptatif, supprimez le ou les nœuds AdaptiveSamplingTelemetryProcessor
de ApplicationInsights.config
.
Alternative : Configurer l’échantillonnage adaptatif dans le code
Au lieu de définir le paramètre d’échantillonnage dans le fichier .config
, vous pouvez définir ces valeurs par programmation.
Supprimez tous les nœuds
AdaptiveSamplingTelemetryProcessor
du fichier.config
.Utilisez l’extrait de code suivant pour configurer l’échantillonnage adaptatif :
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();
Vous pouvez également ajuster le taux d’échantillonnage pour chaque type de données de télémétrie individuellement, ou même exclure complètement certains types de l’échantillonnage :
// 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");
Configuration de l’échantillonnage adaptatif pour les applications ASP.NET Core
Les applications ASP.NET Core peuvent être configurées dans le code ou via le fichier appsettings.json
. Pour plus d’informations, consultez Configuration dans ASP.NET Core.
L’échantillonnage adaptatif est activé par défaut pour toutes les applications ASP.NET Core. Vous pouvez désactiver ou personnaliser le comportement d’échantillonnage.
Désactivation de l’échantillonnage adaptatif
La fonctionnalité d’échantillonnage par défaut peut être désactivée lors de l’ajout d’un service Application Insights.
Ajoutez ApplicationInsightsServiceOptions
après la méthode WebApplication.CreateBuilder()
dans le fichier 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();
Le code ci-dessus va désactiver l’échantillonnage adaptatif. Suivez les étapes suivantes pour ajouter l'échantillonnage avec plus d'options de personnalisation.
Configurer les paramètres d’échantillonnage
Utilisez les méthodes d'extension suivantes de TelemetryProcessorChainBuilder
pour personnaliser le comportement de l'échantillonnage.
Important
Si vous utilisez cette méthode pour configurer l’échantillonnage, veillez à définir la propriété aiOptions.EnableAdaptiveSampling
sur false
lors de l’appel de AddApplicationInsightsTelemetry()
. Après avoir effectué cette modification, vous devez exactement suivre les instructions du bloc de code suivant afin de réactiver l'échantillonnage adaptatif avec vos personnalisations existantes. Dans le cas contraire, cela peut entraîner une ingestion excessive de données. Testez toujours les paramètres d’échantillonnage après modification et définissez une limite de données quotidienne appropriée pour vous aider à contrôler vos coûts.
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();
Vous pouvez personnaliser d'autres paramètres d'échantillonnage en utilisant la classe SamplingPercentageEstimatorSettings :
using Microsoft.ApplicationInsights.WindowsServer.Channel.Implementation;
telemetryProcessorChainBuilder.UseAdaptiveSampling(new SamplingPercentageEstimatorSettings
{
MinSamplingPercentage = 0.01,
MaxSamplingPercentage = 100,
MaxTelemetryItemsPerSecond = 5
}, null, excludedTypes: "Dependency");
Configuration de l’échantillonnage adaptatif pour Azure Functions
Suivez les instructions de cette page pour configurer l’échantillonnage adaptatif pour les applications qui s’exécutent dans Azure Functions.
Échantillonnage à fréquence fixe
L’échantillonnage à fréquence fixe réduit le trafic envoyé depuis votre serveur web et depuis les navigateurs web. À la différence de l’échantillonnage adaptatif, il réduit les données de télémétrie à un débit fixe choisi par vos soins. L’échantillonnage à fréquence fixe est disponible pour les applications ASP.NET, ASP.NET Core, Java et Python.
Comme les autres techniques, elle conserve également les éléments associés. Elle synchronise aussi l’échantillonnage du client et du serveur, de manière à conserver les éléments liés. Par exemple, lorsque vous regardez le mode Page de la recherche, vous voyez les requêtes serveur liées.
Dans Metrics Explorer, les taux tels que le nombre de demandes et d’exceptions sont multipliés par un facteur pour compenser le taux d’échantillonnage, afin qu’ils soient le plus précis possible.
Configuration de l’échantillonnage à fréquence fixe pour les applications ASP.NET
Désactivez l’échantillonnage adaptatif : Dans
ApplicationInsights.config
, supprimez ou placez en commentaire le nœudAdaptiveSamplingTelemetryProcessor
.<TelemetryProcessors> <!-- Disabled adaptive sampling: <Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel"> <MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond> </Add> -->
Activez le module d’échantillonnage à débit fixe. Ajoutez cet extrait de code à
ApplicationInsights.config
:Dans cet exemple, SamplingPercentage est égal à 20, ce qui signifie que 20 % de tous les éléments sont échantillonnés. Les valeurs dans Metrics Explorer sont multipliées par (100 / 20) = 5 pour compenser.
<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>
Au lieu de définir le paramètre d’échantillonnage dans le fichier
ApplicationInsights.config
, vous pouvez aussi définir ces valeurs programmatiquement :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();
Configuration de l’échantillonnage à fréquence fixe pour les applications ASP.NET Core
Désactivez l’échantillonnage adaptatif
Des modifications peuvent être apportées après la méthode
WebApplication.CreateBuilder()
avecApplicationInsightsServiceOptions
:var builder = WebApplication.CreateBuilder(args); var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions(); aiOptions.EnableAdaptiveSampling = false; builder.Services.AddApplicationInsightsTelemetry(aiOptions); var app = builder.Build();
Activez le module d’échantillonnage à débit fixe
Des modifications peuvent être effectuées après la méthode
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();
Configuration des remplacements d’échantillonnage et de l’échantillonnage à fréquence fixe pour les applications Java
Par défaut, aucun échantillonnage n’est activé dans l’instrumentation automatique et le SDK Java. Actuellement, l’instrumentation automatique Java, les remplacements d’échantillonnage et l’échantillonnage à taux fixe sont pris en charge. L’échantillonnage adaptatif n’est pas pris en charge dans Java.
Configuration de l’instrumentation automatique Java
- Pour configurer les remplacements d’échantillonnage qui remplacent l’échantillonnage par défaut et appliquent différents échantillonnages aux requêtes et dépendances sélectionnées, utilisez le Guide de remplacement d’échantillonnage.
- Pour configurer l’échantillonnage fixe qui s’applique à toutes votre télémétrie, utilisez le Guide d’échantillonnage à fréquence fixe.
Notes
Pour le pourcentage d’échantillonnage, choisissez un pourcentage proche de 100/N, où N est un nombre entier. L’échantillonnage ne prend actuellement en charge aucune autre valeur.
Configuration de l’échantillonnage à fréquence fixe pour les applications OpenCensus Python
Instrumentez votre application avec les derniers exportateurs OpenCensus Azure Monitor.
Notes
L’échantillonnage à fréquence fixe n’est pas disponible pour l’exportateur de métriques. Cela signifie que les métriques personnalisées sont les seuls types de données de télémétrie dans lesquels l’échantillonnage ne peut PAS être configuré. L’exportateur de métriques envoie toutes les données de télémétrie qu’il suit.
Échantillonnage à fréquence fixe pour le suivi
Vous pouvez spécifier un sampler
dans le cadre de votre configuration Tracer
. Si aucun échantillonneur explicite n'est fourni, ProbabilitySampler
est utilisé par défaut. ProbabilitySampler
utilise un taux de 1 / 10000 par défaut, ce qui signifie qu'une demande sur 10 000 est envoyée à Application Insights. Si vous souhaitez spécifier un taux d'échantillonnage, reportez-vous aux détails suivants.
Pour spécifier un taux d’échantillonnage, vérifiez que votre Tracer
spécifie un échantillonneur avec un taux d’échantillonnage compris entre 0,0 et 1,0 (inclusivement). Un taux d'échantillonnage de 1.0 représente 100 %, ce qui signifie que toutes vos requêtes sont envoyées comme télémétrie à Application Insights.
tracer = Tracer(
exporter=AzureExporter(
instrumentation_key='00000000-0000-0000-0000-000000000000',
),
sampler=ProbabilitySampler(1.0),
)
Échantillonnage à fréquence fixe pour les journaux
Vous pouvez configurer l’échantillonnage à fréquence fixe pour AzureLogHandler
en modifiant l’argument facultatif logging_sampling_rate
. Si aucun argument n'est fourni, un taux d'échantillonnage de 1,0 est utilisé. Un taux d'échantillonnage de 1,0 représente 100 %, ce qui signifie que toutes vos requêtes sont envoyées en tant que données télémétriques à Application Insights.
handler = AzureLogHandler(
instrumentation_key='00000000-0000-0000-0000-000000000000',
logging_sampling_rate=0.5,
)
Configuration de l’échantillonnage à fréquence fixe pour des pages web avec JavaScript
Les pages web basées sur JavaScript peuvent être configurées pour utiliser Application Insights. La télémétrie est envoyée à partir de l’application cliente qui s’exécute dans le navigateur de l’utilisateur, et les pages peuvent être hébergées à partir de n’importe quel serveur.
Quand vous configurez vos pages web basées sur JavaScript pour Application Insights, modifiez l’extrait de code JavaScript que vous obtenez auprès du portail Application Insights.
Conseil
Dans les applications ASP.NET avec du JavaScript, l’extrait de code va généralement dans _Layout.cshtml
.
Insérez une ligne de type samplingPercentage: 10,
avant la clé d’instrumentation :
<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>
Notes
Le support de l’ingestion de clé d’instrumentation prendra fin le 31 mars 2025. L’ingestion de clé d’instrumentation continuera de fonctionner, mais nous ne fournirons plus de mises à jour ni de support pour la fonctionnalité. Passez aux chaînes de connexion pour tirer parti des nouvelles fonctionnalités.
Pour le pourcentage d’échantillonnage, choisissez un pourcentage proche de 100/N, où N est un nombre entier. L’échantillonnage ne prend actuellement en charge aucune autre valeur.
Coordination de l’échantillonnage entre le côté serveur et le côté client
Le SDK JavaScript côté client participe à l’échantillonnage à fréquence fixe avec le SDK côté serveur. Les pages instrumentées n'envoient que la télémétrie côté client provenant du même utilisateur pour lequel le kit de développement logiciel (SDK)côté serveur a décidé de l'inclure dans l'échantillonnage. Cette logique est conçue pour préserver l’intégrité des sessions utilisateur entre les applications côté client et côté serveur. En partant de n’importe quel élément de télémétrie dans Application Insights, vous trouverez donc tous les autres éléments de télémétrie pour cet utilisateur ou cette session, et dans Recherche, vous pouvez naviguer entre les vues et les requêtes associées de la page.
Si vos données de télémétrie côté client et côté serveur ne montrent pas d’échantillons coordonnés :
- Vérifiez que vous avez activé l’échantillonnage à taux fixe à la fois sur le serveur et sur le client.
- Vérifiez que vous définissez le même pourcentage d’échantillonnage dans le client et dans le serveur.
- Assurez-vous que la version du kit de développement logiciel (SDK) est 2.0 ou supérieure.
échantillonnage d’ingestion
L’échantillonnage d’ingestion fonctionne au niveau où les données de télémétrie issues de votre serveur web, des navigateurs et des appareils atteignent le point de terminaison du service Application Insights. Bien qu’elle ne réduise pas le trafic des données de télémétrie envoyées à partir de votre application, elle réduit la quantité traitée et conservée (et facturée) par Application Insights.
Utilisez ce type d’échantillonnage si votre application dépasse souvent son quota mensuel et que vous ne pouvez recourir à aucun type d’échantillonnage basé sur le Kit de développement logiciel (SDK).
Définissez le taux d’échantillonnage dans la page Utilisation et estimation des coûts :
Comme d’autres types d’échantillonnage, l’algorithme conserve les éléments de télémétrie associés. Par exemple, lorsque vous examinez la télémétrie dans Search, vous êtes en mesure de trouver la requête liée à une exception particulière. Les données de mesure telles que les taux de demandes et le taux d’exceptions sont correctement conservées.
L'échantillonnage abandonne certains points de données, ce qui les rend indisponibles dans toute fonction d'Application Insights comme Exportation continue.
L'échantillonnage par ingestion ne fonctionne pas avec l'échantillonnage adaptatif ou à taux fixe. L'échantillonnage adaptatif s'active automatiquement avec le Kit de développement logiciel (SDK) ASP.NET et ASP.NET Core, dans Azure App Service, ou avec l'agent Application Insights. Lorsque le point de terminaison du service Application Insights reçoit la télémétrie et détecte un taux d'échantillonnage inférieur à 100 % (indiquant un échantillonnage actif), il ignore tout taux d'échantillonnage d'ingestion défini.
Avertissement
La valeur affichée sur la vignette du portail indique la valeur que vous avec définie pour l’échantillonnage d’ingestion. Il ne représente pas la fréquence d’échantillonnage réelle si un échantillonnage du SDK (adaptatif ou à fréquence fixe) est effectué.
Quel type d’échantillonnage dois-je utiliser ?
Utiliser l’échantillonnage d’ingestion dans les situations suivantes :
- Vous utilisez souvent votre quota mensuel de données de télémétrie.
- Vous obtenez un volume trop élevé de données de télémétrie des navigateurs web de vos utilisateurs.
- Vous utilisez une version du kit de développement logiciel (SDK) qui ne prend pas en charge l'échantillonnage : les versions ASP.NET antérieures à 2.0, par exemple.
Utilisez l’échantillonnage à débit fixe si :
- Vous avez besoin d'un échantillonnage synchronisé entre le client et le serveur pour naviguer entre des événements connexes. Par exemple, le mode Page et les requêtes HTTP dans Search pendant l'enquête sur les événements.
- Vous êtes sûr du pourcentage d’échantillonnage approprié pour votre application. Il doit être suffisamment élevé pour obtenir des mesures précises, mais inférieur au pourcentage engendrant le dépassement de votre quota de tarification et des limites de limitation.
Utilisez l’échantillonnage adaptatif :
Si les conditions d’utilisation des autres formes d’échantillonnage ne s’appliquent pas, nous vous recommandons l’échantillonnage adaptatif. Ce paramètre est activé par défaut dans le SDK ASP.NET/ASP.NET Core. Il ne réduit pas le trafic tant qu'un certain taux minimum n'est pas atteint, si bien que les sites peu utilisés ne sont probablement pas échantillonnés du tout.
Savoir si l’échantillonnage est en cours
Utilisez une requête Analytique pour trouver le taux d'échantillonnage.
union requests,dependencies,pageViews,browserTimings,exceptions,traces
| where timestamp > ago(1d)
| summarize RetainedPercentage = 100/avg(itemCount) by bin(timestamp, 1h), itemType
Si vous constatez que RetainedPercentage
pour n’importe quel type est inférieur à 100, c’est que ce type de télémétrie est échantillonné.
Important
Application Insights n’échantillonne pas les données de télémétrie des sessions, des métriques (y compris les métriques personnalisées) et des compteurs de performances selon ces techniques d’échantillonnage. Ces types sont toujours exclus de l’échantillonnage, car une réduction de la précision peut être non souhaitable pour ces types de données de télémétrie.
Précision des requêtes de journal et échantillonnages élevés
À mesure que l'application est mise à l'échelle, elle peut traiter des dizaines, des centaines ou des milliers d'éléments de travail par seconde. La journalisation d’un événement pour chacun d’eux n’est pas une ressource ni une solution économique. Application Insights utilise l’échantillonnage pour s’adapter au volume croissant de télémétrie de manière flexible et pour contrôler l’utilisation des ressources et le coût.
Avertissement
L’intégrité d’une vue de bout en bout d’une opération distribuée peut être affectée si une application de l’opération distribuée a activé l’échantillonnage. Les différentes décisions d’échantillonnage sont prises par chaque application dans une opération distribuée. la télémétrie d’un ID d’opération peut donc être enregistrée par une application, tandis que d’autres peuvent décider de ne pas échantillonner la télémétrie pour ce même ID d’opération.
Lorsque les taux d'échantillonnage augmentent, la précision des requêtes basées sur le journal diminue et est gonflée. La précision des requêtes basées sur les journaux n'est affectée que lorsque l'échantillonnage est activé et que les taux d'échantillonnage se situent dans une fourchette plus élevée (~ 60 %). L'impact varie en fonction des types de télémétrie, du nombre de télémétrie par opération et d'autres facteurs.
Les kits de développement logiciel (SDK) utilisent des métriques pré-agrégées pour résoudre les problèmes causés par l'échantillonnage. Pour en savoir plus sur ces métriques, reportez-vous à Azure Application Insights : Azure Monitor | Microsoft Docs. Les kits de développement logiciel (SDK) identifient les propriétés pertinentes des données enregistrées et extraient des statistiques avant l'échantillonnage. Pour réduire l'utilisation et les coûts des ressources, les métriques sont agrégées. Ce processus permet d'obtenir quelques éléments de télémétrie métrique par minute, plutôt que des milliers d'éléments de télémétrie d'événement. Par exemple, ces métriques peuvent signaler « cette application web a traité 25 requêtes » au compte MDM, avec un itemCount
de 100 dans l'enregistrement de télémétrie des requêtes envoyées. Ces métriques prédéfinies fournissent des chiffres précis et sont fiables même lorsque l'échantillonnage a un impact sur les résultats des requêtes basées sur les journaux. Vous pouvez les afficher dans le volet Métriques du portail Application Insights.
Forum aux questions
L’échantillonnage affecte-t-il la précision des alertes ?
- Oui. Les alertes peuvent uniquement se déclencher avec des données échantillonnées. Le filtrage agressif peut entraîner des alertes qui ne se déclenchent pas comme prévu.
Remarque
L’échantillonnage n’est pas appliqué aux métriques, mais les métriques peuvent être dérivées des données échantillonnées. De cette façon, l’échantillonnage peut affecter indirectement la précision des alertes.
Quel est le comportement par défaut de l’échantillonnage dans les kits SDK ASP.NET et ASP.NET Core ?
- Si vous utilisez une des dernières versions des kits de développement logiciel (SDK) ci-dessus, l'échantillonnage adaptatif est activé par défaut avec cinq éléments de télémétrie par seconde.
Par défaut, le système ajoute deux nœuds
AdaptiveSamplingTelemetryProcessor
: l'un inclut le typeEvent
dans l'échantillonnage, tandis que l'autre l'exclut. Cette configuration limite la télémétrie à cinq éléments de typeEvent
et à cinq éléments de tous les autres types combinés, en veillant à ce que lesEvents
soient échantillonnés séparément des autres types de télémétrie.
Utilisez les exemples de la section précédente de cette page pour changer ce comportement par défaut.
Les données de télémétrie peuvent-elles être échantillonnées plusieurs fois ?
- Non. Les SamplingTelemetryProcessor ignorent les éléments qui ont déjà été échantillonnés. Il en va de même pour l'échantillonnage de l'ingestion, qui n'applique pas l'échantillonnage aux éléments déjà échantillonnés dans le kit de développement logiciel (SDK) lui-même.
Pourquoi l’échantillonnage ne permet-il pas simplement de « collecter X % de chaque type de télémétrie » ?
- Bien que cette approche de l’échantillonnage puisse produire un haut niveau de précision dans les approximations des métriques, elle ne permettrait pas de mettre en corrélation les données de diagnostic par utilisateur, par session et par requête, ce qui est essentiel pour l’établissement de diagnostics. L'échantillonnage est donc plus efficace avec des stratégies comme « collecter tous les éléments de télémétrie pour X % des utilisateurs de l'application » ou « collecter tous les éléments de télémétrie pour X % des requêtes de l'application. » Pour les éléments de télémétrie qui ne sont pas associés aux requêtes (dans le cas, par exemple, d’un traitement asynchrone en arrière-plan), la solution consiste à « collecter X % de tous les éléments de chaque type de télémétrie ».
Le pourcentage d’échantillonnage peut-il évoluer au fil du temps ?
- Oui, l’échantillonnage adaptatif modifie progressivement le pourcentage d’échantillonnage en fonction du volume de données de télémétrie constaté.
Si j'utilise l'échantillonnage à taux fixe, comment puis-je savoir quel pourcentage d'échantillonnage fonctionne le mieux pour mon application ?
Pour cela, vous pouvez commencer par l’échantillonnage adaptatif, identifier le taux obtenu (voir la question précédente) et passer à l’échantillonnage à taux fixe en utilisant ce taux.
Autrement, vous devez procéder par tâtonnements. Analysez votre utilisation actuelle des données de télémétrie dans Application Insights, observez les limitations qui s’appliquent, puis estimez le volume de données de télémétrie collectées. Ces trois entrées, combinées au niveau tarifaire sélectionné, vous indiquent dans quelle mesure vous devrez réduire le volume de données de télémétrie collectées. Toutefois, une augmentation du nombre d’utilisateurs ou toute autre modification au niveau du volume des données de télémétrie peut invalider votre estimation.
Que se passe-t-il si je configure le pourcentage d’échantillonnage à un niveau trop faible ?
- Des pourcentages d’échantillonnage excessivement bas provoquent un échantillonnage trop agressif et réduisent la précision des approximations quand Application Insights tente de compenser la visualisation des données pour tenir compte de la réduction du volume de données. En outre, votre expérience de diagnostic peut être affectée négativement, car certaines des requêtes qui échouent rarement ou qui sont lentes peuvent être échantillonnées.
Que se passe-t-il si je configure le pourcentage d’échantillonnage à un niveau trop élevé ?
- La configuration d’un pourcentage d’échantillonnage trop élevé (c’est-à-dire pas assez agressif) aboutit à une réduction insuffisante du volume de données de télémétrie collectées. Vous pouvez toujours subir une perte de données de télémétrie liée à limitation de bande passante, et le coût d'utilisation d'Application Insights peut être plus élevé que prévu en raison des frais de surcharge.
Que se passe-t-il si je configure les paramètres IncludedTypes et ExcludedTypes ?
- Il est préférable de ne pas définir à la fois
ExcludedTypes
etIncludedTypes
dans votre configuration pour éviter tout conflit et garantir des paramètres de collecte de données de télémétrie clairs. - Les types de télémétrie répertoriés dans
ExcludedTypes
sont exclus même s’ils sont également définis dans les paramètresIncludedTypes
. Les types exclus sont prioritaires sur les IncludedTypes.
Sur quelles plates-formes puis-je utiliser l’échantillonnage ?
- L'échantillonnage d'ingestion peut se produire automatiquement pour toute télémétrie au-dessus d'un certain volume, si le Kit de développement logiciel (SDK)n'effectue pas d'échantillonnage. Cette configuration fonctionne par exemple si vous utilisez une version antérieure du kit de développement logiciel (SDK) ASP.NET ou du SDK Java.
- Si vous utilisez les kits de développement logiciel (SDK) ASP.NET ou ASP.NET Core actuels (hébergés dans Azure ou sur votre propre serveur), vous bénéficiez d'un échantillonnage adaptatif par défaut. Toutefois, vous pouvez passer à un taux fixe comme décrit précédemment. Avec l’échantillonnage à taux fixe, le Kit de développement logiciel (SDK) du navigateur se synchronise automatiquement pour échantillonner les événements connexes.
- Si vous utilisez l’agent Java actuel, vous pouvez configurer
applicationinsights.json
(pour le SDK Java, configurezApplicationInsights.xml
) pour activer l’échantillonnage à fréquence fixe. L’échantillonnage est désactivé par défaut. Avec l’échantillonnage à fréquence fixe, le SDK du navigateur et le serveur se synchronisent automatiquement pour échantillonner les événements associés.
Je souhaite que certains événements rares soient toujours affichés. Comment faire en sorte qu’ils soient disponibles hors du module d’échantillonnage ?
La meilleure façon de toujours voir certains événements est d'écrire un TelemetryInitializer personnalisé, qui définit
SamplingPercentage
à 100 sur l'élément de télémétrie que vous souhaitez conserver, comme le montre l'exemple suivant. Il est garanti que les initialiseurs s'exécutent avant les processeurs de télémétrie (incluant l'échantillonnage), ce qui garantit que toutes les techniques d'échantillonnage ignorent cet élément dans toutes les considérations d'échantillonnage. Des initialiseurs de données de télémétrie personnalisés sont disponibles dans les kits SDK ASP.NET, ASP.NET Core, JavaScript et Java. Par exemple, vous pouvez configurer un initialiseur de données de télémétrie à l’aide du SDK ASP.NET :public class MyTelemetryInitializer : ITelemetryInitializer { public void Initialize(ITelemetry telemetry) { if(somecondition) { ((ISupportSampling)telemetry).SamplingPercentage = 100; } } }
Versions antérieures du SDK
L’échantillonnage adaptatif est disponible pour le SDK Application Insights pour ASP.NET v2.0.0-beta3 et ultérieur, et pour le SDK Microsoft.ApplicationInsights.AspNetCore v2.2.0-beta1 et ultérieur, et il est activé par défaut.
L’échantillonnage à fréquence fixe est une fonctionnalités du SDK dans ASP.NET à partir de la version 2.0.0 et du SDK Java à partir de la version 2.0.1.
Avant la version 2.5.0-beta2 du kit de développement logiciel (SDK) ASP.NET et la version 2.2.0-beta3 du kit de développement logiciel (SDK) ASP.NET Core, les décisions d'échantillonnage pour les applications définissant un « utilisateur » (comme la plupart des applications web) reposaient sur le hachage de l'identifiant de l'utilisateur. Pour les applications ne définissant pas d'utilisateurs (comme les services web), il basait la décision sur l'identifiant d'opération de la requête. Les versions récentes des kits de développement logiciel (SDK) ASP.NET et ASP.NET Core utilisent désormais l'identifiant d'opération pour les décisions d'échantillonnage.
Étapes suivantes
- filtrage peut fournir un contrôle plus strict de ce que le Kit de développement logiciel (SDK) envoie.
- Lisez l’article Developer Network Optimiser la télémétrie avec Application Insights.