Información general

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

Estas tres etiquetas (tags) te permiten:

  • Identificar el impacto del despliegues con métricas de rastreo y de contenedor filtradas por versión
  • Navegar sin problemas a través de trazas (traces), métricas y logs con etiquetas (tags) coherentes
  • Ver datos de servicios basados en el entorno o la versión de manera unificada

Notas:

  • Se espera que la etiqueta (tag) de version cambie con cada nuevo despliegue de la aplicación. Dos versiones diferentes del código de tu aplicación deberían tener diferentes etiquetas de version.
  • El servicio oficial de un log es por defecto la imagen corta del contenedor, si no hay una configuración de logs de Autodiscovery presente. Para reemplazar el servicio oficial de un log, añade etiquetas (labels) de Docker/anotaciones de pod de Autodiscovery. Por ejemplo: "com.datadoghq.ad.logs"='[{"service": "service-name"}]'
  • La información del host se excluye para la base de datos y los tramos (spans) de caché porque el host asociado con el tramo no es el host de base de datos/caché.

Requisitos

LenguajeVersión mínima del rastreador
.NET1.17.0 o posterior
C++v0.1.0 o posterior
Go1.24.0 o posterior
Java0.50.0 o posterior
Node0.20.3 o posterior
PHP0.47.0 o posterior
Python0.38.0 o posterior
Ruby0.34.0 o posterior

Configuración

Para empezar a configurar el etiquetado de servicios unificado, elige tu entorno:

Entorno contenedorizado

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

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

  1. Activa Autodiscovery. Esto permitirá al Datadog Agent identificar automáticamente los servicios que se ejecutan en un contenedor concreto y recopilar datos de esos servicios para asignar variables de entorno a las etiquetas (tags) env, service, y version.

  2. Si utilizas Docker, asegúrate de que el Agent pueda acceder al socket de Docker de tu contenedor. Esto permitirá al Agent detectar las variables de entorno y asignarlas a etiquetas (tags) estándar.

  3. Configura el entorno que corresponda a tu servicio de orquestación de contenedores, según la configuración completa o parcial, tal y como se indica a continuación.

Configuración

Si has implementado el Agent de clúster de Datadog con el controlador de admisión activado, este último mutará los manifiestos del pod e introducirá todas las variables de entorno requeridas (en función de las condiciones de mutación establecidas). En ese caso, no será necesaria la configuración manual de las variables de entorno DD_ en los manifiestos del pod. Para obtener más información, consulta la documentación del controlador de admisión.

Configuración completa

Para obtener todo el rango del etiquetado de servicios unificado al utilizar Kubernetes, añade variables de entorno tanto a nivel del objeto del despliegue como a nivel de las especificaciones de la plantilla del 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 puedes utilizar las variables de atributos de recursos de OpenTelemetry para configurar las etiquetas (tags) 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>"
Nota: La variable de entorno OTEL_SERVICE_NAME tiene prioridad sobre el atributo service.name de la variable de entorno OTEL_RESOURCE_ATTRIBUTES.
Configuración parcial
Métricas a nivel del pod

Para configurar métricas a nivel del pod, añade las siguientes etiquetas (labels) estándar (tags.datadoghq.com) a las especificaciones del pod de un despliegue, StatefulSet o tarea:

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

Estas etiquetas (labels) abarcan la CPU, la memoria, la red y las métricas de disco de Kubernetes a nivel del pod, y pueden utilizarse para introducir DD_ENV, DD_SERVICE y DD_VERSION en el contenedor de tu servicio a través de la API descendente de Kubernetes.

Si tienes varios contenedores en cada pod, podrás especificar etiquetas (labels) estándar según el 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. Configura join_standard_tags como true en tu archivo de configuración. Para conocer la localización de los parámetros, consulta este archivo de configuración de ejemplo.

  2. Añade las mismas etiquetas (labels) estándar a la colección de etiquetas del recurso principal. 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>" 
Rastreador de APM y cliente StatsD

Para configurar las variables de entorno del rastreador de APM y del cliente StatsD, utiliza la API descendente de Kubernetes con el siguiente formato:

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 sólo está habilitada para los datos de Application Performance Monitoring (APM).

Puedes utilizar la etiqueta (tag) version en APM para monitorizar despliegues e identificar despliegues de código fallidos mediante la detección automática de despliegues fallidos.

Para los datos de APM, Datadog configura la etiqueta (tag) version en el siguiente orden de prioridad. Si configuras version manualmente, Datadog no anula su valor version.

PrioridadValor de versión
1{tu valor de versión}
2{image_tag}_{first_7_digits_of_git_commit_sha}
3{image_tag} o {first_7_digits_of_git_commit_sha} si sólo uno está disponible

Requisitos:

  • Datadog Agent versión 7.52.0 o posterior
  • Si tus servicios se ejecutan en un entorno contenedorizado y image_tag es suficiente para el seguimiento de los despliegues de nuevas versiones, no es necesaria ninguna configuración adicional.
  • Si tus servicios no se ejecutan en un entorno contenedorizado o si también te gustaría incluir el git SHA, integra información de Git en tus artefactos de creación
Configuración completa

Configura las variables de entorno DD_ENV, DD_SERVICE y DD_VERSION y las etiquetas (labels) de Docker correspondientes a tu contenedor, para acceder a todo el rango del etiquetado de servicios unificado.

Los valores de service y version pueden proporcionarse en el archivo de Docker:

ENV DD_SERVICE <SERVICE>
ENV DD_VERSION <VERSION> 

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

Puesto que env probablemente se determine en el momento del despliegue, puedes introducir la etiqueta (label) y la variable de entorno más adelante:

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

Si lo prefieres, también puedes configurar todo en el momento del despliegue:

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 tu servicio no necesita las variables de entorno de Datadog (por ejemplo, si se trata de un software de terceros como Redis, PostgreSQL, NGINX y aplicaciones sin rastreo de APM), puedes utilizar simplemente las etiquetas (labels) de Docker:

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

Como se explica en la configuración completa, estas etiquetas (labels) se pueden configurar en un archivo de Docker o como argumentos para iniciar el contenedor.

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

Puedes utilizar la etiqueta (tag) version en APM para monitorizar despliegues e identificar despliegues de código fallidos mediante la detección automática de despliegues fallidos.

Para los datos de APM, Datadog configura la etiqueta (tag) version en el siguiente orden de prioridad. Si configuras version manualmente, Datadog no anula su valor version.

PrioridadValor de versión
1{tu valor de versión}
2{image_tag}_{first_7_digits_of_git_commit_sha}
3{image_tag} o {first_7_digits_of_git_commit_sha} si sólo uno está disponible

Requisitos:

  • Datadog Agent versión 7.52.0 o posterior
  • Si tus servicios se ejecutan en un entorno contenedorizado y image_tag es suficiente para el seguimiento de los despliegues de nuevas versiones, no es necesaria ninguna configuración adicional.
  • Si tus servicios no se ejecutan en un entorno contenedorizado o si también te gustaría incluir el git SHA, integra información de Git en tus artefactos de creación
En ECS Fargate que utiliza Fluent Bit o FireLens, el etiquetado de servicios unificado sólo está disponible para métricas y trazas, no para la recopilación de logs.
Configuración completa

Configura las variables de entorno DD_ENV, DD_SERVICE y DD_VERSION (con el etiquetado automático de versiones opcional) y las etiquetas (labels) de Docker correspondientes en el entorno de ejecución de cada contenedor de servicio, para obtener el rango completo del etiquetado de servicios unificado. Por ejemplo, puedes definir toda esta configuración en un mismo lugar a través de tu definición de tareas 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>"
}
Configuración parcial

Si tu servicio no necesita las variables de entorno de Datadog (por ejemplo, si se trata de un software de terceros como Redis, PostgreSQL, NGINX y aplicaciones sin rastreo de APM), puedes utilizar simplemente las etiquetas (labels) de Docker en tu definición de tareas 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 sólo está habilitada para los datos de Application Performance Monitoring (APM).

Puedes utilizar la etiqueta (tag) version en APM para monitorizar despliegues e identificar despliegues de código fallidos mediante la detección automática de despliegues fallidos.

Para datos de APM, Datadog configura la etiqueta (tag) version en el siguiente orden de prioridad. Si configuras version manualmente, Datadog no anula su valor version.

PrioridadValor de versión
1{tu valor de versión}
2{image_tag}_{first_7_digits_of_git_commit_sha}
3{image_tag} o {first_7_digits_of_git_commit_sha} si sólo uno está disponible

Requisitos:

  • Datadog Agent versión 7.52.0 o posterior
  • Si tus servicios se ejecutan en un entorno contenedorizado y image_tag es suficiente para el seguimiento de los despliegues de nuevas versiones, no es necesaria ninguna configuración adicional.
  • Si tus servicios no se ejecutan en un entorno contenedorizado o si también te gustaría incluir el git SHA, integra información de Git en tus artefactos de creación

Entorno no contenedorizado

Según cómo crees e implementes los archivos binarios o ejecutables de tus servicios, tendrás distintas opciones disponibles para configurar las variables de entorno. Dado que puedes ejecutar uno o varios servicios por host, Datadog recomienda definir el contexto de estas variables de entorno en un solo proceso.

Para crear un único punto de configuración de toda la telemetría emitida directamente desde la herramienta de gestión de trazas, logs, recursos RUM, tests Synthetic, métricas de StatsD o métricas del sistema de tus servicios, tienes dos opciones:

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

    DD_ENV=<env> DD_SERVICE=<service> DD_VERSION=<version> /bin/my-service
    
  2. También puedes utilizar Chef, Ansible u otra herramienta de orquestación para rellenar el archivo de configuración systemd o initd de un servicio con las variables de entorno DD. Cuando se inicie el proceso del servicio, este tendrá acceso a las variables.

    Al configurar tus trazas para llevar a cabo el etiquetado de servicios unificado:

    1. Configura el rastreador de APM con DD_ENV para que la definición de env sea lo más parecida posible a la aplicación que genera las trazas. Este método permite que la etiqueta (tag) env se obtenga automáticamente de una etiqueta de los metadatos del tramo.

    2. Configura tramos con DD_VERSION para añadir la versión a todos los tramos del servicio que pertenece al rastreador (generalmente, DD_SERVICE). De este modo, si tu servicio crea tramos con el nombre de un servicio externo, esos tramos no recibirán version como etiqueta (tag).

      Siempre que la versión esté presente en tramos, se añadirá a las métricas de rastreo generadas a partir de esos tramos. La versión se puede añadir al código manualmente o bien automáticamente mediante el rastreador de APM. Cuando están configurados, APM y los clientes DogStatsD los utilizan para etiquetar datos de trazas y métricas de StatsD con env, service y version. Si el rastreador de APM está habilitado, también introducirá los valores de estas variables en tus logs.

      Nota: Solo puede haber un servicio por tramo. Por lo general, las métricas de rastreo también tienen un único servicio. Sin embargo, si tienes otro servicio definido en las etiquetas (tags) de tus hosts, esa etiqueta de servicio configurada aparecerá en todas las métricas de rastreo emitidas desde ese host.

    Si utilizas trazas y logs conectados, activa la introducción automática de logs siempre que tu rastreador de APM lo permita. De esta forma, el rastreador de APM introducirá automáticamente env, service y version en tus logs, lo que significa que no tendrás que configurar esos campos manualmente en otros lugares.

    Si utilizas RUM y trazas conectados, especifica la aplicación de navegador en el campo service , define el entorno en el campo env y enumera las versiones en el campo version de tu archivo de inicialización.

    Cuando crees una aplicación de RUM, confirma los nombres de env y service.

    Si utilizas trazas y tests conectados del navegador Synthetic, especifica una URL a la que haya que enviar las cabeceras en la sección APM Integration for Browser Tests (Integración de APM para tests de navegador) de la página de configuración de integraciones.

    Puedes utilizar * como comodín. Ejemplo: https://*.datadoghq.com.

    Las etiquetas (tags) se añaden solo a modo de anexo en el caso de las métricas de StatsD personalizadas. Por ejemplo, si tienes dos valores distintos para env, las métricas se etiquetan con ambos entornos. No existe ningún orden que haga que una etiqueta reemplace a otra con el mismo nombre.

    Si tu servicio tiene acceso a DD_ENV, DD_SERVICE y DD_VERSION, el cliente DogStatsD añadirá automáticamente las etiquetas (tags) correspondientes a tus métricas personalizadas.

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

    Puedes añadir etiquetas (tags) env y service a las métricas de tu infraestructura. En contextos no contenedorizados, el etiquetado de las métricas de servicios se configura a nivel del Agent.

    Dado que esta configuración no cambia en cada invocación del proceso de un servicio, no recomendamos añadir version.

    Un solo servicio por host

    Define la siguiente configuración en el archivo de configuración principal del Agent:

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

    Esta configuración garantiza el etiquetado uniforme de env y service en todos los datos emitidos por el Agent.

    Varios servicios por host

    Define la siguiente configuración en el archivo de configuración principal del Agent:

    env: <ENV>
    

    Para obtener etiquetas (tags) de service únicas en las métricas de CPU, de memoria y de E/S de disco a nivel del proceso, deberás configurar un check del proceso en la carpeta de configuración del Agent (por ejemplo, en la carpeta conf.d en 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 tienes una etiqueta (tag) service configurada globalmente en el archivo de configuración principal de tu Agent, las métricas del proceso se etiquetan con dos servicios. Como esto puede resultar confuso para la interpretación de las métricas, se recomienda establecer la etiqueta service únicamente en la configuración del check del proceso.

Entorno serverless

Para obtener más información sobre las funciones de AWS Lambda, consulta cómo conectar tu telemetría de Lambda mediante el uso de etiquetas (tags)).

OpenTelemetry

Cuando utilices OpenTelemetry, asigna los siguientes atributos de recursos a sus correspondientes convenciones de Datadog:

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

1: deployment.environment queda obsoleto en favor de deployment.environment.name en convenciones semánticas de OpenTelemetry v1.27.0.
2: deployment.environment.name es compatible con el Datadog Agent v7.58.0 o posterior y con Datadog Exporter v0.110.0 o posterior.

Algunas variables de entorno específicas de Datadog como DD_SERVICE, DD_ENV o DD_VERSION no son compatibles de forma predefinida en tu configuración de OpenTelemetry.

Para definir atributos de recursos utilizando variables de entorno, configura OTEL_RESOURCE_ATTRIBUTES con los valores adecuados:

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

Para definir los atributos de los recursos en el código de tu aplicación, crea un Resource con los atributos elegidos y asócialo a tu TracerProvider.

El siguiente es un ejemplo de uso de 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 definir atributos de recursos desde el recopilador OpenTelemetry, utiliza el procesador de transformación en el archivo de configuración de tu recopilador. El procesador de transformación 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")
...

Referencias adicionales