Cette traduction automatique est fournie pour votre commodité.
En cas d'incohérence entre la version anglaise et la version traduite, la version anglaise prévaudra. Veuillez visiter cette page pour plus d'informations.
Les échantillonneurs de l’agent APM contrôlent quelles transactions au sein d’un service donné votre agent envoie à New Relic. Cette page couvre les types d’échantillonneurs tels que ceux basés sur l’adaptatif et le ratio d’ID de trace, les cibles d’échantillonnage adaptatif, et la manière de configurer l’échantillonnage en fonction des décisions d’échantillonnage en amont.
Les exemples de configuration de ce guide utilisent le format YAML (agent Java). Pour la syntaxe spécifique à l’agent et la référence complète des paramètres, consultez :
Une décision d’échantillonnage se déroule en cinq étapes :
La requête arrive à votre service.
L’agent vérifie le contexte d’échantillonnage : s’agit-il d’une transaction racine, ou un service en amont a-t-il déjà pris une décision d’échantillonnage ?
L’agent applique l’échantillonneur approprié en fonction du contexte et de votre configuration.
L’agent prend une décision d’échantillonnage : échantillonner ou ne pas échantillonner.
L’agent propage la décision aux services en aval via les en-têtes de contexte de trace distribuée.
Contextes d'échantillonneur
Les agents APM utilisent trois contextes d’échantillonnage pour gérer différents scénarios de trace. Chaque contexte peut avoir sa propre configuration d’échantillonneur.
Un service en amont a décidé de ne pas échantillonner cette trace
Contrôlez l’échantillonnage des traces que le service en amont a rejetées
When it applies: la trace distribuée provient du service actuel (il s’agit du premier service dans la trace distribuée).
Example scenario: votre gateway d’API est le point d’entrée pour les requests des clients. Configurez l’échantillonnage racine pour capturer 20 % de ces traces initiées par les clients.
distributed_tracing:
sampler:
root:
trace_id_ratio_based:
ratio:0.2# 20% of traces originating here
When it applies: un service en amont a décidé d’échantillonner ces traces distribuées (le service en amont a envoyé une décision d’échantillonnage « sampled » dans le contexte de traces distribuées).
Common pattern: si le service en amont a échantillonné les traces distribuées, échantillonnez-les toujours dans le service actuel également :
distributed_tracing:
sampler:
remote_parent_sampled:
always_on # Always capture traces sampled by upstream
Alternative pattern: échantillonnez un pourcentage de la trace déjà échantillonnée par le service en amont :
distributed_tracing:
sampler:
remote_parent_sampled:
trace_id_ratio_based:
ratio:0.6# Sample 60% of traces sampled by upstream
Prudence
Ignorer les décisions "échantillonné" en amont peut créer des traces fragmentées où seuls certains services sont présents. Utilisez ce modèle uniquement lorsque vous avez un besoin spécifique de rejeter des traces qui ont été échantillonnées en amont.
When it applies: un service en amont a décidé de ne pas échantillonner ces traces distribuées (le service en amont a envoyé une décision d’échantillonnage "non échantillonné" dans le contexte de trace).
Common pattern: si le service en amont n’a pas échantillonné les traces distribuées, ne les échantillonnez jamais dans le service actuel :
distributed_tracing:
sampler:
remote_parent_not_sampled:
always_off # Don't sample traces that upstream rejected
Alternative pattern: échantillonnez certaines traces distribuées même si le service en amont a choisi de ne pas les échantillonner (à utiliser avec précaution) :
distributed_tracing:
sampler:
remote_parent_not_sampled:
trace_id_ratio_based:
ratio:0.05# Sample 5% even if upstream said not to
Prudence
Outrepasser les décisions « not sampled » en amont peut créer une trace fragmentée où seuls certains services sont présents. N’utilisez ce modèle que lorsque vous avez un besoin spécifique de voir l’activité dans un service en aval, même lorsque le service en amont ne l’a pas échantillonnée.
Types d’échantillonneur
Les agents APM fournissent quatre types d’échantillonneur, chacun adapté à différents scénarios.
Désactiver totalement l’échantillonnage pour un contexte spécifique
How it works: s’adapte dynamiquement au débit du service pour échantillonner un nombre cible de trace racines par minute, quel que soit le volume de trafic. Échantillonne toujours les transactions qui ont été échantillonnées par un service en amont et ne les compte pas dans la cible d’échantillonnage adaptatif.
Default behavior: les agents APM utilisent par défaut l’échantillonneur adaptatif. La plupart des agents APM ont une cible d’échantillonnage adaptatif par défaut de 10 transactions par minute. Consultez la documentation de configuration de chaque agent APM pour plus de détails.
When to use:
Vous souhaitez un nombre constant de transactions échantillonnées par minute, indépendamment des variations de trafic, plutôt qu'un pourcentage constant de trafic.
Vous souhaitez un ajustement dynamique pour espacer l’échantillonnage tout au long de chaque minute.
Vous souhaitez échantillonner toutes les transactions qui ont été échantillonnées par le service en amont et ne pas les comptabiliser dans la cible d'échantillonnage adaptatif.
Configuration:
distributed_tracing:
sampler:
root: adaptive
How it adapts:
Trafic faible (10 requests/min) : échantillonne chaque requête pour atteindre la cible
Trafic moyen (100 requests/min) : échantillonne environ la 5e requête pour atteindre la cible
Trafic élevé (1000 requests/min) : échantillonne environ la 50e request pour atteindre la cible
Conseil
L’échantillonneur adaptatif échantillonne toujours les traces qui ont été échantillonnées par un service en amont. Ces traces ne comptent pas pour la cible d’échantillonnage adaptatif configurée.
Cibles d’échantillonnage adaptatif
Les cibles d’échantillonnage adaptatif contrôlent le nombre de traces par minute que l’agent tente de capturer. Comprendre les cibles globales par rapport aux cibles par contexte est crucial pour un comportement prévisible.
Le adaptive_sampling_target est partagé par tous les contextes et constitue la cible d’échantillonnage par défaut. Un contexte peut outrepasser le adaptive_sampling_target global avec sa propre sampling_target spécifique au contexte.
Le adaptive_sampling_target peut être défini sur n’importe quel entier compris entre 1 et 120 inclus.
Configuration:
distributed_tracing:
sampler:
adaptive_sampling_target:10# Applied to all contexts without explicit override
root: adaptive
Result: l’agent tente de capturer environ 10 transactions par minute qui proviennent du service actuel.
Chaque contexte d’échantillonnage peut remplacer la cible globale par son propre sampling_target.
Le sampling_target peut être défini sur n’importe quel entier compris entre 1 et 120 inclus.
Configuration:
distributed_tracing:
sampler:
adaptive_sampling_target:10# Global default
root:
adaptive:
sampling_target:5# Overrides global default to capture 5 traces/min
Result: l’agent tente de capturer 5 transactions par minute provenant du service actuel, remplaçant la valeur par défaut globale de 10.
Raisons d'augmenter les cibles d'échantillonnage adaptatif
La valeur par défaut de 10 traces/minute a été conçue pour le tracing de transaction, et non pour le tracing distribué. Pour le tracing distribué, vous souhaitez souvent un échantillonnage plus élevé pour :
Fill service map gaps: les points de terminaison rares pourraient ne jamais être échantillonnés à 10/min
Improve trace diversity: voir plus de types de transaction et de chemins de code
How it works: échantillonne un pourcentage fixe de traces en fonction de l’ID de trace. Étant donné que la décision d’échantillonnage est basée sur l’ID de trace, la même trace obtiendra la même décision sur tous les services utilisant le même échantillonneur de ratio et le même agent de langage APM.
When to use:
Vous avez besoin d’un pourcentage cohérent de trafic échantillonné.
Vous souhaitez un échantillonnage déterministe (les mêmes traces distribuées sont échantillonnées sur tous les services avec le même agent de langage APM).
Vous souhaitez éviter le comportement de l’échantillonneur adaptatif où les transactions qui ont été échantillonnées par le service en amont sont toujours échantillonnées et ne comptent pas pour la cible d’échantillonnage adaptatif.
Chaque échantillonneur trace_id_ratio_baseddoit fournir une décimale ratio comprise entre 0,0 (exclus) et 1,0 (inclus). Le ratio spécifie le pourcentage de traces à capturer.
Important
La propriété ratio est requise lors de l’utilisation de l’échantillonneur trace_id_ratio_based. Si aucun ratio n’est défini, l’échantillonneur adaptatif par défaut sera utilisé à la place.
Configuration:
distributed_tracing:
sampler:
root:
trace_id_ratio_based:
ratio:0.1# 10% of traces
Important characteristic: l’ID de trace détermine si une trace est échantillonnée. Si plusieurs services utilisent le même ratio et le même agent de langage, ils prendront des décisions cohérentes pour la même trace.
Example: échantillonnez 10 % des traces distribuées racines et 50 % des traces distribuées échantillonnées en amont :
distributed_tracing:
sampler:
root:
trace_id_ratio_based:
ratio:0.1
remote_parent_sampled:
trace_id_ratio_based:
ratio:0.5
How it works: échantillonne toutes les transactions correspondant à ce contexte.
When to use:
Vous avez besoin d’une couverture de trace complète pour un contexte spécifique (root, remote_parent_sampled, remote_parent_not_sampled)
Vous souhaitez suivre ou remplacer la décision d’échantillonnage du service en amont
Configuration:
distributed_tracing:
sampler:
remote_parent_sampled:
always_on # Capture all upstream-sampled traces
Prudence
L’utilisation de always_on capturera chaque transaction pour le contexte donné, ce qui peut générer un volume de données important pour les services à fort trafic.
How it works: n’échantillonne aucune des transactions pour un contexte donné.
When to use:
Vous souhaitez accepter la décision du service en amont de ne pas échantillonner
Vous souhaitez désactiver l’échantillonnage pour un contexte spécifique
Configuration:
distributed_tracing:
sampler:
remote_parent_not_sampled:
always_off # Don't sample if upstream did NOT sample
Configuration suggérée
Avec un tel choix d'échantillonneurs, il peut être difficile de trouver la bonne configuration pour votre service. La meilleure façon de trouver la configuration qui vous convient est d'observer la distribution des traces que votre service a aujourd'hui, et d'apporter de petits ajustements pour tendre vers la distribution de traces que vous souhaitez.
Nous recommandons cette configuration comme point de départ :
distributed_tracing:
sampler:
root:
trace_id_ratio_based:
ratio:0.1
remote_parent_sampled:
always_on
remote_parent_not_sampled:
always_off
Cette configuration échantillonne 10 % des traces du contexte root, toutes les traces du contexte remote_parent_sampled, et aucune trace du contexte remote_parent_not_sampled.
Pour certaines applications, cette configuration est un point de départ raisonnable pour une distribution équilibrée des traces. Pour d’autres, par exemple celles où la plupart des traces proviennent d’un service en amont, cette configuration peut sur-prioriser les traces remote_parent_sampled et sous-prioriser les traces root. Dans ce cas, essayez de modifier la configuration remote_parent_sampled pour ne capturer qu’un pourcentage des trace échantillonnées en amont :
distributed_tracing:
sampler:
root:
trace_id_ratio_based:
ratio:0.1
remote_parent_sampled:
trace_id_ratio_based:
ratio:0.2# Sample 20% of sampled traces originating upstream, instead of all of them
remote_parent_not_sampled:
always_off
Et ensuite ?
Maintenant que vous comprenez l’échantillonnage :
Consultez la référence complète de configuration de l’échantillonneur pour votre agent : Java, Node.js, Python
La configuration de l’échantillonnage peut être complexe. Commencez par un modèle unique et itérez en fonction de votre volume de traces réel et de vos besoins. Utilisez les métriques de supportabilité et les requêtes de trace pour vérifier que votre configuration fonctionne comme prévu.