Descripción General

El etiquetado unificado de servicios une la telemetría de Datadog utilizando tres etiquetas reservadas: env, service y version.

Con estas tres etiquetas, puede:

  • Identificar el impacto de la implementación con métricas de trazas y contenedores filtradas por versión
  • Navegar sin problemas a través de trazas, métricas y registros con etiquetas consistentes
  • Ver datos del servicio basados en el entorno o la versión de manera unificada

Notas:

  • Se espera que la etiqueta version cambie con cada nueva implementación de la aplicación. Dos versiones diferentes del código de su aplicación deben tener etiquetas version distintas.
  • El servicio oficial de un registro se establece por defecto en la imagen corta del contenedor si no hay una configuración de registros de Autodiscovery presente. Para anular el servicio oficial de un registro, agregue etiquetas de Docker/anotaciones de pod de Autodiscovery. Por ejemplo: "com.datadoghq.ad.logs"='[{"service": "service-name"}]'
  • La información del host se excluye para los tramos de base de datos y caché porque el host asociado con el tramo no es el host de la base de datos/caché.

Requisitos

  • El etiquetado unificado de servicios requiere la configuración de un Datadog Agent que sea 6.19.x/7.19.x o superior.

  • El etiquetado unificado de servicios requiere una versión de kit de desarrollo de software que soporte nuevas configuraciones de las etiquetas reservadas. Se puede encontrar más información por idioma en las instrucciones de configuración.

IdiomaVersión mínima de kit de desarrollo de software
.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+

Configuración

Para comenzar a configurar la etiquetación unificada de servicios, elija su entorno:

Entorno en contenedores

En entornos en contenedores, env, service y version se configuran a través de las variables de entorno o etiquetas del servicio (por ejemplo, etiquetas de despliegue y de pod en Kubernetes, etiquetas de contenedor de Docker). El Agente de Datadog detecta esta configuración de etiquetado y la aplica a los datos que recopila de los contenedores.

Para configurar el etiquetado unificado de servicios en un entorno en contenedores:

  1. Habilitar Autodiscovery. Esto permite que el Agente de Datadog identifique automáticamente los servicios que se ejecutan en un contenedor específico y recopile datos de esos servicios para mapear las variables de entorno a las etiquetas env, service, y version.

  2. Si está utilizando Docker, asegúrese de que el Agente pueda acceder al socket de Docker de su contenedor. Esto permite que el Agente detecte las variables de entorno y las mapee a las etiquetas estándar.

  3. Configure su entorno que corresponde a su servicio de orquestación de contenedores basado en configuración completa o configuración parcial como se detalla a continuación.

Configuración

Si desplegó el Agente de Clúster de Datadog con el Controlador de Admisión habilitado, el Controlador de Admisión modifica los manifiestos de pod e inyecta todas las variables de entorno requeridas (basado en las condiciones de mutación configuradas). En ese caso, la configuración manual de las variables de entorno DD_ en los manifiestos de pod no es necesaria. Para más información, consulte la documentación del Controlador de Admisión.

Configuración completa

Para obtener el rango completo de etiquetado unificado de servicios al usar Kubernetes, agregue variables de entorno tanto al nivel del objeto de despliegue como al nivel de especificación de plantilla 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']

También puede usar las variables de entorno de Atributos de Recursos de OpenTelemetry para establecer las etiquetas env, service y version:

  containers:
  -  ...
     env:
         - name: OTEL_RESOURCE_ATTRIBUTES
           value: "service.name=<SERVICE>,service.version=<VERSION>,deployment.environment=<ENV>"
         - name: OTEL_SERVICE_NAME
           value: "<SERVICE>"
El OTEL_SERVICE_NAME la variable de entorno tiene prioridad sobre la service.name atributo en el OTEL_RESOURCE_ATTRIBUTES variable de entorno.
Configuración parcial
Métricas a nivel de pod

Para configurar métricas a nivel de pod, agregue las siguientes etiquetas estándar (tags.datadoghq.com) a la especificación del pod de un Deployment, StatefulSet o Job:

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

Estas etiquetas cubren métricas de CPU, memoria, red y disco a nivel de pod en Kubernetes, y se pueden usar para inyectar DD_ENV, DD_SERVICE y DD_VERSION en el contenedor de su servicio a través de la API descendente de Kubernetes.

Si tiene múltiples contenedores por pod, puede especificar etiquetas estándar por contenedor:

tags.datadoghq.com/<container-name>.env
tags.datadoghq.com/<container-name>.service
tags.datadoghq.com/<container-name>.version 
Métricas de estado

Para configurar Métricas de Estado de Kubernetes:

  1. Establezca join_standard_tags en true en su archivo de configuración. Consulte este archivo de configuración de ejemplo para la ubicación de la configuración.

  2. Agregue las mismas etiquetas estándar a la colección de etiquetas para el recurso padre, por ejemplo: 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 de Datadog y cliente de StatsD

Para configurar las variables de entorno del SDK de Datadog y del cliente de StatsD, use la API descendente de Kubernetes en el formato a continuación:

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'] 
Etiquetado automático de versiones para datos de APM en entornos contenedorizados
Esta función solo está habilitada para Application Performance Monitoring (APM) datos.

Puede usar la etiqueta version en APM para monitorear implementaciones e identificar implementaciones de código defectuosas a través de Detección Automática de Implementaciones Defectuosas.

Para los datos de APM, Datadog establece la etiqueta version para usted en el siguiente orden de prioridad. Si configura manualmente version, Datadog no sobrescribirá su valor de version.

PrioridadValor de versión
1{your version value}
2{image_tag}_{first_7_digits_of_git_commit_sha}
3{image_tag} o {first_7_digits_of_git_commit_sha} si solo uno está disponible

Requisitos:

  • Datadog Agent Version 7.52.0 o superior
  • Si sus servicios se ejecutan en un entorno contenedorizado y image_tag es suficiente para el seguimiento de nuevos despliegues de versiones, no se requiere configuración adicional.
  • Si sus servicios no se están ejecutando en un entorno contenedorizado, o si también desea incluir el Git SHA, incorpore información de Git en sus artefactos de construcción.
Configuración completa

Establezca las variables de entorno DD_ENV, DD_SERVICE y DD_VERSION y las etiquetas de Docker correspondientes para su contenedor para obtener la gama completa de unified service tagging.

Los valores para service y version se pueden proporcionar en el Dockerfile:

ENV DD_SERVICE <SERVICE>
ENV DD_VERSION <VERSION> 

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

Dado que env probablemente se determina en el momento de la implementación, puede inyectar la variable de entorno y la etiqueta más tarde:

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

También puede preferir establecer todo en el momento de la implementación:

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>" \ 
           ...
Configuración parcial

Si su servicio no necesita las variables de entorno de Datadog (por ejemplo, software de terceros como Redis, PostgreSQL, NGINX y aplicaciones que no son rastreadas por APM), puede usar las etiquetas de Docker:

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

Como se explica en la configuración completa, estas etiquetas se pueden establecer en un Dockerfile o como argumentos para lanzar el contenedor.

Etiquetado automático de versiones para datos de APM en entornos contenedorizados
Esta función solo está habilitada para Application Performance Monitoring (APM) datos.

Puede usar la etiqueta version en APM para monitorear despliegues e identificar despliegues de código defectuosos a través de Detección Automática de Implementaciones Defectuosas.

Para los datos de APM, Datadog establece la etiqueta version para usted en el siguiente orden de prioridad. Si configura manualmente version, Datadog no sobrescribirá su valor de version.

PrioridadValor de versión
1{tu valor de versión}
2{etiqueta_de_imagen}_{primeros_7_dígitos_del_sha_del_commit_de_git}
3{etiqueta_de_imagen} o {primeros_7_dígitos_del_sha_del_commit_de_git} si solo uno está disponible

Requisitos:

  • Versión del Agente de Datadog 7.52.0 o superior
  • Si sus servicios se ejecutan en un entorno contenedorizado y image_tag es suficiente para rastrear nuevos despliegues de versiones, no se requiere configuración adicional.
  • Si sus servicios no se están ejecutando en un entorno contenedorizado, o si también desea incluir el SHA de Git, inserte información de Git en sus artefactos de construcción.
En ECS Fargate usando Fluent Bit o FireLens, el etiquetado unificado de servicios solo está disponible para métricas y trazas, no para la recolección de registros.
Configuración completa

Establezca las variables de entorno DD_ENV, DD_SERVICE y DD_VERSION (opcional con etiquetado automático de versiones) y las etiquetas de Docker correspondientes en el entorno de ejecución del contenedor de cada servicio para obtener el rango completo de etiquetado unificado de servicios. Por ejemplo, puede establecer toda esta configuración en un solo lugar a través de la definición de tarea de 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>"
}
En ECS Fargate, debe agregar estas etiquetas a su contenedor de aplicación, no al contenedor del Datadog Agent.
Configuración parcial

Si su servicio no necesita las variables de entorno de Datadog (por ejemplo, software de terceros como Redis, PostgreSQL, NGINX y aplicaciones que no son rastreadas por APM), puede usar las etiquetas de Docker en su definición de tarea de ECS:

"dockerLabels": {
  "com.datadoghq.tags.env": "<ENV>",
  "com.datadoghq.tags.service": "<SERVICE>",
  "com.datadoghq.tags.version": "<VERSION>"
}
Etiquetado automático de versiones para datos de APM en entornos contenedorizados
Esta función solo está habilitada para Application Performance Monitoring (APM) datos.

Puede usar la etiqueta version en APM para monitorear despliegues e identificar despliegues de código defectuosos a través de Detección Automática de Implementaciones Defectuosas.

Para los datos de APM, Datadog establece la etiqueta version para usted en el siguiente orden de prioridad. Si configura manualmente version, Datadog no sobrescribirá su valor de version.

PrioridadValor de versión
1{tu valor de versión}
2{etiqueta_de_imagen}_{primeros_7_dígitos_del_sha_del_commit_de_git}
3{etiqueta_de_imagen} o {primeros_7_dígitos_del_sha_del_commit_de_git} si solo uno está disponible

Requisitos:

  • Versión del Agente de Datadog 7.52.0 o superior
  • Si sus servicios se ejecutan en un entorno contenedorizado y image_tag es suficiente para rastrear nuevos despliegues de versiones, no se requiere configuración adicional.
  • Si sus servicios no se están ejecutando en un entorno contenedorizado, o si también desea incluir el SHA de Git, inserte información de Git en sus artefactos de construcción.

Entorno no contenedorizado

Dependiendo de cómo construya e implemente los binarios o ejecutables de sus servicios, puede tener varias opciones disponibles para establecer variables de entorno. Dado que puede ejecutar uno o más servicios por host, Datadog recomienda limitar estas variables de entorno a un solo proceso.

Para formar un único punto de configuración para toda la telemetría emitida directamente desde el tiempo de ejecución de sus servicios para traces, logs, RUM resources, Synthetics tests, StatsD metrics o métricas del sistema, ya sea:

  1. Exporta las variables de entorno en el comando para tu ejecutable:

    DD_ENV=<env> DD_SERVICE=<service> DD_VERSION=<version> /bin/my-service
    
  2. O utiliza Chef, Ansible u otra herramienta de orquestación para poblar el archivo de configuración systemd o initd de un servicio con las variables de entorno DD. Cuando el proceso del servicio se inicia, tiene acceso a esas variables.

    Al configurar sus trazas para etiquetado unificado de servicios:

    1. Configure el SDK de Datadog con DD_ENV para mantener la definición de env más cerca de la aplicación que genera las trazas. Este método permite que la etiqueta env se obtenga automáticamente de una etiqueta en los metadatos del span.

    2. Configure spans con DD_VERSION para agregar la versión a todos los spans que caen bajo el servicio que pertenece al SDK (generalmente DD_SERVICE). Esto significa que si su servicio crea spans con el nombre de un servicio externo, esos spans no reciben version como etiqueta.

      Mientras la versión esté presente en los spans, se agrega a las métricas de trazas generadas a partir de esos spans. La versión puede ser añadida manualmente en el código o automáticamente por el SDK de Datadog. Cuando se configura, estos son utilizados por el APM y los clientes de DogStatsD para etiquetar los datos de trazas y las métricas de StatsD con env, service y version. Si está habilitado, el SDK de Datadog también inyecta los valores de estas variables en sus logs.

      Nota: Solo puede haber un servicio por span. Las métricas de trazas generalmente tienen un solo servicio también. Sin embargo, si tiene un servicio diferente definido en las etiquetas de sus hosts, esa etiqueta de servicio configurada aparece en todas las métricas de trazas emitidas desde ese host.

    Si está utilizando logs y trazas conectados, habilite la inyección automática de logs si es compatible con su SDK de Datadog. Luego, el SDK de Datadog inyecta automáticamente env, service y version en sus registros, eliminando así la configuración manual para esos campos en otros lugares.

    Si está utilizando RUM y trazas conectadas, especifique la aplicación del navegador en el campo service, defina el entorno en el campo env y enumere las versiones en el campo version de su archivo de inicialización.

    Cuando cree una aplicación RUM, confirme los nombres de env y service.

    Si está utilizando pruebas de navegador sintéticas conectadas y trazas, especifique una URL para enviar encabezados en la sección Integración APM para Pruebas de Navegador de la página de Configuración de Integración.

    Puede usar * para comodines, por ejemplo: https://*.datadoghq.com.

    Las etiquetas se agregan de manera acumulativa para métricas StatsD personalizadas. Por ejemplo, si tiene dos valores diferentes para env, las métricas se etiquetan con ambos entornos. No hay un orden en el que una etiqueta anule a otra del mismo nombre.

    Si su servicio tiene acceso a DD_ENV, DD_SERVICE y DD_VERSION, entonces el cliente DogStatsD agrega automáticamente las etiquetas correspondientes a sus métricas personalizadas.

    Nota: Los clientes DogStatsD de Datadog para .NET y PHP no admiten esta funcionalidad.

    Puede agregar etiquetas env y service a sus métricas de infraestructura. En contextos no contenedorizados, la etiquetación para métricas de servicio se configura a nivel del Agente.

    Debido a que esta configuración no cambia para cada invocación del proceso de un servicio, no se recomienda agregar version.

    Servicio único por servidor

    Establezca la siguiente configuración en el archivo de configuración principal del Agente:

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

    Esta configuración garantiza el etiquetado consistente de env y service para todos los datos emitidos por el Agente.

    Múltiples servicios por servidor

    Establezca la siguiente configuración en el archivo de configuración principal del Agente:

    env: <ENV>
    

    Para obtener etiquetas service únicas en métricas de CPU, memoria y disco I/O a nivel de proceso, configure una verificación de proceso en la carpeta de configuración del Agente (por ejemplo, en la carpeta conf.d bajo 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
    

    Nota: Si ya tiene una etiqueta service configurada globalmente en el archivo de configuración principal de su Agente, las métricas del proceso están etiquetadas con dos servicios. Dado que esto puede causar confusión al interpretar las métricas, se recomienda configurar la etiqueta service solo en la configuración de la verificación de proceso.

Serverless environment

Para más información sobre funciones de AWS Lambda, consulte cómo conectar su telemetría de Lambda usando etiquetas.

OpenTelemetry

Al usar OpenTelemetry, mapee los siguientes atributos de recurso a sus convenciones correspondientes de Datadog:

Convención de OpenTelemetryConvención de Datadog
deployment.environment 1env
deployment.environment.name 2env
service.nameservice
service.versionversion

1: deployment.environment está en desuso en favor de deployment.environment.name en convenciones semánticas de OpenTelemetry v1.27.0.
2: deployment.environment.name es compatible con Datadog Agent 7.58.0+ y Datadog Exporter v0.110.0+.

Variables de entorno específicas de Datadog como DD_SERVICE, DD_ENV o DD_VERSION no son compatibles de forma predeterminada en su configuración de OpenTelemetry.

Para establecer atributos de recursos utilizando variables de entorno, configure OTEL_RESOURCE_ATTRIBUTES con los valores apropiados:

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

Para establecer atributos de recursos en el código de su aplicación, cree un Resource con los atributos deseados y asócialo con su TracerProvider.

Aquí hay un ejemplo usando 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)

Para establecer atributos de recursos desde el OpenTelemetry Collector, use el procesador de transformación en su archivo de configuración del Collector. El procesador de transformación le permite modificar los atributos de los datos de telemetría recopilados antes de enviarlos al exportador de 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")
...

Lectura adicional