Trazando aplicaciones Docker
A partir de la versión 6.0.0 del Agente, el Agente de Trazas está habilitado por defecto. Si se ha desactivado, puedes volver a habilitarlo en el contenedor registry.datadoghq.com/agent pasando DD_APM_ENABLED=true como una variable de entorno.
Los comandos de CLI en esta página son para el tiempo de ejecución de Docker. Reemplaza docker con nerdctl para el tiempo de ejecución de containerd, o podman para el tiempo de ejecución de Podman.
Si estás recolectando trazas de una aplicación en contenedores (tu Agente y aplicación ejecutándose en contenedores separados), como alternativa a las siguientes instrucciones, puedes inyectar automáticamente el SDK en tu aplicación. Lee
Inyectando bibliotecas para instrucciones.
Trazando desde el host
La trazabilidad está disponible en el puerto 8126/tcp desde tu host solamente añadiendo la opción -p 127.0.0.1:8126:8126/tcp al comando docker run.
Para hacerlo disponible desde cualquier host, usa -p 8126:8126/tcp en su lugar.
Por ejemplo, el siguiente comando permite que el Agente reciba trazas solo de tu host:
docker run -d --cgroupns host \
--pid host \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /proc/:/host/proc/:ro \
-v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
-p 127.0.0.1:8126:8126/tcp \
-e DD_API_KEY=<DATADOG_API_KEY> \
-e DD_APM_ENABLED=true \
-e DD_SITE=<DATADOG_SITE> \
registry.datadoghq.com/agent:latest
Donde se encuentra tu <DATADOG_SITE> (por defecto es datadoghq.com).
docker run -d -p 127.0.0.1:8126:8126/tcp \
-e DD_API_KEY=<DATADOG_API_KEY> \
-e DD_APM_ENABLED=true \
-e DD_SITE=<DATADOG_SITE> \
registry.datadoghq.com/agent:latest
Donde se encuentra tu <DATADOG_SITE> (por defecto es datadoghq.com).
Variables de entorno del agente APM de Docker
Utiliza las siguientes variables de entorno para configurar el trazado para el Datadog Agent en Docker. Consulta el archivo de muestra config_template.yaml para más detalles.
DD_API_KEY- requerido - cadena
Tu clave API de Datadog. DD_SITE- opcional - cadena
Tu sitio de Datadog. Establece esto en .
Default: datadoghq.com DD_APM_ENABLED- opcional - Booleano - por defecto:
true
Cuando se establece en true (por defecto), el Datadog Agent acepta trazas y métricas de traza. DD_APM_RECEIVER_PORT- opcional - entero - predeterminado:
8126
Establece el puerto en el que escucha el receptor de trazas del Agente de Datadog. Establezca en 0 para deshabilitar el receptor HTTP. DD_APM_RECEIVER_SOCKET- opcional - cadena
Para recopilar sus trazas a través de Sockets de Dominio UNIX, proporcione la ruta al socket UNIX. Si se establece, esto tiene prioridad sobre la configuración de nombre de host y puerto, y debe apuntar a un archivo de socket válido. DD_APM_NON_LOCAL_TRAFFIC- opcional - Booleano - predeterminado:
false
Cuando se establece en true, el Agente de Datadog escucha tráfico no local. Si está trazando desde otros contenedores, establezca esta variable de entorno en true. DD_APM_DD_URL- opcional - cadena
Para usar un proxy para APM, proporcione el punto final y el puerto como <ENDPOINT>:<PORT>. El proxy debe ser capaz de manejar conexiones TCP. DD_APM_CONNECTION_LIMIT- requerido - entero - predeterminado:
2000
Establece el número máximo de conexiones APM para un intervalo de 30 segundos. Consulte Límites de Tasa del Agente para más detalles. DD_APM_IGNORE_RESOURCES- opcional - [cadena]
Proporciona una lista de exclusión de recursos que el Agente de Datadog debe ignorar. Si el nombre del recurso de una traza coincide con una o más de las expresiones regulares en esta lista, la traza no se envía a Datadog.
Ejemplo: "GET /ignore-me","(GET\|POST) and-also-me". DD_APM_FILTER_TAGS_REQUIRE- opcional - objeto
Define reglas para el filtrado de trazas basado en etiquetas. Para ser enviados a Datadog, las trazas deben tener estas etiquetas. Ver Ignorando Recursos No Deseados en APM. DD_APM_FILTER_TAGS_REGEX_REQUIRE- opcional - objeto
Compatible en Agente 7.49+. Define reglas para el filtrado de trazas basado en etiquetas con expresiones regulares. Para ser enviados a Datadog, las trazas deben tener etiquetas que coincidan con estos patrones regex. DD_APM_FILTER_TAGS_REJECT- opcional - objeto
Define reglas para el filtrado de trazas basado en etiquetas. Si una traza tiene estas etiquetas, no se envía a Datadog. Ver Ignorando Recursos No Deseados en APM para más detalles. DD_APM_FILTER_TAGS_REGEX_REJECT- opcional - objeto
Compatible con Agent 7.49+. Define reglas para el filtrado de trazas basado en etiquetas con expresiones regulares. Si una traza tiene etiquetas que coinciden con estos patrones de expresión regular, la traza no se envía a Datadog. DD_APM_REPLACE_TAGS- opcional - [objeto]
Define un conjunto de reglas para reemplazar o eliminar etiquetas que contienen información potencialmente sensible. DD_HOSTNAME- opcional - cadena - predeterminado: detectado automáticamente
Establece el servidor a utilizar para métricas si la detección automática de servidor falla, o al ejecutar el Agent de clúster de Datadog. DD_DOGSTATSD_PORT- opcional - entero - predeterminado:
8125
Establece el puerto de DogStatsD. DD_PROXY_HTTPS- opcional - cadena
Para usar un proxy para conectarse a Internet, proporcione la URL. DD_BIND_HOST- opcional - cadena - predeterminado:
localhost
Establece el servidor para escuchar en DogStatsD y trazas. DD_LOG_LEVEL- opcional - cadena - predeterminado:
info
Establece el nivel mínimo de registro. Opciones válidas: trace, debug, info, warn, error, critical y off.
Trazas desde otros contenedores
Al igual que con DogStatsD, las trazas pueden ser enviadas al Agent desde otros contenedores utilizando redes de Docker o con la IP del servidor de Docker.
Red de Docker
Como primer paso, crea una red de puente definida por el usuario:
docker network create <NETWORK_NAME>
Los comandos de CLI en esta página son para el tiempo de ejecución de Docker. Reemplaza docker con nerdctl para el tiempo de ejecución de containerd, o podman para el tiempo de ejecución de Podman.
Luego inicia el Agente y el contenedor de la aplicación, conectados a la red previamente creada:
# Datadog Agent
docker run -d --name datadog-agent \
--network <NETWORK_NAME> \
--cgroupns host \
--pid host \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /proc/:/host/proc/:ro \
-v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
-e DD_API_KEY=<DATADOG_API_KEY> \
-e DD_APM_ENABLED=true \
-e DD_SITE=<DATADOG_SITE> \
-e DD_APM_NON_LOCAL_TRAFFIC=true \
registry.datadoghq.com/agent:latest
# Application
docker run -d --name app \
--network <NETWORK_NAME> \
-e DD_AGENT_HOST=datadog-agent \
company/app:latest
Donde se encuentra tu <DATADOG_SITE> (por defecto es datadoghq.com).
# Datadog Agent
docker run -d --name datadog-agent \
--cgroupns host \
--pid host \
--network "<NETWORK_NAME>" \
-e DD_API_KEY=<DATADOG_API_KEY> \
-e DD_APM_ENABLED=true \
-e DD_SITE=<DATADOG_SITE> \
-e DD_APM_NON_LOCAL_TRAFFIC=true \
registry.datadoghq.com/agent:latest
# Application
docker run -d --name app \
--network "<NETWORK_NAME>" \
-e DD_AGENT_HOST=datadog-agent \
company/app:latest
Donde se encuentra tu <DATADOG_SITE> (por defecto es datadoghq.com).
Esto expone el servidor datadog-agent en tu contenedor app.
Si estás usando docker-compose, los parámetros <NETWORK_NAME> son los definidos en la sección networks de tu docker-compose.yml.
Tus SDKs de aplicación deben estar configurados para enviar trazas a esta dirección. Establece variables de entorno con DD_AGENT_HOST como el nombre del contenedor del Agent, y DD_TRACE_AGENT_PORT como el puerto de trazas del Agent en tus contenedores de aplicación. El ejemplo anterior utiliza el host datadog-agent y el puerto 8126 (el valor predeterminado, por lo que no tienes que configurarlo).
Alternativamente, consulta los ejemplos a continuación para establecer manualmente el host del Agente en cada lenguaje soportado:
Actualice la configuración del Java Agent mediante variables de entorno:
DD_AGENT_HOST=datadog-agent \
DD_TRACE_AGENT_PORT=8126 \
java -javaagent:/path/to/the/dd-java-agent.jar -jar /your/app.jar
o a través de propiedades del sistema:
java -javaagent:/path/to/the/dd-java-agent.jar \
-Ddd.agent.host=datadog-agent \
-Ddd.agent.port=8126 \
-jar /your/app.jar
from ddtrace import tracer
tracer.configure(
hostname='datadog-agent',
port=8126,
)
Datadog.configure do |c|
c.agent.host = 'datadog-agent'
c.agent.port = 8126
end
Note: This documentation uses v2 of the Go tracer, which Datadog recommends for all users. If you are using v1, see the migration guide to upgrade to v2.
package main
import (
"github.com/DataDog/dd-trace-go/v2/ddtrace/tracer"
)
func main() {
tracer.Start(tracer.WithAgentAddr("datadog-agent:8126"))
defer tracer.Stop()
}
const tracer = require('dd-trace').init({
hostname: 'datadog-agent',
port: 8126
});
Establezca las variables de entorno antes de ejecutar su aplicación instrumentada:
# Environment variables
export CORECLR_ENABLE_PROFILING=1
export CORECLR_PROFILER={846F5F1C-F9AE-4B07-969E-05C26BC060D8}
export CORECLR_PROFILER_PATH=<SYSTEM_DEPENDENT_PATH>
export DD_DOTNET_TRACER_HOME=/opt/datadog
# For containers
export DD_AGENT_HOST=datadog-agent
export DD_TRACE_AGENT_PORT=8126
# Start your application
dotnet example.dll
El valor de la variable de entorno CORECLR_PROFILER_PATH varía según el sistema donde se está ejecutando la aplicación:
| Sistema Operativo y Arquitectura de Proceso | Valor de CORECLR_PROFILER_PATH |
|---|
| Alpine Linux x64 | <APP_DIRECTORY>/datadog/linux-musl-x64/Datadog.Trace.ClrProfiler.Native.so |
| Linux x64 | <APP_DIRECTORY>/datadog/linux-x64/Datadog.Trace.ClrProfiler.Native.so |
| Linux ARM64 | <APP_DIRECTORY>/datadog/linux-arm64/Datadog.Trace.ClrProfiler.Native.so |
| Windows x64 | <APP_DIRECTORY>\datadog\win-x64\Datadog.Trace.ClrProfiler.Native.dll |
| Windows x86 | <APP_DIRECTORY>\datadog\win-x86\Datadog.Trace.ClrProfiler.Native.dll |
En la tabla anterior, <APP_DIRECTORY> se refiere al directorio que contiene los archivos .dll de la aplicación.
IP del host de Docker
El puerto del contenedor del Agent 8126 debe estar vinculado directamente al host.
Configure su application tracer para informar a la ruta predeterminada de este contenedor (determine esto usando el comando ip route).
Lo siguiente es un ejemplo para el Python Tracer, asumiendo que 172.17.0.1 es la ruta predeterminada:
from ddtrace import tracer
tracer.configure(hostname='172.17.0.1', port=8126)
Socket de dominio Unix (UDS)
Para enviar trazas a través de socket, el socket debe estar montado en el contenedor del Agent y en el contenedor de su aplicación.
# Datadog Agent
docker run -d --name datadog-agent \
--network <NETWORK_NAME> \
--cgroupns host \
--pid host \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /proc/:/host/proc/:ro \
-v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
-v /var/run/datadog/:/var/run/datadog/ \
-e DD_API_KEY=<DATADOG_API_KEY> \
-e DD_APM_ENABLED=true \
-e DD_SITE=<DATADOG_SITE> \
-e DD_APM_NON_LOCAL_TRAFFIC=true \
-e DD_APM_RECEIVER_SOCKET=/var/run/datadog/apm.socket \
registry.datadoghq.com/agent:latest
# Application
docker run -d --name app \
--network <NETWORK_NAME> \
-v /var/run/datadog/:/var/run/datadog/ \
-e DD_TRACE_AGENT_URL=unix:///var/run/datadog/apm.socket \
company/app:latest
Consulte la documentación de instrumentación APM específica del lenguaje para la configuración del tracer.
Lectura Adicional
Más enlaces, artículos y documentación útiles: