Tracer des applications Docker
Depuis l’Agent 6.0.0, l’Agent de trace est activé par défaut. S’il a été désactivé, vous pouvez le réactiver dans le conteneur registry.datadoghq.com/agent en transmettant DD_APM_ENABLED=true en tant que variable d’environnement.
Les commandes CLI sur cette page sont destinées au runtime Docker. Remplacez docker par nerdctl pour le runtime containerd, ou podman pour le runtime Podman.
Si vous collectez des traces à partir d'une application conteneurisée (votre Agent et votre application s'exécutant dans des conteneurs séparés), comme alternative aux instructions suivantes, vous pouvez injecter automatiquement le SDK dans votre application. Lisez
Injection de bibliothèques pour obtenir des instructions.
Traçage depuis l’hôte
Le traçage est disponible sur le port 8126/tcp depuis votre hôte uniquement en ajoutant l’option -p 127.0.0.1:8126:8126/tcp à la commande docker run.
Pour la rendre disponible depuis n’importe quel hôte, utilisez -p 8126:8126/tcp à la place.
Par exemple, la commande suivante permet à l’Agent de recevoir des traces depuis votre host uniquement :
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
Où votre <DATADOG_SITE> se trouve (par défaut 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
Où votre <DATADOG_SITE> se trouve (par défaut datadoghq.com).
Variables d’environnement de l’Agent APM Docker
Utilisez les variables d’environnement suivantes pour configurer le traçage pour l’Agent Docker.
Pour toutes les options disponibles et leurs valeurs par défaut, consultez la section apm_config du fichier de configuration d’exemple de l’Agent.
DD_API_KEY- requis - chaîne
Votre clé d’API Datadog. DD_SITE- optionnel - chaîne
Votre site Datadog. Définissez ceci sur .
Default: datadoghq.com DD_APM_ENABLED- facultatif – Booléen – par défaut:
true
Lorsqu’il est défini sur true (par défaut), le Datadog Agent accepte les traces et les métriques de trace. DD_APM_RECEIVER_PORT- facultatif – entier – par défaut:
8126
Définit le port sur lequel le récepteur de traces du Datadog Agent écoute : Définissez sur 0 pour désactiver le récepteur HTTP : DD_APM_RECEIVER_SOCKET- optionnel - chaîne
Pour collecter vos traces via des sockets de domaine UNIX, indiquez le chemin d’accès au socket UNIX : S’il est défini, cela prévaut sur la configuration de l’hôte et du port, et doit pointer vers un fichier de socket valide : DD_APM_NON_LOCAL_TRAFFIC- facultatif - Booléen - par défaut:
false
Lorsqu’il est défini sur true, le Datadog Agent écoute le trafic non local : Si vous effectuez le traçage depuis d’autres conteneurs, définissez cette variable d’environnement sur true : DD_APM_DD_URL- optionnel - chaîne
Pour utiliser un proxy pour l’APM, indiquez l’endpoint et le port sous la forme <ENDPOINT>:<PORT> : Le proxy doit être capable de gérer les connexions TCP. DD_APM_CONNECTION_LIMIT- requis - entier - par défaut:
2000
Définit le nombre maximal de connexions APM pour une fenêtre temporelle de 30 secondes : Consultez Limites de débit de l’Agent pour plus de détails. DD_APM_IGNORE_RESOURCES- optionnel - [chaîne]
Fournit une liste d’exclusion de ressources que le Datadog Agent doit ignorer : Si le nom de la ressource d’une trace correspond à une ou plusieurs expressions régulières de cette liste, la trace n’est pas envoyée à Datadog :
Exemple: "GET /ignore-me","(GET\|POST) and-also-me". DD_APM_FILTER_TAGS_REQUIRE- optionnel - objet
Définit des règles de filtrage des traces basées sur des tags : Pour être envoyées à Datadog, les traces doivent comporter ces tags : Consultez Ignorer des ressources indésirables dans l’APM. DD_APM_FILTER_TAGS_REGEX_REQUIRE- optionnel - objet
Pris en charge par l’Agent 7.49+ : Définit des règles de filtrage des traces basées sur des tags avec des expressions régulières. Pour être envoyées à Datadog, les traces doivent comporter des tags correspondant à ces modèles d’expressions régulières : DD_APM_FILTER_TAGS_REJECT- optionnel - objet
Définit des règles de filtrage des traces basées sur des tags : Si une trace possède ces tags, elle n’est pas envoyée à Datadog : Consultez Ignorer des ressources indésirables dans l’APM pour plus de détails. DD_APM_FILTER_TAGS_REGEX_REJECT- optionnel - objet
Pris en charge par l’Agent 7.49+ : Définit des règles de filtrage des traces basées sur des tags avec des expressions régulières. Si une trace contient des tags qui correspondent à ces expressions régulières, la trace n’est pas envoyée à Datadog. DD_APM_REPLACE_TAGS- facultatif - [object]
Définit un ensemble de règles pour remplacer ou supprimer les tags contenant des informations potentiellement sensibles. DD_HOSTNAME- optionnel - chaîne - par défaut : détecté automatiquement
Définit le nom d’hôte à utiliser pour les métriques si la détection automatique du nom d’hôte échoue, ou lors de l’exécution du Datadog Cluster Agent. DD_DOGSTATSD_PORT- facultatif - entier - par défaut :
8125
Définit le port DogStatsD. DD_PROXY_HTTPS- optionnel - _ chaîne_
Pour utiliser un proxy afin de vous connecter à Internet, indiquez l’URL. DD_BIND_HOST- optionnel - _ chaîne_ - par défaut :
localhost
Définit l’hôte sur lequel écouter pour DogStatsD et les traces. DD_LOG_LEVEL- optionnel - _ chaîne_ - par défaut :
info
Définit le niveau de journalisation minimal. Options valides : trace, debug, info, warn, error, critical et off.
Traçage depuis d’autres conteneurs
Comme pour DogStatsD, les traces peuvent être envoyées à l’Agent depuis d’autres conteneurs en utilisant les réseaux Docker ou avec l’IP de l’hôte Docker.
Réseau Docker
Commencez par créer un pont définir par l’utilisateur :
docker network create <NETWORK_NAME>
Les commandes CLI sur cette page sont destinées au runtime Docker. Remplacez docker par nerdctl pour le runtime containerd, ou podman pour le runtime Podman.
Démarrez ensuite l’Agent et le conteneur de l’application, connectés au réseau précédemment créé :
# 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
Où votre <DATADOG_SITE> se trouve (par défaut 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
Où votre <DATADOG_SITE> se trouve (par défaut datadoghq.com).
Ceci expose le nom d’hôte datadog-agent dans votre conteneur app.
Si vous utilisez docker-compose, les paramètres <NETWORK_NAME> sont ceux définis dans la section networks de votre docker-compose.yml.
Les SDK de votre application doivent être configurés pour soumettre des traces à cette adresse. Définissez les variables d’environnement avec DD_AGENT_HOST comme nom du conteneur de l’Agent, et DD_TRACE_AGENT_PORT comme port de trace de l’Agent dans vos conteneurs d’application. L’exemple ci-dessus utilise l’hôte datadog-agent et le port 8126 (la valeur par défaut, vous n’avez donc pas besoin de la définir).
Vous pouvez également consulter les exemples ci-dessous pour définir manuellement le host de l’Agent dans chaque langage pris en charge.
Mettez à jour la configuration de l’Agent Java avec des variables d’environnement :
DD_AGENT_HOST=datadog-agent \
DD_TRACE_AGENT_PORT=8126 \
java -javaagent:/path/to/the/dd-java-agent.jar -jar /your/app.jar
ou avec des propriétés système :
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
});
Définissez les variables d’environnement avant d’exécuter l’application instrumentée :
# 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
La valeur de la variable d’environnement CORECLR_PROFILER_PATH varie en fonction du système sur lequel l’application s’exécute :
| Système d’exploitation et architecture de processus | Valeur 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 |
Dans le tableau ci-dessus, <APP_DIRECTORY> fait référence au répertoire contenant les fichiers .dll de l’application.
IP de l’hôte Docker
Le port 8126 du conteneur de l’agent doit être lié directement à l’hôte.
Configurez votre traceur d’application pour qu’il envoie des rapports vers la route par défaut de ce conteneur (déterminez-la à l’aide de la commande ip route).
Voici un exemple pour le traceur Python, en supposant que 172.17.0.1 est la route par défaut :
from ddtrace import tracer
tracer.configure(hostname='172.17.0.1', port=8126)
Socket de domaine Unix (UDS)
Pour soumettre des traces via un socket, le socket doit être monté sur le conteneur de l’Agent et sur votre conteneur d’application.
# 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
Consultez la documentation d’instrumentation APM spécifique au langage pour les paramètres du traceur.
Pour aller plus loin
Documentation, liens et articles supplémentaires utiles: