Les services gèrent souvent des endpoints dont vous ne souhaitez peut-être pas tracer le trafic (par exemple, les vérifications de santé). Ce guide explique les approches suivantes pour exclure ce trafic :
Échantillonnage : Utilisez lorsque vous souhaitez que les requêtes restent visibles dans les métriques de trace, mais réduisez le volume d’ingestion des traces.
Filtrage dans l’Agent Datadog : Utilisez pour exclure complètement les requêtes (y compris des métriques de trace) dans tous les services rapportant à l’Agent.
Configuration du traceur : Utilisez lorsque la logique de filtrage doit être appliquée par service ou dépend du contexte spécifique à l’application (par exemple, les attributs de requête ou l’état d’exécution).
Si vous avez besoin d’aide pour décider quelle option est la plus pertinente pour votre cas d’utilisation, contactez le support Datadog.
Échantillonnage
Si vous souhaitez que le span soit inclus dans les métriques de trace mais que vous ne voulez pas qu’il soit ingéré, utilisez des règles d’échantillonnage. Pour plus d’informations sur l’échantillonnage, consultez Contrôles d’ingestion.
Utilisation des règles d’échantillonnage
L’approche recommandée est d’utiliser des règles d’échantillonnage, qui vous permettent d’échantillonner les traces en fonction des noms de ressources, des noms de services, des balises et des noms d’opération :
Les décisions d'échantillonnage sont déterminées en utilisant le premier span dans une trace. Si le span contenant la balise sur laquelle vous souhaitez filtrer n'est pas un Une span est dite « racine de trace » lorsqu'elle représente la première span d'une trace. La span racine constitue le point d'entrée de la requête tracée. Sa création marque le début de la trace.Glossary, cette règle n'est pas appliquée.
Filtrage dans l’Agent Datadog
Si vous ne souhaitez pas que le span soit ingéré ou reflété dans les métriques de trace, utilisez le filtrage dans l’Agent Datadog.
Le composant Trace Agent au sein de l’Agent Datadog dispose de deux méthodes pour empêcher l’envoi de certaines traces : filtrage par balises de span ou filtrage par ressources. Si des traces sont supprimées en raison de ces paramètres, les métriques de trace excluent ces requêtes.
Configurer l’Agent de Trace pour ignorer certaines traces ou ressources s’applique à tous les services qui envoient des traces à cet Agent Datadog. Si vous avez des exigences spécifiques à l’application, utilisez la configuration du Tracer à la place.
Si aucune des options de ce guide ne répond à vos exigences, envisagez d'ajouter un tag de span personnalisé dans votre application et de l'utiliser pour supprimer des traces à l'Agent.
Ignorer les traces basées sur des balises de span
À partir de l’Agent Datadog 6.27.0/7.27.0, l’option balises de filtre supprime les traces avec des spans racines qui correspondent aux balises de span spécifiées. Cette option s’applique à tous les services qui envoient des traces à cet Agent Datadog. Les traces qui sont supprimées en raison des balises de filtre ne sont pas incluses dans les métriques de trace.
Des spans individuels au sein d'une trace ne peuvent pas être supprimés sélectivement ; si le span racine correspond aux critères de filtre, la trace complète est rejetée.
Comportement de correspondance :
L’option des balises de filtre nécessite une correspondance exacte de chaîne. Pour le filtrage basé sur des regex, voir Ignorer en fonction des ressources.
Lorsque vous spécifiez plusieurs balises, le filtre utilise la logique OU: les traces sont supprimées si le span racine correspond à l’une des balises. Pour faire correspondre plusieurs conditions simultanément, ajoutez une balise personnalisée qui représente ces critères combinés.
Configuration :
Vous pouvez spécifier des balises de span à exiger ou à rejeter en utilisant une liste de clés et de valeurs séparées par des espaces dans les variables d’environnement :
DD_APM_FILTER_TAGS_REQUIRE
Collecte uniquement les traces qui ont des spans racines avec une correspondance exacte pour les balises de span et les valeurs spécifiées. Si cela ne correspond pas à cette règle, la trace est supprimée. Par exemple, DD_APM_FILTER_TAGS_REQUIRE="key1:value1 key2:value2". Dans l’Agent Datadog 7.49+, des expressions régulières peuvent être fournies avec DD_APM_FILTER_TAGS_REGEX_REQUIRE.
DD_APM_FILTER_TAGS_REJECT
Rejette les traces qui ont des spans racines avec une correspondance exacte pour les balises de span et valeurs spécifiées. Si cela correspond à cette règle, la trace est supprimée. Par exemple, DD_APM_FILTER_TAGS_REJECT="key1:value1 key2:value2". Dans Datadog Agent 7.49+, des expressions régulières peuvent être fournies avec DD_APM_FILTER_TAGS_REGEX_REJECT.
Sur le backend, Datadog crée les balises de span suivantes sur les spans après ingestion.
Remarque : Ces balises ne peuvent pas être utilisées pour supprimer des traces au niveau de l’Agent Datadog. L’agent filtre uniquement en fonction des balises disponibles avant l’ingestion.
Nom
Description
http.path_group
Le chemin d’URL complet à partir de la balise http.url.
http.url_details.host
La partie nom d’hôte de la balise http.url.
http.url_details.path
La cible de requête complète telle que transmise dans une ligne de requête HTTP ou équivalent.
http.url_details.scheme
Le schéma de requête à partir de la balise http.url.
http.url_details.queryString
La partie de chaîne de requête à partir de la balise http.url.
http.url_details.port
Le port HTTP à partir de la balise http.url.
http.useragent_details.os.family
La famille de systèmes d’exploitation rapportée par l’User-Agent.
http.useragent_details.browser.family
La famille de navigateurs rapportée par l’User-Agent.
http.useragent_details.device.family
La famille de dispositifs rapportée par l’User-Agent.
À partir du 1er octobre 2022, le backend de Datadog applique un remappage afin d'appliquer la sémantique des balises de span.
à travers les traceurs sur tous les spans ingérés. Si vous souhaitez supprimer des traces basées sur les balises de span racine au niveau de l'Agent Datadog, utilisez des balises dans la colonne Remap from.
Communications réseau
Nom
Remap from
network.host.ip
tcp.local.address - Node.js
network.destination.ip
out.host - Tous les langages
network.destination.port
grpc.port - Python tcp.remote.port - Node.js out.port - Tous les langages
grpc.request.metadata.* - Python, Node.js rpc.grpc.request.metadata - Go
rpc.grpc.response.metadata.*
grpc.response.metadata.* - Python, Node.js
Erreurs
Nom
Remappage depuis
error.message
error.msg - Tous les langages
Ignorer les traces basées sur les ressources
L’option ignore resources permet d’exclure les ressources si le span racine global de la trace correspond à certains critères. Voir Exclure les ressources de la collecte. Cette option s’applique à tous les services qui envoient des traces à cet Agent Datadog particulier. Les traces qui sont ignorées en raison des ressources à ignorer ne sont pas incluses dans les métriques de trace.
Vous pouvez spécifier les ressources à ignorer soit dans le fichier de configuration de l’Agent, datadog.yaml, soit avec la variable d’environnement DD_APM_IGNORE_RESOURCES. Voir les exemples ci-dessous.
Utilisation de datadog.yaml :
datadog.yaml
apm_config:## @param ignore_resources - list of strings - optional## A list of regular expressions can be provided to exclude certain traces based on their resource name.## All entries must be surrounded by double quotes and separated by commas.ignore_resources:["(GET|POST) /healthcheck","API::NotesController#index"]
Lors de l’utilisation du format de variable d’environnement (DD_APM_IGNORE_RESOURCES), les valeurs doivent être fournies sous forme de liste de chaînes séparées par des virgules.
La syntaxe regex que l’Agent de Trace accepte est évaluée par regexp de Go.
Selon votre stratégie de déploiement, vous devrez peut-être ajuster la regex en échappant les caractères spéciaux.
Si vous utilisez des conteneurs dédiés avec Kubernetes, assurez-vous que la variable d’environnement pour l’option de ressource à ignorer est appliquée au conteneur trace-agent.
Exemple
Considérez une trace qui contient des appels à /api/healthcheck dont vous ne souhaitez pas avoir de traces :
Notez le nom de ressource de la span racine globale.
Nom de l’opération : rack.request
Nom de la ressource : Api::HealthchecksController#index
Http.url : /api/healthcheck
Pour utiliser correctement l’option de ressource à ignorer, la règle regex écrite doit correspondre au nom de la ressource, Api::HealthchecksController#index. Quelques options regex sont possibles, mais pour filtrer exactement les traces de cette ressource telles qu’elles sont, une regex potentielle à utiliser est Api::HealthchecksController#index$.
La syntaxe peut varier en fonction de votre déploiement
Dans la liste des variables d’environnement du conteneur de l’Agent Datadog, ajoutez DD_APM_IGNORE_RESOURCES avec un modèle comme l’exemple ci-dessous. Docker Compose a sa propre substitution de variables à prendre en compte lorsque vous utilisez des caractères spéciaux comme $.
environment:// other Datadog Agent environment variables- DD_APM_IGNORE_RESOURCES=Api::HealthchecksController#index$$
Pour plusieurs valeurs :
environment:// other Datadog Agent environment variables- DD_APM_IGNORE_RESOURCES="value1","Api::HealthchecksController#index$$"
Dans votre commande docker run pour démarrer l’Agent Datadog, ajoutez DD_APM_IGNORE_RESOURCES :
Si vous utilisez Amazon ECS (comme sur EC2), dans la définition de votre conteneur Agent Datadog, ajoutez la variable d’environnement DD_APM_IGNORE_RESOURCES avec des valeurs telles que le JSON évalue à quelque chose comme ceci :
"environment":[// other environment variables for the Datadog Agent
{"name":"DD_APM_IGNORE_RESOURCES","value":"Api::HealthchecksController#index$"}]
Filtrer les traces de cette manière supprime ces requêtes des métriques de trace. Pour des informations sur la façon de réduire l'ingestion sans affecter les métriques de trace, voir contrôles d'ingestion.
Configuration du traceur
Certains traceurs de langage peuvent supprimer des traces avant qu’elles ne soient envoyées à l’Agent Datadog. Utilisez cette option si vous avez des exigences spécifiques à l’application.
1. Si la requête est associée à une trace distribuée, la trace résultante peut avoir une inexactitude d'échantillonnage si vous supprimez des portions de celle-ci en raison de ces règles de filtrage. 2. Filtrer les traces de cette manière supprime ces requêtes des métriques de trace. Pour des informations sur la façon de réduire l'ingestion sans affecter les métriques de trace, voir contrôles d'ingestion.
Le traceur Ruby dispose d’un pipeline de post-traitement qui supprime les traces qui répondent à certains critères. Plus d’informations et d’exemples peuvent être trouvés dans Post-traitement des traces.
Par exemple, si le nom de la ressource est Api::HealthchecksController#index, utilisez la classe Datadog::Tracing::Pipeline::SpanFilter pour supprimer les traces contenant le nom de la ressource. Ce filtre peut également être utilisé pour correspondre à d’autres métadonnées disponibles pour l’objet span.
Le traceur Python offre une option pour filtrer les traces indésirables :
Utilisation de filtres personnalisés
Pour des cas d’utilisation avancés, vous pouvez créer des filtres personnalisés :
fromddtrace.traceimporttracerfromddtrace.traceimportTraceFilterimportreclassCustomFilter(TraceFilter):def__init__(self,pattern):self.pattern=re.compile(pattern)defprocess_trace(self,trace):forspanintrace:ifspan.get_tag('http.url')andself.pattern.match(span.get_tag('http.url')):returnNone# Drop the tracereturntrace# Keep the trace# Configure the SDK with your custom filtertracer.configure(trace_processors=[CustomFilter(r'http://.*/healthcheck$')])
Configurez une liste de blocage sur le plugin Http. Prenez note de ce sur quoi la liste de blocage correspond dans la documentation de l’API. Par exemple, les requêtes Http entrantes correspondent aux chemins d’URL, donc si le tag span http.url de la trace est http://<domain>/healthcheck, écrivez une règle qui correspond à l’URL healthcheck :
La configuration du SDK pour l'intégration doit venir avant que ce module instrumenté soit importé.
Le traceur Java a une option pour un TraceInterceptor personnalisé afin de filtrer certains spans. Voir Étendre les traceurs.
Par exemple, si votre nom de ressource est GET /healthcheck, écrivez un intercepteur de trace qui supprime les traces contenant ce nom de ressource. Ajustez la logique pour répondre à votre cas d’utilisation.