Tagging de serice unifié

Aperçu

Le balisage de service unifié relie la télémétrie Datadog en utilisant trois balises réservées : env, service et version.

Avec ces trois tags, vous pouvez :

  • Identifiez l’impact du déploiement avec des métriques de trace et de conteneur filtrées par version
  • Naviguez sans effort à travers les traces, les métriques et les journaux avec des balises cohérentes
  • Affichez les données de service en fonction de l’environnement ou de la version de manière unifiée

Notes :

  • La balise version est censée changer à chaque nouveau déploiement d’application. Deux versions différentes du code de votre application doivent avoir des balises version distinctes.
  • Le service officiel d’un journal adopte par défaut le short-image du conteneur, en l’absence d’une configuration des journaux Autodiscovery. Pour remplacer le service officiel d’un journal, ajoutez des étiquettes Docker/annotations de pod d’Autodécouverte. Par exemple : "com.datadoghq.ad.logs"='[{"service": "service-name"}]'
  • Les informations sur l’hôte sont exclues pour les spans de base de données et de cache, car l’hôte associé au span n’est pas celui de la base de données ou du cache.

Exigences

  • Le balisage de service unifié nécessite la configuration d’un Agent Datadog qui est 6.19.x/7.19.x ou supérieur.

  • Le balisage de service unifié nécessite une version SDK qui prend en charge de nouvelles configurations des balises réservées. Plus d’informations peuvent être trouvées par langue dans les instructions d’installation.

LangueVersion SDK minimale
.NET1.17.0+
C++0.1.0+
Go1.24.0+
Java0.50.0+
Node0.20.3+
PHP0.47.0+
Python0.38.0+
Ruby0.34.0+
  • Le balisage de service unifié nécessite des connaissances sur la configuration des balises. Si vous n’êtes pas certain de la manière de configurer les balises, consultez la documentation Démarrer avec le balisage et Attribution des balises avant de procéder à la configuration.

Configuration

Pour commencer la configuration du tagging de service unifié, choisissez votre environnement :

Environnement conteneurisé

Dans les environnements conteneurisés, env, service et version sont définis par les variables d’environnement ou les étiquettes du service (par exemple, les étiquettes de déploiement et de pod Kubernetes, les étiquettes de conteneur Docker). L’Agent Datadog détecte cette configuration de balisage et l’applique aux données qu’il collecte à partir des conteneurs.

Pour configurer le tagging de service unifié dans un environnement conteneurisé :

  1. Activer Autodécouverte. Cela permet à l’Agent Datadog d’identifier automatiquement les services fonctionnant sur un conteneur spécifique et de collecter des données à partir de ces services pour associer les variables d’environnement aux balises env, service, et version.

  2. Si vous utilisez Docker, assurez-vous que l’Agent peut accéder à la socket Docker de votre conteneur. Cela permet à l’Agent de détecter les variables d’environnement et de les associer aux balises standard.

  3. Configurez votre environnement en fonction de votre service d’orchestration de conteneurs, que ce soit par une configuration complète ou partielle comme détaillé ci-dessous.

Configuration

Si vous avez déployé le Datadog Cluster Agent avec l’Admission Controller activé, ce dernier modifie les manifestes de pod et injecte toutes les variables d’environnement requises (en fonction des conditions de mutation configurées). Dans ce cas, la configuration manuelle des DD_ variables d’environnement dans les manifestes de pod n’est pas nécessaire. Pour plus d’informations, consultez la documentation de l’Admission Controller.

Configuration complète

Pour exploiter tout le potentiel du tagging de service unifié lorsque vous utilisez Kubernetes, ajoutez les variables d’environnement au niveau de l’objet de déploiement et au niveau des spécifications du modèle de pod :

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    tags.datadoghq.com/env: "<ENV>"
    tags.datadoghq.com/service: "<SERVICE>"
    tags.datadoghq.com/version: "<VERSION>" 
...
template:
  metadata:
    labels:
      tags.datadoghq.com/env: "<ENV>"
      tags.datadoghq.com/service: "<SERVICE>"
      tags.datadoghq.com/version: "<VERSION>" 
  containers:
  -  ...
     env:
          - name: DD_ENV
            valueFrom:
              fieldRef:
                fieldPath: metadata.labels['tags.datadoghq.com/env']
          - name: DD_SERVICE
            valueFrom:
              fieldRef:
                fieldPath: metadata.labels['tags.datadoghq.com/service']
          - name: DD_VERSION 
            valueFrom: 
              fieldRef: 
                fieldPath: metadata.labels['tags.datadoghq.com/version']

Vous pouvez également utiliser les variables d’environnement des Attributs de Ressource OpenTelemetry pour définir les balises env, service et version :

  containers:
  -  ...
     env:
         - name: OTEL_RESOURCE_ATTRIBUTES
           value: "service.name=<SERVICE>,service.version=<VERSION>,deployment.environment=<ENV>"
         - name: OTEL_SERVICE_NAME
           value: "<SERVICE>"
Le OTEL_SERVICE_NAME la variable d'environnement a la priorité sur le service.name attribut dans le OTEL_RESOURCE_ATTRIBUTES variable d'environnement.
Configuration partielle
Métriques au niveau du pod

Pour configurer les métriques au niveau du pod, ajoutez les étiquettes standard suivantes (tags.datadoghq.com) à la spécification du pod d’un Déploiement, StatefulSet ou Job :

template:
  metadata:
    labels:
      tags.datadoghq.com/env: "<ENV>"
      tags.datadoghq.com/service: "<SERVICE>"
      tags.datadoghq.com/version: "<VERSION>" 

Ces étiquettes couvrent les métriques Kubernetes de CPU, mémoire, réseau et disque au niveau du pod, et peuvent être utilisées pour injecter DD_ENV, DD_SERVICE et DD_VERSION dans le conteneur de votre service via l’API descendante de Kubernetes.

Si vous avez plusieurs conteneurs par pod, vous pouvez spécifier des étiquettes standard par conteneur :

tags.datadoghq.com/<container-name>.env
tags.datadoghq.com/<container-name>.service
tags.datadoghq.com/<container-name>.version 
Métriques d’état

Pour configurer des métriques Kubernetes State, procédez comme suit :

  1. Définissez join_standard_tags sur true dans votre fichier de configuration. Consultez cet exemple de fichier de configuration pour l’emplacement du paramètre.

  2. Ajoutez les mêmes étiquettes standard à la collection d’étiquettes pour la ressource parente, par exemple : Deployment.

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    tags.datadoghq.com/env: "<ENV>"
    tags.datadoghq.com/service: "<SERVICE>"
    tags.datadoghq.com/version: "<VERSION>" 
spec:
  template:
    metadata:
      labels:
        tags.datadoghq.com/env: "<ENV>"
        tags.datadoghq.com/service: "<SERVICE>"
        tags.datadoghq.com/version: "<VERSION>" 
SDK Datadog et client StatsD

Pour configurer les variables d’environnement du SDK Datadog et du client StatsD, utilisez l’API descendante de Kubernetes dans le format ci-dessous :

containers:
-  ...
    env:
        - name: DD_ENV
          valueFrom:
            fieldRef:
              fieldPath: metadata.labels['tags.datadoghq.com/env']
        - name: DD_SERVICE
          valueFrom:
            fieldRef:
              fieldPath: metadata.labels['tags.datadoghq.com/service']
        - name: DD_VERSION 
          valueFrom: 
            fieldRef: 
              fieldPath: metadata.labels['tags.datadoghq.com/version'] 
Étiquetage automatique des versions pour les données APM dans des environnements conteneurisés
Cette fonctionnalité est uniquement activée pour les données d'Application Performance Monitoring (APM).

Vous pouvez utiliser la balise version dans APM pour surveiller les déploiements et pour identifier les déploiements de code défectueux grâce à la Détection automatique des déploiements défectueux.

Pour les données APM, Datadog définit la balise version pour vous dans l’ordre de priorité suivant. Si vous définissez manuellement version, Datadog ne remplace pas votre valeur version.

PrioritéValeur de version
1{votre valeur de version}
2{image_tag}_{premiers_7_chiffres_du_git_commit_sha}
3{image_tag} ou {premiers_7_chiffres_du_git_commit_sha} si un seul est disponible

Exigences :

  • Version de l’Agent Datadog 7.52.0 ou supérieure
  • Si vos services s’exécutent dans un environnement conteneurisé et que image_tag est suffisant pour suivre les nouveaux déploiements de versions, aucune configuration supplémentaire n’est nécessaire.
  • Si vos services ne s’exécutent pas dans un environnement conteneurisé, ou si vous souhaitez également inclure le SHA Git, intégrez les informations Git dans vos artefacts de construction.
Configuration complète

Définissez les variables d’environnement DD_ENV, DD_SERVICE et DD_VERSION ainsi que les étiquettes Docker correspondantes pour votre conteneur afin d’obtenir l’ensemble complet d’étiquetage de service unifié.

Les valeurs pour service et version peuvent être fournies dans le Dockerfile :

ENV DD_SERVICE <SERVICE>
ENV DD_VERSION <VERSION> 

LABEL com.datadoghq.tags.service="<SERVICE>"
LABEL com.datadoghq.tags.version="<VERSION>" 

Puisque env est probablement déterminé au moment du déploiement, vous pouvez injecter la variable d’environnement et l’étiquette ultérieurement :

docker run -e DD_ENV=<ENV> -l com.datadoghq.tags.env=<ENV> ...

Vous pouvez également préférer définir tous les éléments au moment du déploiement :

docker run -e DD_ENV="<ENV>" \
           -e DD_SERVICE="<SERVICE>" \
           -e DD_VERSION="<VERSION>" \ 
           -l com.datadoghq.tags.env="<ENV>" \
           -l com.datadoghq.tags.service="<SERVICE>" \
           -l com.datadoghq.tags.version="<VERSION>" \ 
           ...
Configuration partielle

Si votre service n’a pas besoin des variables d’environnement Datadog (par exemple, les logiciels tiers comme Redis, PostgreSQL, NGINX et les applications non tracées par l’APM), vous pouvez utiliser les étiquettes Docker :

com.datadoghq.tags.env
com.datadoghq.tags.service
com.datadoghq.tags.version 

Comme expliqué pour la configuration complète, ces étiquettes peuvent être définies dans un Dockerfile ou comme arguments pour lancer le conteneur.

Étiquetage automatique des versions pour les données APM dans des environnements conteneurisés
Cette fonctionnalité est uniquement activée pour les données d'Application Performance Monitoring (APM).

Vous pouvez utiliser la balise version dans APM pour surveiller les déploiements et pour identifier les déploiements de code défectueux grâce à la Détection automatique des déploiements défectueux.

Pour les données APM, Datadog définit la balise version pour vous dans l’ordre de priorité suivant. Si vous définissez manuellement version, Datadog ne remplace pas votre valeur version.

PrioritéValeur de version
1{votre valeur de version}
2{image_tag}_{premiers_7_chiffres_du_git_commit_sha}
3{image_tag} ou {premiers_7_chiffres_du_git_commit_sha} si un seul est disponible

Exigences :

  • Version de l’Agent Datadog 7.52.0 ou supérieure
  • Si vos services s’exécutent dans un environnement conteneurisé et que image_tag est suffisant pour suivre les nouveaux déploiements de versions, aucune configuration supplémentaire n’est nécessaire.
  • Si vos services ne s’exécutent pas dans un environnement conteneurisé, ou si vous souhaitez également inclure le SHA Git, intégrez les informations Git dans vos artefacts de construction.
Sur ECS Fargate utilisant Fluent Bit ou FireLens, l'étiquetage de service unifié n'est disponible que pour les métriques et les traces, pas pour la collecte de journaux.
Configuration complète

Définissez les variables d’environnement DD_ENV, DD_SERVICE et DD_VERSION (optionnelles avec étiquetage automatique de version) et les étiquettes Docker correspondantes dans l’environnement d’exécution de chaque conteneur de service pour obtenir l’ensemble complet d’étiquetage de service unifié. Par exemple, vous pouvez définir toute cette configuration à un seul endroit dans la définition de votre tâche ECS :

"environment": [
  {
    "name": "DD_ENV",
    "value": "<ENV>"
  },
  {
    "name": "DD_SERVICE",
    "value": "<SERVICE>"
  },
  {
    "name": "DD_VERSION",
    "value": "<VERSION>"
  }
   
],
"dockerLabels": {
  "com.datadoghq.tags.env": "<ENV>",
  "com.datadoghq.tags.service": "<SERVICE>",
  "com.datadoghq.tags.version": "<VERSION>"
}
Sur ECS Fargate, vous devez ajouter ces étiquettes à votre conteneur d'application, pas au conteneur de l'Agent Datadog.
Configuration partielle

Si votre service n’utilise pas les variables d’environnement Datadog (par exemple, des logiciels tiers comme Redis, PostgreSQL, NGINX, ou des applications non tracées par la solution APM), vous pouvez utiliser les étiquettes Docker dans votre définition de tâche ECS :

"dockerLabels": {
  "com.datadoghq.tags.env": "<ENV>",
  "com.datadoghq.tags.service": "<SERVICE>",
  "com.datadoghq.tags.version": "<VERSION>"
}
Étiquetage automatique des versions pour les données APM dans des environnements conteneurisés

Cette fonctionnalité est activée uniquement pour les données APM (Application Performance Monitoring).

Vous pouvez utiliser la balise version dans APM pour surveiller les déploiements et pour identifier les déploiements de code défectueux grâce à la Détection automatique des déploiements défectueux.

Pour les données APM, Datadog définit la balise version pour vous dans l’ordre de priorité suivant. Si vous définissez manuellement version, Datadog ne remplace pas votre valeur version.

PrioritéValeur de version
1{votre valeur de version}
2{image_tag}_{premiers_7_chiffres_du_git_commit_sha}
3{image_tag} ou {premiers_7_chiffres_du_git_commit_sha} si un seul est disponible

Exigences :

  • Version de l’Agent Datadog 7.52.0 ou supérieure
  • Si vos services s’exécutent dans un environnement conteneurisé et que image_tag est suffisant pour suivre les nouveaux déploiements de versions, aucune configuration supplémentaire n’est nécessaire.
  • Si vos services ne s’exécutent pas dans un environnement conteneurisé, ou si vous souhaitez également inclure le SHA Git, intégrez les informations Git dans vos artefacts de construction.

Environnement non conteneurisé

En fonction de la manière dont vous construisez et déployez les binaires ou exécutables de vos services, vous pouvez avoir plusieurs options disponibles pour définir des variables d’environnement. Puisque vous pouvez exécuter un ou plusieurs services par hôte, Datadog recommande de limiter ces variables d’environnement à un seul processus.

Afin de former un point de configuration unique pour l’ensemble des données de télémétrie émises directement depuis le runtime de vos services pour les traces, les logs, les ressources RUM, les tests Synthetic, les métriques StatsD ou les métriques système, vous pouvez :

  1. Exportez les variables d’environnement dans la commande pour votre exécutable :

    DD_ENV=<env> DD_SERVICE=<service> DD_VERSION=<version> /bin/my-service
    
  2. Ou utilisez Chef, Ansible ou un autre outil d’orchestration pour peupler le fichier de configuration systemd ou initd d’un service avec les variables d’environnement DD. Lorsque le processus de service démarre, il a accès à ces variables.

    Lors de la configuration de vos traces pour le tagging de service unifié :

    1. Configurez le SDK Datadog avec DD_ENV pour garder la définition de env plus proche de l’application qui génère les traces. Cette méthode permet au tag env d’être automatiquement dérivé d’un tag dans les métadonnées du span.

    2. Configurez les spans avec DD_VERSION pour ajouter la version à tous les spans qui relèvent du service appartenant au SDK (généralement DD_SERVICE). Cela signifie que si votre service crée des spans avec le nom d’un service externe, ces spans ne reçoivent pas version comme tag.

      Tant que la version est présente dans les spans, elle est ajoutée aux métriques de trace générées à partir de ces spans. La version peut être ajoutée manuellement dans le code ou automatiquement par le SDK Datadog. Lorsqu’elles sont configurées, celles-ci sont utilisées par les clients APM et DogStatsD pour étiqueter les données de trace et les métriques StatsD avec env, service et version. Si activé, le SDK Datadog injecte également les valeurs de ces variables dans vos journaux.

      Remarque : Il ne peut y avoir qu’un service par span. Les métriques de trace ont généralement également un seul service. Cependant, si vous avez un service différent défini dans les étiquettes de vos hôtes, cette étiquette de service configurée apparaît sur toutes les métriques de trace émises depuis cet hôte.

    Si vous utilisez des journaux et des traces connectés, activez l’injection automatique des journaux si cela est pris en charge par votre SDK Datadog. Ensuite, le SDK Datadog injecte automatiquement env, service et version dans vos journaux, éliminant ainsi la configuration manuelle pour ces champs ailleurs.

    Si vous utilisez des RUM et des traces connectés, spécifiez l’application du navigateur dans le champ service, définissez l’environnement dans le champ env et listez les versions dans le champ version de votre fichier d’initialisation.

    Lorsque vous créez une application RUM, confirmez les noms env et service.

    Si vous utilisez des tests de navigateur synthétiques connectés et des traces, spécifiez une URL pour envoyer des en-têtes dans la section Intégration APM pour les tests de navigateur de la page des paramètres d’intégration.

    Vous pouvez utiliser * pour des caractères génériques, par exemple : https://*.datadoghq.com.

    Les balises sont ajoutées en mode append-only pour des métriques StatsD personnalisées. Par exemple, si vous avez deux valeurs différentes pour env, les métriques sont étiquetées avec les deux environnements. Il n’y a pas d’ordre dans lequel une balise remplace une autre du même nom.

    Si votre service a accès à DD_ENV, DD_SERVICE et DD_VERSION, alors le client DogStatsD ajoute automatiquement les balises correspondantes à vos métriques personnalisées.

    Remarque : Les clients Datadog DogStatsD pour .NET et PHP ne prennent pas en charge cette fonctionnalité.

    Vous pouvez ajouter des balises env et service à vos métriques d’infrastructure. Dans des contextes non conteneurisés, le balisage pour les métriques de service est configuré au niveau de l’Agent.

    Parce que cette configuration ne change pas pour chaque invocation du processus d’un service, l’ajout de version n’est pas recommandé.

    Un service par hôte

    Définissez la configuration suivante dans le fichier de configuration principal de l’Agent :

    env: <ENV>
    tags:
      - service:<SERVICE>
    

    Cette configuration garantit un balisage cohérent de env et service pour toutes les données émises par l’Agent.

    Plusieurs services par hôte

    Définissez la configuration suivante dans le fichier de configuration principal de l’Agent :

    env: <ENV>
    

    Pour obtenir des balises service uniques sur les métriques CPU, mémoire et I/O disque au niveau du processus, configurez un contrôle de processus dans le dossier de configuration de l’Agent (par exemple, dans le dossier conf.d sous process.d/conf.yaml) :

    init_config:
    instances:
        - name: web-app
          search_string: ["/bin/web-app"]
          exact_match: false
          service: web-app
        - name: nginx
          search_string: ["nginx"]
          exact_match: false
          service: nginx-web-app
    

    Remarque : Si vous avez déjà une balise service définie globalement dans le fichier de configuration principal de votre Agent, les métriques de processus sont étiquetées avec deux services. Étant donné que cela peut prêter à confusion lors de l’interprétation des métriques, il est recommandé de configurer la balise service uniquement dans la configuration de la vérification du processus.

Environnement sans serveur

Pour en savoir plus sur les fonctions AWS Lambda, découvrez comment associer vos données de télémétrie Lambda à l’aide de tags.

OpenTelemetry

Lorsque vous utilisez OpenTelemetry, mappez les attributs de ressource suivants à leurs conventions correspondantes dans Datadog :

Convention OpenTelemetryConvention Datadog
deployment.environment 1env
deployment.environment.name 2env
service.nameservice
service.versionversion

1 : deployment.environment est obsolète au profit de deployment.environment.name dans les conventions sémantiques OpenTelemetry v1.27.0.
2 : deployment.environment.name est pris en charge dans Datadog Agent 7.58.0+ et Datadog Exporter v0.110.0+.

Variables d'environnement spécifiques à Datadog comme DD_SERVICE, DD_ENV ou DD_VERSION ne sont pas prises en charge par défaut dans votre configuration OpenTelemetry.

Pour définir des attributs de ressource à l’aide de variables d’environnement, définissez OTEL_RESOURCE_ATTRIBUTES avec les valeurs appropriées :

export OTEL_RESOURCE_ATTRIBUTES="service.name=my-service,deployment.environment=production,service.version=1.2.3"

Pour définir des attributs de ressource dans le code de votre application, créez un Resource avec les attributs souhaités et associez-le à votre TracerProvider.

Voici un exemple en Python :

from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider

resource = Resource(attributes={
   "service.name": "<SERVICE>",
   "deployment.environment": "<ENV>",
   "service.version": "<VERSION>"
})
tracer_provider = TracerProvider(resource=resource)

Pour définir des attributs de ressource à partir de l’OpenTelemetry Collector, utilisez le processeur de transformation dans votre fichier de configuration Collector. Le processeur de transformation vous permet de modifier les attributs des données de télémétrie collectées avant de les envoyer à l’exportateur Datadog :

processors:
  transform:
    trace_statements:
      - context: resource
        statements:
          - set(attributes["service.name"], "my-service")
          - set(attributes["deployment.environment"], "production")
          - set(attributes["service.version"], "1.2.3")
...

Lectures complémentaires