Pour recueillir des traces à partir de vos conteneurs ECS, mettez à jour les définitions de tâche à la fois pour votre Agent et pour le conteneur de votre application, comme décrit ci-dessous.
Une fois la collecte activée, le conteneur de l’Agent Datadog recueille les traces générées par les autres conteneurs d’application sur le même host.
Configurer l’Agent Datadog pour qu’il accepte les traces
Pour recueillir toutes les traces à partir de vos conteneurs ECS exécutés, mettez à jour la définition de tâche de votre Agent issue de la configuration ECS d’origine en spécifiant la configuration ci-dessous.
Utilisez datadog-agent-ecs-apm.json comme modèle de référence pour connaître la configuration de base requise. Dans la définition de tâche du conteneur de l’Agent Datadog, sous la section portMappings, définissez le port du host et le port du conteneur sur 8126 avec le protocole tcp.
Si vous mettez à jour un fichier local pour la définition de tâche de votre Agent, enregistrez votre définition de tâche modifiée. Cette opération entraînera la création d’une révision. Vous pourrez ensuite ajouter une référence à cette nouvelle révision dans le service daemon de l’Agent Datadog.
Configurer le conteneur de votre application pour qu’il transmette les traces à l’Agent Datadog
Communiquez au traceur l’adresse IP privée de l’instance EC2 sous-jacente sur laquelle le conteneur de l’application s’exécute. Cette adresse correspond au hostname de l’endpoint du traceur. Le conteneur de l’Agent Datadog présent sur le même host (avec le port du host activé) reçoit ces traces.
Utilisez l’une des méthodes suivantes pour obtenir l’adresse IP privée de façon dynamique :
L’endpoint de métadonnées EC2 d’Amazon (IMDSv1) permet de découvrir des adresses IP privées. Pour obtenir l’adresse IP privée de chaque host, effectuez un curl sur l’URL suivante :
Communiquez le résultat de cette requête au traceur en définissant la variable d’environnement DD_AGENT_HOST pour chaque conteneur d’application qui transmet des traces.
Configurer l’endpoint de l’Agent de trace
Si les variables de votre application ECS sont définies au moment du lancement (Java, .NET et PHP), vous devez définir le hostname de l’endpoint du traceur en tant que variable d’environnement avec DD_AGENT_HOST à l’aide d’une des méthodes décrites ci-dessus. L’exemple ci-dessous utilise l’endpoint de métadonnées IMDSv1, mais une autre méthode peut être utilisée au besoin. Si vous utilisez un script de lancement comme point d’entrée, incluez cet appel dans le script. Sinon, ajoutez-le à la section entryPoint de la définition de tâche ECS.
Avec certains langages (Python, JavaScript, Ruby et Go), vous pouvez également définir le hostname dans le code source de votre application.
Pour Python, la commande de lancement correspond généralement à ddtrace-run python my_app.py. Elle peut toutefois varier en fonction du framework utilisé, notamment lorsque vous utilisez uWSGI ou que vous instrumentez votre code manuellement avec patch_all.
Variable au moment du lancement
Mettez à jour la section entryPoint de la définition de tâche comme suit, en spécifiant votre `<Node.js Startup Command> :
Vous pouvez également mettre à jour votre code afin que le traceur définisse le hostname de façon explicite :
require'datadog'# Use 'ddtrace' if you're using v1.xrequire'net/http'Datadog.configuredo|c|c.agent.host=Net::HTTP.get(URI('http://169.254.169.254/latest/meta-data/local-ipv4'))end
Variable au moment du lancement
Mettez à jour la section entryPoint de la définition de tâche comme suit, en spécifiant votre <Go Startup Command> :
Vous pouvez également mettre à jour votre code pour que le traceur définisse explicitement le hostname. 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.
packagemainimport("net/http""io/ioutil""github.com/DataDog/dd-trace-go/v2/ddtrace/tracer")funcmain(){resp,err:=http.Get("http://169.254.169.254/latest/meta-data/local-ipv4")bodyBytes,err:=ioutil.ReadAll(resp.Body)host:=string(bodyBytes)iferr==nil{//set the output of the curl command to the DD_AGENT_HOST envos.Setenv("DD_AGENT_HOST",host)// tell the trace agent the host settingtracer.Start(tracer.WithAgentAddr(host))defertracer.Stop()}//...}
Variable au moment du lancement
Mettez à jour la section entryPoint de la définition de tâche comme suit, en spécifiant votre <Java Startup Command> :
La commande de lancement Java doit inclure votre -javaagent:/chemin/vers/dd-java-agent.jar. Pour obtenir d’autres exemples, reportez-vous à la documentation relative au tracing Java.
Variable au moment du lancement
Mettez à jour la section entryPoint de la définition de tâche comme suit, en spécifiant votre APP_PATH s’il n’a pas été défini :
Pour Apache et mod_php dans VirtualHost ou dans un fichier de configuration de serveur, utilisez PassEnv pour définir DD_AGENT_HOST ainsi que d’autres variables d’environnement. Vous pouvez notamment définir les variables de tagging de service unifié indiquées dans l’exemple suivant :
Lorsque le paramètre ini est défini sur clear_env=on, vous devez également configurer des variables d’environnement dans le fichier de workers du pool www.conf, afin qu’ils puissent être lus à partir du host. Profitez-en pour définir DD_AGENT_HOST ainsi que d’autres variables d’environnement. Vous pouvez notamment définir les variables de tagging de service unifié indiquées dans l’exemple suivant :
Si vous utilisez IMDSv2, la configuration entryPoint équivalente ressemble à ce qui suit. Remplacez <Startup Command> par la commande adéquate en fonction du langage utilisé, comme décrit dans les exemples ci-dessus.