Tracing d'applications ECS
Rapport de recherche Datadog : Bilan sur l'adoption de l'informatique sans serveur Rapport : Bilan sur l'adoption de l'informatique sans serveur

Tracing d'applications ECS

Configuration

Après avoir suivi les instructions d’installation de l’agent Amazon ECS, activez la collecte de traces en suivant les instructions ci-dessous.

  1. Configurez les paramètres suivants dans la définition de tâche pour le conteneur datadog/agent. Définissez le port du host/conteneur portMappings sur 8126 avec le protocole tcp :

        containerDefinitions": [
        {
          "name": "datadog-agent",
          "image": "datadog/agent:latest",
          "cpu": 10,
          "memory": 256,
          "essential": true,
          "portMappings": [
            {
              "hostPort": 8126,
              "protocol": "tcp",
              "containerPort": 8126
            }
          ],
          ...
        

    Si vous utilisez l’Agent v7.17 ou une version inférieure, ajoutez les variables d’environnement suivantes :

        ...
              "environment": [
                ...
              {
                "name": "DD_APM_ENABLED",
                "value": "true"
              },
              {
                "name": "DD_APM_NON_LOCAL_TRAFFIC",
                "value": "true"
              },
              ...
              ]
        ...
        

    Consulter l’ensemble des variables d’environnement disponibles pour la collecte de traces via l’Agent.

  2. Attribuez l’adresse IP privée utilisée par chaque instance sous-jacente sur laquelle vos conteneurs sont exécutés dans votre conteneur d’application à la variable d’environnement DD_AGENT_HOST. Les traces de votre application seront ainsi transmises à l’Agent. L’endpoint de métadonnées d’Amazon EC2 peut être utilisé pour identifier l’adresse IP privée. Pour récupérer l’adresse IP privée de chaque host, effectuez un curl sur l’URL suivante :

        curl http://169.254.169.254/latest/meta-data/local-ipv4
        

    Définissez le résultat comme la variable d’environnement de hostname de votre Agent de trace pour chaque conteneur d’application qui transmet des traces à l’APM :

        os.environ['DD_AGENT_HOST'] = <IP_PRIVÉE_EC2>
        

Variables au moment du lancement

Si les variables de votre application ECS sont définies au moment du lancement, vous devez définir le hostname en tant que variable d’environnement avec DD_AGENT_HOST. Vous pouvez également définir le hostname dans le code source de votre application pour Python, Javascript ou Ruby. Pour Java et .NET, vous pouvez définir le hostname dans la tâche ECS. Par exemple :

import requests
from ddtrace import tracer

def get_aws_ip(): r = requests.get('http://169.254.169.254/latest/meta-data/local-ipv4') return r.text

tracer.configure(hostname=get_aws_ip())

Pour découvrir comment définir le hostname de l’Agent dans d’autres langages, consultez les exemples de la section Modifier le hostname de l’Agent.

const tracer = require('dd-trace');
const request = require('request');

request('http://169.254.169.254/latest/meta-data/local-ipv4', function( error, resp, body ) { tracer.init({ hostname: body }); });

Pour découvrir comment définir le hostname de l’Agent dans d’autres langages, consultez les exemples de la section Modifier le hostname de l’Agent.

require 'ddtrace'
require 'net/http'

Datadog.configure do |c| c.tracer hostname: Net::HTTP.get(URI('http://169.254.169.254/latest/meta-data/local-ipv4')) end

package main

import ( "net/http" "io/ioutil" "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer" )

resp, err := http.Get("http://169.254.169.254/latest/meta-data/local-ipv4") bodyBytes, err := ioutil.ReadAll(resp.Body) host := string(bodyBytes) if err == nil { // définir la sortie de la commande curl sur l'env DD_Agent_host os.Setenv("DD_AGENT_HOST", host) // indiquer à l'Agent de trace le host défini tracer.Start(tracer.WithAgentAddr(host)) defer tracer.Stop()

Copiez ce script dans le champ entryPoint de votre définition de tâche ECS en mettant à jour les valeurs avec le fichier JAR et les flags d’argument de votre application.

"entryPoint": [
  "sh",
  "-c",
  "export DD_AGENT_HOST=$(curl http://169.254.169.254/latest/meta-data/local-ipv4); java -javaagent:/app/dd-java-agent.jar <FLAGS_ARGUMENT_APPLICATION> -jar <FICHIER_JAR/FICHIER_WAR_APPLICATION>"
]

Pour découvrir comment définir le hostname de l’Agent dans d’autres langages, consultez les exemples de la section Modifier le hostname de l’Agent.

"entryPoint": [
  "sh",
  "-c",
  "export DD_AGENT_HOST=$(curl http://169.254.169.254/latest/meta-data/local-ipv4); dotnet ${APP_PATH}"
]

Pour aller plus loin