Un service peut gérer une multitude de requêtes. Il est possible que vous ne souhaitiez pas tracer certaines d’entre elles ni les inclure dans les métriques de trace. Cela peut par exemple être le cas des checks de santé dans une application Web.
Pour éviter qu’un endpoint spécifique soit tracé et inclus dans les métriques de trace, vous pouvez adopter deux approches différentes :
Remarque : le filtrage des traces via l'une des options suivantes entraîne la suppression des requêtes concernées des métriques de trace. Pour découvrir comment réduire l'ingestion sans altérer les métriques de trace, consultez la section relative aux contrôles de l'ingestion.
Le composant « Agent de trace » de l’Agent Datadog peut empêcher de deux façons différentes la transmission de certaines traces : en ignorant des tags de span, ou en ignorant des ressources. Si, avec une de ces configurations, des traces sont ignorées, les métriques de trace excluent les requêtes concernées.
Lorsque vous configurez l’Agent de trace de façon à ce qu’il ignore certaines spans ou ressources, ce comportement s’applique à l’ensemble des services qui envoient des traces à cet Agent Datadog spécifique. Si vous devez répondre à certaines exigences spécifiques pour votre application, utilisez plutôt la méthode reposant sur la configuration du traceur.
Ignorer des traces en fonction des tags de span
Depuis la version 6.27.0/7.27.0 de l’Agent Datadog, l’option filter tags ignore les traces dont les spans racines correspondent aux tags de span spécifiés. Cette option s’applique à l’ensemble des services qui envoient des traces à cet Agent Datadog spécifique. Les traces qui sont ignorées en raison des tags filtrés sont exclues des métriques de trace.
Si vous pouvez identifier par programmation un ensemble de traces que vous ne souhaitez pas envoyer à Datadog, et qu’aucune suggestion de cette page ne répond à vos besoins, nous vous conseillons d’ajouter un tag de span personnalisé pour ignorer les traces. Contactez l’assistance afin de présenter votre cas d’utilisation. Nous pourrons ainsi continuer à étendre cette fonctionnalité.
Vous devez indiquer une correspondance de chaîne exacte pour le filtrage des tags. Si vous devez ignorer les expressions régulières pour votre cas d’utilisation, consultez la rubrique Ignorer des traces en fonction des ressources.
Vous pouvez définir les tags de span qui doivent être acceptés ou refusés en spécifiant une liste de clés et de valeurs séparées par des espaces dans des variables d’environnement :
DD_APM_FILTER_TAGS_REQUIRE
Recueillir uniquement les traces qui possèdent des spans racines correspondant exactement aux valeurs et aux tags de span spécifiés. Si la trace ne respecte pas cette règle, elle est ignorée. Exemple : DD_APM_FILTER_TAGS_REQUIRE="key1:value1 key2:value2". Une expression régulière peut être spécifiée via DD_APM_FILTER_TAGS_REGEX_REQUIRE.
DD_APM_FILTER_TAGS_REJECT
Rejeter les traces qui possèdent des spans racines correspondant exactement aux valeurs et aux tags de span spécifiés. Si la trace respecte cette règle, elle est ignorée. Exemple : DD_APM_FILTER_TAGS_REJECT="key1:value1 key2:value2". Une expression régulière peut être spécifiée via DD_APM_FILTER_TAGS_REGEX_REJECT.
Vous pouvez également les définir dans la configuration de l’Agent via une liste de valeurs séparées par des virgules :
Dans la section traceAgent du fichier values.yaml, ajoutez DD_APM_FILTER_TAGS_REJECT dans la section env, puis lancez helm comme d’habitude. Pour les tags multiples, séparez chaque key:value par une espace.
values.yaml
traceAgent:# agents.containers.traceAgent.env -- Variables d'environnement supplémentaires pour le conteneur trace-agentenv:- name:DD_APM_FILTER_TAGS_REJECTvalue:tag_key1:tag_val2 tag_key2:tag_val2
Cette méthode de filtrage des traces permet de supprimer les requêtes concernées des métriques de trace. Pour découvrir comment réduire l’ingestion sans toucher aux métriques de trace, consultez la section relative aux contrôles de l’ingestion.
Côté backend, Datadog crée et ajoute les tags de spans suivants aux spans après l’ingestion. Ces tags ne peuvent pas être utilisés pour ignorer des traces au niveau de l’Agent Datadog.
Nom
Rôle
http.path_group
Le chemin d’URL complet issu du tag http.url.
http.url_details.host
La partie correspondant au hostname dans le tag http.url.
http.url_details.path
La cible de requête complète, passée dans une ligne de requête HTTP ou via une méthode équivalente.
http.url_details.scheme
Le schéma de requête issu du tag http.url.
http.url_details.queryString
La partie correspondant à la chaîne de requête dans le tag http.url.
http.url_details.port
Le port HTTP issu du tag http.url.
http.useragent_details.os.family
La famille du système d’exploitation indiquée par le user-agent.
http.useragent_details.browser.family
La famille de navigateur indiquée par le user-agent.
http.useragent_details.device.family
La famille d’appareil indiquée par le user-agent.
Remarque : à compter du 1er octobre 2022, le backend Datadog procède à un remappage afin d'appliquer la sémantique des tags de span
sur toutes les spans ingérées, quel que soit le traceur. Si vous souhaitez ignorer des spans en fonction de tags au niveau de l'Agent Datadog, utilisez les tags de la colonne Remapper depuis.
Communications réseau
Nom
Remapper depuis
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
Remapper depuis
error.message
error.msg - Tous les langages
Ignorer des traces en fonction des ressources
L’option ignore resources permet d’exclure des ressources lorsque la span racine globale de la trace répond à certains critères. Consultez la section Empêcher la collecte de certaines ressources pour en savoir plus. Cette option s’applique à l’ensemble des services qui envoient des traces à cet Agent Datadog spécifique. Puisque les ressources ignorées sont exclues des métriques de trace, les traces sont également ignorées.
Vous pouvez indiquer les ressources à ignorer dans le fichier de configuration de l’Agent (datadog.yaml) ou avec la variable d’environnement DD_APM_IGNORE_RESOURCES. Consultez les exemples ci-dessous :
datadog.yaml
apm_config:## @param ignore_resources - liste de chaînes, facultatif## Vous pouvez fournir une liste d'expressions régulières afin d'exclure certaines traces en fonction du nom de leur ressource.## Toutes les valeurs doivent être placées entre guillemets et séparées par des virgules.ignore_resources:["(GET|POST) /healthcheck","API::NotesController#index"]
Remarques :
La syntaxe acceptée par l’Agent de trace pour les expressions régulières est évaluée par le système d’expressions régulières Go.
Selon votre stratégie de déploiement, vous devrez potentiellement modifier vos expressions régulières en échappant les caractères spéciaux.
Si vous utilisez des conteneurs dédiés avec Kubernetes, vérifiez que la variable d’environnement permettant d’ignorer des ressources est appliquée au conteneur trace-agent.
Exemple
Imaginons qu’une trace contient des appels vers /api/healthcheck que vous ne souhaitez pas tracer :
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 ignorer correctement des ressources, la règle d’expression régulière spécifiée doit correspondre au nom de la ressource, à savoir Api::HealthchecksController#index. Plusieurs expressions régulières peuvent être spécifiées. Toutefois, pour exclure les traces de cette ressource précise, vous pouvez utiliser l’expression Api::HealthchecksController#index$.
La syntaxe peut varier en fonction de votre déploiement
Ajoutez DD_APM_IGNORE_RESOURCES à la liste des variables d’environnement du conteneur de l’Agent Datadog, en indiquant un pattern similaire à celui de l’exemple ci-dessous. Docker Compose utilise sa propre fonctionnalité de substitution de variables. Vous devez donc en tenir compte lorsque vous indiquez des caractères spéciaux, comme $.
environment:// autres variables d'environnement de l'Agent Datadog- DD_APM_IGNORE_RESOURCES=Api::HealthchecksController#index$$
Pour les valeurs multiples :
environment:// autres variables d'environnement de l'Agent Datadog- DD_APM_IGNORE_RESOURCES="value1","Api::HealthchecksController#index$$"
Ajoutez DD_APM_IGNORE_RESOURCES à votre commande docker run permettant de lancer l’Agent Datadog :
Si vous utilisez Amazon ECS (par exemple, EC2) dans votre définition du conteneur de l’Agent Datadog, ajoutez la variable d’environnement DD_APM_IGNORE_RESOURCES avec des valeurs afin d’obtenir du JSON semblable à ce qui suit :
"environment":[// autres variables d'environnement pour l'Agent Datadog
{"name":"DD_APM_IGNORE_RESOURCES","value":"Api::HealthchecksController#index$"}]
Remarque : le filtrage des traces à l'aide de cette méthode supprime les requêtes concernées des métriques de trace. Pour découvrir comment réduire l'ingestion sans toucher aux métriques de trace, consultez la section relative aux contrôles de l'ingestion.
Options de configuration du traceur
Pour certains langages, les traceurs permettent de modifier les spans avant leur envoi à l’Agent Datadog. Utilisez cette option si vous devez répondre à certaines exigences spécifiques pour votre application dans l’un des langages répertoriés ci-dessous.
Attention : si la requête est associée à une trace distribuée, lorsque vous ignorez une partie de la trace obtenue en raison des règles de filtrage, la trace peut inclure des erreurs d'échantillonnage.
Le traceur Ruby possède un pipeline de post-traitement qui supprime toutes les traces répondant à certains critères. Pour en savoir plus et obtenir des exemples, consultez la rubrique Post-traitement des traces.
Par exemple, si le nom de ressource correspond à Api::HealthchecksController#index, utilisez la classe Datadog::Tracing::Pipeline::SpanFilter pour supprimer les traces qui contiennent le nom de ressource. Ce filtre peut également être utilisé pour établir une correspondance avec d’autres métadonnées disponibles pour l’objet span.
Le traceur Python possède un filtre FilterRequestsOnUrl, qui peut être configuré de façon à supprimer les traces provenant de certains endpoints. Vous avez également la possibilité de créer un filtre personnalisé. Consultez la section Filtrage des traces (en anglais) pour en savoir plus.
Imaginons que le tag de span http.url de la span racine soit défini sur http://<domaine>/healthcheck. Utilisez l’expression régulière suivante pour faire correspondre tous les endpoints se terminant par healthcheck :
from ddtrace import tracer
from ddtrace.filters import FilterRequestsOnUrl
tracer.configure(settings={
'FILTERS': [
FilterRequestsOnUrl(r'http://.*/healthcheck$'),
],
})
Configurez une liste d’éléments à exclure sur le plug-in Http. Consultez la documentation sur l’API pour bien comprendre les éléments inclus dans la liste. Par exemple, Http trouve des correspondances dans les URL. Ainsi, si le tag de span http.url de la trace a pour valeur http://<domaine>/healthcheck, créez une règle qui s’applique à l’URL healthcheck :
Remarque : la configuration du traceur pour l'intégration doit être fournie avant l'importation de ce module instrumenté.
Le traceur Java possède une option permettant à un TraceInterceptor personnalisé de filtrer certaines spans. Consultez la section Extensions de traceurs pour en savoir plus.
Par exemple, pour la ressource GET /healthcheck, créez un intercepteur de traces qui ignore les traces contenant ce nom de ressource. Modifiez la logique pour répondre aux exigences de votre déploiement.
Remarque : le filtrage des traces à l'aide de cette méthode supprime les requêtes concernées des métriques de trace. Pour découvrir comment réduire l'ingestion sans toucher aux métriques de trace, consultez la section relative aux contrôles de l'ingestion.