Instrumentación APM de un solo paso en Kubernetes
En un entorno Kubernetes, utiliza la instrumentación de un solo paso (SSI) para APM para instalar el Datadog Agent e instrumentar tus aplicaciones con los SDK de APM en un solo paso.
Requisitos
Activar APM en tus aplicaciones
La instrumentación de un solo paso no instrumenta las aplicaciones en el espacio de nombres donde está instalado el Datadog Agent. Instala el Agent en un espacio de nombres separado donde no ejecutes tus aplicaciones.
Sigue estos pasos para activar la instrumentación de un solo paso en todo tu clúster. Esta acción envía automáticamente trazas (traces) de todas las aplicaciones escritas en los lenguajes compatibles.
Nota: Para instrumentar solo espacios de nombres o pods específicos, consulta la orientación de la carga de trabajo en Opciones avanzadas.
En Datadog, ve a la página Instalar el Datadog Agent en Kubernetes.
Sigue las instrucciones que aparecen en pantalla para seleccionar el método de instalación, seleccionar una clave de API y configurar el Operator o el repositorio de Helm.
En la sección Configure datadog-agent.yaml (Configurar datadog-agent.yaml), ve a Additional Configuration > Application Observability (Configuración adicional > Observabilidad de aplicaciones) y activa la instrumentación APM.
Despliega el Agent utilizando el archivo de configuración generado.
Reinicia tus aplicaciones.
La SSI añade una pequeña cantidad de tiempo de arranque a las aplicaciones instrumentadas. Si esta sobrecarga no es aceptable para tu caso de uso, ponte en contacto con el
servicio de asistencia de Datadog.
Las etiquetas (tags) de servicio unificadas (UST) aplican etiquetas (tags) coherentes en trazas, métricas y logs, lo que facilita la navegación y la correlación de tus datos de observabilidad. Puedes configurar UST mediante la extracción de etiquetas (labels), que es la opción recomendada, o en manifiestos de despliegue.
Con la SSI, puedes extraer automáticamente los valores de las UST de etiquetas (labels) y metadatos de pods sin modificar los despliegues individuales. Para ello, configura kubernetesResourcesLabelsAsTags para asignar tus etiquetas (labels) de Kubernetes existentes a tags (etiquetas) de servicios Datadog.
Requisitos previos
| Componente | Versión mínima |
|---|
datadog-agent | 7.69 |
datadog-operator | 1.16.0 |
datadog-helm-chart | 3.120.0 |
Configuración automática
Sustituye app.kubernetes.io/name en el siguiente ejemplo por cualquier etiqueta (label) que contenga el nombre de tu servicio (por ejemplo, service.kubernetes.io/name o component). Puedes configurar varias etiquetas (labels) de esta forma.
datadog:
# Extraer automáticamente nombres de servicio de las etiquetas (labels) de Kubernetes
kubernetesResourcesLabelsAsTags:
pods:
app.kubernetes.io/name: service # Etiqueta (label) moderna de Kubernetes
deployments.apps:
app.kubernetes.io/name: service
replicasets.apps:
app.kubernetes.io/name: service
# Configurar el entorno globalmente para todo el clúster
tags:
- "env:production"
apm:
instrumentation:
enabled: true
Con esta configuración, Datadog configura automáticamente la etiqueta (tag) service utilizando el valor de la etiqueta app.kubernetes.io/name (label) para cualquier carga de trabajo instrumentada que incluya esta etiqueta (label).
Control explícito con ddTraceConfigs
En la mayoría de los casos, la configuración automática es suficiente. Sin embargo, si necesitas un control granular sobre las configuraciones de cargas de trabajo específicas, utiliza ddTraceConfigs para asignar explícitamente etiquetas (labels) a configuraciones de servicio:
datadog:
kubernetesResourcesLabelsAsTags:
pods:
app.kubernetes.io/name: service
deployments.apps:
app.kubernetes.io/name: service
# Configurar el entorno globalmente para todo el clúster
tags:
- "env:production"
apm:
instrumentation:
enabled: true
targets:
- name: frontend-services
podSelector:
matchLabels:
tier: frontend
ddTraceConfigs:
- name: DD_SERVICE # Anular explícitamente el nombre de servicio
valueFrom:
fieldRef:
fieldPath: metadata.labels['app.kubernetes.io/name']
# DD_ENV heredada de etiquetas (tags) a nivel del clúster de aquí arriba
# DD_VERSION extraída automáticamente de etiquetas (tags) de imagen
Configurar UST en manifiestos de despliegue
Si tu configuración no utiliza las etiquetas (labels) adecuadas para la extracción de UST, puedes configurar las UST directamente en tus manifiestos de despliegue utilizando variables de entorno. Este enfoque requiere modificar cada despliegue individualmente, pero ofrece un control preciso.
Para obtener instrucciones completas, consulta la configuración de UST para servicios de Kubernetes.
Activar productos y funciones dependientes de SDK
Después de que la SSI cargue el SDK de Datadog en tus aplicaciones y active el rastreo distribuido, puedes configurar productos adicionales que dependan del SDK. Estos incluyen funciones tales como Continuous Profiler, Application Security Monitoring y los controles de ingesta de trazas.
Utiliza uno de los siguientes métodos de configuración:
Configurar con cargas de trabajo específicas (recomendado):
Por defecto, Single Step Instrumentation instrumenta todos los servicios en todos los espacios de nombres. Utiliza la orientación a las cargas de trabajo para limitar la instrumentación a espacios de nombres, pods y cargas de trabajo específicos, y aplica configuraciones personalizadas.
Configurar variables de entorno:
Activa productos definiendo variables de entorno directamente en la configuración de tu aplicación.
Opciones avanzadas
Utiliza las siguientes opciones avanzadas para personalizar el comportamiento de la instrumentación de un solo paso en tu entorno. Estos ajustes son opcionales y normalmente solo son necesarios en configuraciones especializadas.
Cargas de trabajo específicas del destino
Por defecto, la SSI instrumenta todos los servicios en todos los espacios de nombres de tu clúster. Según cuál sea tu versión del Agent, utiliza uno de los siguientes métodos de configuración para refinar qué servicios se instrumentan y de qué manera.
Crea bloques de destino con la etiqueta (label) targets para especificar qué cargas de trabajo instrumentar y qué configuraciones aplicar.
Cada bloque de destino tiene las siguientes claves:
| Clave | Descripción |
|---|
name | El nombre del bloque de destino. No tiene ningún efecto sobre el estado de monitorización y sólo se utiliza como metadatos. |
namespaceSelector | Los espacios de nombres que se instrumentarán. Especifífcalos utilizando uno o más de: - matchNames: Una lista de uno o más nombres de espacios de nombres. - matchLabels: Una lista de una o más etiquetas (labels) definidas en pares {key,value}. - matchExpressions: Una lista de requisitos del selector de espacios de nombres.
Los espacios de nombres deben cumplir todos los criterios para coincidir. Para obtener más información, consulta la documentación del selector de Kubernetes. |
podSelector | Los pods que se instrumentarán. Especifícalos utilizando uno o más de: - matchLabels: Una lista de una o más etiquetas (labels) definidas en pares {key,value}. - matchExpressions: Una lista de requisitos del selector de pods.
Los pods deben cumplir todos los criterios para coincidir. Para obtener más información, consulta la documentación del selector de Kubernetes. |
ddTraceVersions | La versión del SDK de APM Datadog a utilizar para cada lenguaje. |
ddTraceConfigs | Configuraciones del SDK de APM que permiten definir etiquetas (tags) de servicio unificadas, activar productos de Datadog más allá del rastreo y personalizar otros parámetros de APM. Consulta la lista completa de opciones. |
El archivo que necesitas configurar dependerá de cómo hayas activado la instrumentación de un solo paso:
- Si has activado la SSI con el Datadog Operator, edita
datadog-agent.yaml. - Si has activado la SSI con Helm, edita
datadog-values.yaml.
Nota: Los destinos se evalúan en orden: la primera coincidencia tiene prioridad.
Ejemplos de configuraciones
Revisa los siguientes ejemplos que demuestran cómo seleccionar servicios específicos:
Esta configuración:
- Activa APM para todos los espacios de nombres excepto el espacio de nombres
jenkins.- Nota: Utiliza
enabledNamespaces para deshabilitar todos los espacios de nombres excepto los mencionados.
- indica a Datadog que instrumente las aplicaciones Java con el SDK de APM Java por defecto y las aplicaciones Python con
v.3.1.0 del SDK de APM Python.
apm:
instrumentation:
enabled: true
disabledNamespaces:
- "jenkins"
targets:
- name: "all-remaining-services"
ddTraceVersions:
java: "default"
python: "3.1.0"
Esta configuración crea dos bloques de destino:
- El primer bloque (denominado
login-service_namespace):- Activa APM para los servicios del espacio de nombres
login-service. - Indica a Datadog que instrumente los servicios de este espacio de nombres con la versión por defecto del SDK de APM Java.
- Define la variable de entorno
DD_PROFILING_ENABLED para este grupo de destino.
- El segundo bloque (denominado
billing-service_apps)- Activa APM para los servicios del espacio o espacios de nombres con la etiqueta (label)
app:billing-service. - Indica a Datadog que instrumente este conjunto de servicios con
v3.1.0 del SDK de APM Python.
apm:
instrumentation:
enabled: true
targets:
- name: "login-service_namespace"
namespaceSelector:
matchNames:
- "login-service"
ddTraceVersions:
java: "default"
ddTraceConfigs:
- name: "DD_PROFILING_ENABLED" ## la generación de perfiles está activada para todos los servicios en este espacio de nombres
value: "auto"
- name: "billing-service_apps"
namespaceSelector:
matchLabels:
app: "billing-service"
ddTraceVersions:
python: "3.1.0"
Esta configuración hace lo siguiente:
- Activa APM para los pods con las siguientes etiquetas (labels):
app:db-userque marca los pods que ejecutan la aplicación db-user.webserver:routingque marca los pods que ejecutan la aplicación request-router.
- Indica a Datadog que utilice las versiones por defecto de los SDK de rastreadores Datadog.
- Define variables de entorno de Datadog para aplicar a cada grupo de destino y configurar los SDK.
apm:
instrumentation:
enabled: true
targets:
- name: "db-user"
podSelector:
matchLabels:
app: "db-user"
ddTraceVersions:
java: "default"
ddTraceConfigs: ## configuraciones de rastreo definidas para servicios en pods coincidentes
- name: "DD_DATA_STREAMS_ENABLED"
value: "true"
- name: "user-request-router"
podSelector:
matchLabels:
webserver: "user"
ddTraceVersions:
php: "default"
Esta configuración:
- Activa APM para los pods etiquetados (label) como
app:password-resolver en el espacio de nombres login-service. - Indica a Datadog que utilice la versión por defecto del SDK del rastreador Datadog.
- Define variables de entorno de Datadog que se aplicarán a este destino.
apm:
instrumentation:
enabled: true
targets:
- name: "login-service-namespace"
namespaceSelector:
matchNames:
- "login-service"
podSelector:
matchLabels:
app: "password-resolver"
ddTraceVersions:
java: "default"
ddTraceConfigs:
- name: "DD_PROFILING_ENABLED"
value: "auto"
Esta configuración activa APM para todos los pods, excepto los que tienen alguna de las etiquetas (labels) app=app1 o app=app2.
apm:
instrumentation:
enabled: true
targets:
- name: "default-target"
podSelector:
matchExpressions:
- key: app
operator: NotIn
values:
- app1
- app2
Activar o desactivar la instrumentación de los espacios de nombres
Puedes elegir habilitar o deshabilitar la instrumentación para aplicaciones en espacios de nombres específicos. Sólo puedes definir espacios de nombres habilitados o espacios de nombres deshabilitados, no ambos.
El archivo que tienes que configurar depende de si has habilitado la instrumentación de un solo paso con el Datadog Operator o con Helm:
Para habilitar la instrumentación para espacios de nombres específicos, añade la configuración enabledNamespaces a datadog-agent.yaml:
features:
apm:
instrumentation:
enabled: true
enabledNamespaces: # Añadir espacios de nombres que se van a instrumentar
- default
- applications
Para deshabilitar la instrumentación para determinados espacios de nombres, añade la configuración disabledNamespaces a datadog-agent.yaml:
features:
apm:
instrumentation:
enabled: true
disabledNamespaces: # Añadir espacios de nombres que no se van a instrumentar
- default
- applications
Para habilitar la instrumentación para espacios de nombres específicos, añade la configuración enabledNamespaces a datadog-values.yaml:
datadog:
apm:
instrumentation:
enabled: true
enabledNamespaces: # Añadir espacios de nombres que se van a instrumentar
- namespace_1
- namespace_2
Para deshabilitar la instrumentación para determinados espacios de nombres, añade la configuración disabledNamespaces a datadog-values.yaml:
datadog:
apm:
instrumentation:
enabled: true
disabledNamespaces: # Añadir espacios de nombres que no se van a instrumentar
- namespace_1
- namespace_2
Especificar versiones de bibliotecas de rastreo
A partir del Datadog Cluster Agent v7.52.0 o superior, puedes instrumentar automáticamente un subconjunto de tus aplicaciones, basándose en las bibliotecas de rastreo que especifiques.
Especifica bibliotecas de rastreo de Datadog y sus versiones para instrumentar automáticamente las aplicaciones escritas en esos lenguajes. Puedes configurarlo de dos maneras, que se aplican en el siguiente orden de precedencia:
- Especificar a nivel de servicio, o bien
- Especificar a nivel de clúster.
Por defecto: Si no se especifica ninguna versión de biblioteca, las aplicaciones escritas en lenguajes compatibles se instrumentan automáticamente utilizando las últimas versiones de bibliotecas de rastreo.
Especificar a nivel de servicio
Para instrumentar automáticamente aplicaciones en pods específicos, añade la anotación de lenguaje y la versión de biblioteca adecuadas para tu aplicación en la especificación de tu pod:
| Lenguaje | Anotación del pod |
|---|
| Java | admission.datadoghq.com/java-lib.version: "<CONTAINER IMAGE TAG>" |
| Node.js | admission.datadoghq.com/js-lib.version: "<CONTAINER IMAGE TAG>" |
| Python | admission.datadoghq.com/python-lib.version: "<CONTAINER IMAGE TAG>" |
| .NET | admission.datadoghq.com/dotnet-lib.version: "<CONTAINER IMAGE TAG>" |
| Ruby | admission.datadoghq.com/ruby-lib.version: "<CONTAINER IMAGE TAG>" |
| PHP | admission.datadoghq.com/php-lib.version: "<CONTAINER IMAGE TAG>" |
Sustituye <CONTAINER IMAGE TAG> por la versión de la biblioteca preferida. Las versiones disponibles se indican en los registros de contenedores de Datadog y en los repositorios fuente del rastreador para cada lenguaje:
Ten cuidado al utilizar la última tag (etiqueta), ya que las principales versiones de la biblioteca pueden introducir cambios de última hora.
Por ejemplo, para instrumentar aplicaciones Java automáticamente:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
# ...
spec:
template:
metadata:
annotations:
admission.datadoghq.com/java-lib.version: "<CONTAINER IMAGE TAG>"
spec:
containers:
- # ...
Especificar a nivel de clúster
Si no activas la instrumentación automática para pods específicos utilizando anotaciones, puedes especificar qué lenguajes instrumentar en todo el clúster utilizando la configuración de SSI. Cuando se configura apm.instrumentation.libVersions, solo se instrumentan las aplicaciones escritas en los lenguajes especificados, utilizando las versiones de biblioteca especificadas.
El archivo que tienes que configurar depende de si has habilitado la instrumentación de un solo paso con el Datadog Operator o con Helm:
Por ejemplo, para instrumentar aplicaciones .NET, Python, y Node.js añade la siguiente configuración a tu archivo datadog-agent.yaml:
features:
apm:
instrumentation:
enabled: true
libVersions: # Añadir las librerías y versiones que quieras configurar
dotnet: "x.x.x"
python: "x.x.x"
js: "x.x.x"
Por ejemplo, para instrumentar aplicaciones .NET, Python, y Node.js añade la siguiente configuración a tu archivo datadog-values.yaml:
datadog:
apm:
instrumentation:
enabled: true
libVersions: # Añadir las librerías y versiones que quieras configurar
dotnet: "x.x.x"
python: "x.x.x"
js: "x.x.x"
Cambiar el registro de imágenes por defecto
Datadog publica imágenes de bibliotecas de instrumentación en gcr.io, Docker Hub y Amazon ECR:
La variable de entorno DD_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_CONTAINER_REGISTRY en la configuración del Datadog Cluster Agent especifica el registro utilizado por el controlador de admisión. El valor por defecto es gcr.io/datadoghq.
Puedes extraer la biblioteca de rastreo de un registro diferente cambiándolo por docker.io/datadog, public.ecr.aws/datadog u otra URL, si alojas las imágenes en un registro de contenedores local.
Para obtener instrucciones sobre cómo cambiar el registro de contenedores, consulta Cambiar el registro de contenedores.
Utilizar un registro de contenedores privado
Si tu organización no permite extracciones directas de registros públicos (como gcr.io, docker.io o public.ecr.aws), puedes alojar internamente las imágenes necesarias de Datadog y configurar el controlador de admisión para que las utilice.
Para utilizar la SSI con un registro de contenedores privado:
Sigue estas instrucciones para replicar las imágenes de contenedor de Datadog en tu registro privado.
Solo necesitas las imágenes para los lenguajes que estás instrumentando. Si no estás seguro de cuáles necesitas, esta es una referencia que cubre la mayoría de los casos de uso:
apm-injectdd-lib-java-initdd-lib-python-initdd-lib-dotnet-initdd-lib-php-initdd-lib-ruby-initdd-lib-js-init
Puedes encontrar estas imágenes en gcr.io, Docker Hub, o Amazon ECR Public Gallery.
Etiqueta (tag) las imágenes según su configuración.
Las versiones que reflejas deben coincidir con las versiones configuradas en tus cargas de trabajo, que pueden definirse de una de las siguientes maneras:
- Globalmente en la configuración del Agent utilizando
ddTraceVersions, o bien - Por pod, utilizando anotaciones como
admission.datadoghq.com/java-lib.version.
Si no se configura explícitamente ninguna versión, se utiliza la versión por defecto (0).
Por ejemplo:
apm:
instrumentation:
enabled: true
targets:
- name: "default-target"
ddTraceVersions:
java: "1"
python: "3"
Esta configuración requiere las siguientes etiquetas (tags) de imagen:
apm-inject:0dd-lib-java-init:1dd-lib-python-init:3
Actualiza la configuración del Cluster Agent para utilizar tu registro privado.
Configura la variable de entorno DD_ADMISSION_CONTROLLER_AUTO_INSTRUMENTATION_CONTAINER_REGISTRY en la configuración de tu Cluster Agent para utilizar tu registro privado.
Para obtener más información sobre cómo cambiar el registro de contenedores, consulta Cambiar el registro de contenedores.
Uso de una interfaz de red de contenedores (CNI) en EKS
Cuando se utiliza una CNI como Calico, los nodos del plano de control no pueden iniciar conexiones de red con el controlador de admisión de Datadog e informan de un error “Address is not allowed”.
Para utilizar la instrumentación de un solo paso, modifica el Cluster Agent de Datadog con el parámetro useHostNetwork: true.
datadog:
...
clusterAgent:
useHostNetwork: true
admissionController:
...
Eliminar la instrumentación de un solo paso de tu Agent
Si no quieres recopilar datos de trazas de un determinado servicio, host, máquina virtual o contenedor, sigue los pasos que se indican a continuación:
Eliminación de la instrumentación en servicios específicos
Para eliminar la instrumentación APM y dejar de enviar trazas desde un servicio específico, puedes realizar una de las siguientes acciones:
Utilizar la selección de cargas de trabajo (recomendado).
Con la selección de cargas de trabajo (disponible para el Agent v7.64 o posterior), puedes activar y desactivar el rastreo para aplicaciones específicas. Consulta los detalles de configuración aquí.
Uso del controlador de admisión de Datadog
Como alternativa, o para una versión del Agent que no admite la selección de cargas de trabajo, también puedes desactivar la mutación de pods añadiendo una etiqueta (label) a tu pod.
Además de desactivar la SSI, los siguientes pasos desactivan otros webhooks mutantes. Utilízalos con precaución.
- Configura la etiqueta (label)
admission.datadoghq.com/enabled: como "false" para la especificación del pod:spec:
template:
metadata:
labels:
admission.datadoghq.com/enabled: "false"
- Aplica la configuración:
kubectl apply -f /path/to/your/deployment.yaml
- Reinicia los servicios de los que quieres eliminar la instrumentación.
Eliminar APM para todos los servicios de la infraestructura
Para dejar de producir trazas, desinstala APM y reinicia la infraestructura:
El archivo que tienes que configurar depende de si has habilitado la instrumentación de un solo paso con el Datadog Operator o con Helm:
Configura instrumentation.enabled=false en datadog-agent.yaml:
features:
apm:
instrumentation:
enabled: false
Despliega el Datadog Agent con el archivo de configuración actualizado:
kubectl apply -f /path/to/your/datadog-agent.yaml
Configura instrumentation.enabled=false en datadog-values.yaml:
datadog:
apm:
instrumentation:
enabled: false
Ejecuta el siguiente comando:
helm upgrade datadog-agent -f datadog-values.yaml datadog/datadog
Prácticas recomendadas
Tras activar la SSI, todos los procesos compatibles del clúster se instrumentan automáticamente y comienzan a generar trazas en cuestión de minutos.
Para controlar dónde se activa APM y reducir los gastos generales, ten en cuenta las siguientes prácticas recomendadas.
Instrumentación por defecto frente a instrumentación opcional
| Modo | Comportamiento | Cuándo utilizar |
|---|
| Valor predeterminado | Todos los procesos compatibles del clúster están instrumentados. | Pequeños clústeres o prototipos. |
| Opcional | Utiliza la selección de cargas de trabajo para restringir la instrumentación a espacios de nombres o pods específicos. | Clústeres de producción, rollouts escalonados o casos de uso sensibles a los costes. |
Ejemplo: Activar la instrumentación para pods específicos
Añade una etiqueta (label) significativa (por ejemplo, datadoghq.com/apm-instrumentation: "enabled") tanto a los metadatos de despliegue como a la plantilla del pod.
apiVersion: apps/v1
kind: Deployment
metadata:
name: checkout-api
labels:
app: checkout-api
datadoghq.com/apm-instrumentation: "enabled" # opt-in label (cluster-wide)
spec:
replicas: 3
selector:
matchLabels:
app: checkout-api
template:
metadata:
labels:
app: checkout-api
datadoghq.com/apm-instrumentation: "enabled" # opt-in label must be on *template*, too
# Unified Service Tags (recommended)
tags.datadoghq.com/service: "checkout-api"
tags.datadoghq.com/env: "prod"
tags.datadoghq.com/version: "2025-06-10"
spec:
containers:
- name: api
image: my-registry/checkout:latest
ports:
- containerPort: 8080
En tu configuración Helm del Datadog Agent, activa la SSI y utiliza podSelector para inyectar solo en pods con la etiqueta (label) opcional correspondiente.
apm:
instrumentation:
enabled: true
targets:
- name: apm-instrumented
podSelector:
matchLabels:
datadoghq.com/apm-instrumentation: "enabled"
Para ver más ejemplos, consulta la selección de cargas de trabajo.
Utiliza ddTraceVersions en tu configuración Helm del Agent para controlar el lenguaje y la versión del SDK de APM. Esto evita que se descarguen SDK innecesarios, lo que minimiza la huella del contendor de inicialización, reduce el tamaño de la imagen y permite actualizaciones más deliberadas del rastreador (por ejemplo, para cumplir con los requisitos de conformidad o simplificar la depuración).
Ejemplo: Especificar un SDK de APM Java para un espacio de nombres
En el espacio de nombres login-service solo se ejecutan aplicaciones Java. Para evitar la descarga de otros SDK, configura el Agent para que apunte a ese espacio de nombres e inyecta únicamente la versión 1.48.2 del SDK de Java.
targets:
- name: login-service
namespaceSelector:
matchNames: ["login-service"]
ddTraceVersions:
java: "1.48.2" # fijar versión
Configuración por defecto
Si un pod no coincide con ninguna regla ddTraceVersions, se aplica el destino por defecto.
targets:
- name: default-target # etiquetar cualquier pod *sin* uan anulación
ddTraceVersions:
java: "1" # permanecer en la v1.x más reciente
python: "3" # permanecer en la v3.x más reciente
js: "5" # NodeJS
php: "1"
dotnet: "3"
Solucionar problemas
Si tienes problemas para activar APM con SSI, consulta la guía de resolución de problemas de la SSI.
Referencias adicionales
Más enlaces, artículos y documentación útiles: