Información general

Para recopilar trazas desde tus contenedores de ECS, actualiza las definiciones de tareas, tanto para el Agent como para el contenedor de aplicaciones, como se describe a continuación.

Una posibilidad es modificar el archivo de definición de tareas usado anteriormente y registrar tu definición de tareas actualizada. También puedes modificar la definición de tareas directamente desde la interfaz de usuario de Amazon Web.

Una vez activado, el contenedor del Datadog Agent recopila las trazas emitidas desde los otros contenedores de aplicaciones que se encuentran en ese mismo host.

Configurar el Datadog Agent para aceptar trazas

  1. Para recopilar todas las trazas de tus contenedores de ECS en ejecución, actualiza la definición de tareas del Agent mediante los parámetros de ECS originales con la siguiente configuración.

    Utiliza datadog-agent-ecs-apm.json como punto de referencia para la configuración de base requerida. En la definición de tareas del contenedor del Datadog Agent, configura las portMappings de un host en el puerto del contenedor 8126 con el protocolo tcp.

    {
      "containerDefinitions": [
        {
          "name": "datadog-agent",
          "image": "public.ecr.aws/datadog/agent:latest",
          "cpu": 100,
          "memory": 256,
          "essential": true,
          "portMappings": [
            {
              "hostPort": 8126,
              "protocol": "tcp",
              "containerPort": 8126
            }
          ],
          (...)
        }
      ]
    }
    
  2. Para versiones del Agent 7.17 o anteriores, añade las siguientes variables:

    "environment": [
      (...)
      {
        "name": "DD_APM_ENABLED",
        "value": "true"
      },
      {
        "name": "DD_APM_NON_LOCAL_TRAFFIC",
        "value": "true"
      }
    ]
    
  3. Si estás actualizando un archivo local para tu definición de tareas del Agent, registra tu definición de tareas actualizada. Al hacerlo, se creará una nueva revisión. A continuación, puedes hacer referencia a esta revisión actualizada en el servicio daemon del Datadog Agent.

Configurar tu contenedor de aplicaciones para enviar trazas al Datadog Agent

Instalar la biblioteca de rastreo

Sigue las instrucciones de configuración para instalar la biblioteca de rastreo de Datadog para el lenguaje de tu aplicación. Para ECS, instala el rastreador en la imagen del contenedor de tu aplicación.

Proporcionar la dirección IP privada para la instancia EC2

Indica al rastreador la dirección IP privada de la instancia EC2 subyacente en la que se está ejecutando el contenedor de aplicaciones. Esta dirección es el nombre de host del endpoint del rastreador. El contenedor del Datadog Agent que está en el mismo host (con el puerto del host activado) recibe estas trazas.

Utiliza uno de los siguientes métodos para obtener dinámicamente la dirección IP privada:

El endpoint de metadatos de EC2 de Amazon (IMDSv1) permite detectar la dirección IP privada. Para obtener la dirección IP privada de cada host, utiliza el comando curl para la siguiente URL:

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

Si estás utilizando la versión 2 de Instance Metadata Service (IMDSv2):

TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl http://169.254.169.254/latest/meta-data/local-ipv4 -H "X-aws-ec2-metadata-token: $TOKEN"

El archivo de metadatos del contenedor de ECS de Amazon permite detectar la dirección IP privada. Para obtener la dirección IP privada de cada host, ejecuta el siguiente comando:

cat $ECS_CONTAINER_METADATA_FILE | jq -r .HostPrivateIPv4Address

Indica el resultado de esta solicitud al rastreador configurando la variable de entorno DD_AGENT_HOST para cada contenedor de aplicaciones que envíe trazas.

Configurar el endpoint del Trace Agent

En los casos en que las variables de tu aplicación de ECS se configuran en el momento de inicio (Java, .NET y PHP), debes configurar el nombre de host del endpoint del rastreador como una variable de entorno con DD_AGENT_HOST, utilizando uno de los métodos anteriores. En los siguientes ejemplos se utiliza el endpoint de metadatos de IMDSv1, aunque es posible intercambiar la configuración si es necesario. Si tienes un script de inicio como punto de entrada, incluye esta llamada como parte del script o añádela al entryPoint de la definición de tareas de ECS.

Para otros lenguajes compatibles (Python, JavaScript, Ruby y Go), también puedes configurar el nombre de host en el código fuente de tu aplicación.

Variable de momento de inicio

Actualiza el entryPoint de la definición de tareas con lo siguiente, sustituyendo tu <Python Startup Command>:

"entryPoint": [
  "sh",
  "-c",
  "export DD_AGENT_HOST=$(curl http://169.254.169.254/latest/meta-data/local-ipv4); <Python Startup Command>"
]

Para Python, el comando de inicio suele ser ddtrace-run python my_app.py, aunque puede variar en función del marco utilizado; por ejemplo, utilizando uWSGI o instrumentando tu código manualmente con patch_all.

Código

También puedes actualizar el código para que el rastreador configure el nombre de host explícitamente:

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())

IMDSv2

Al utilizar IMDSv2, la configuración de entryPoint equivalente tendrá la apariencia siguiente. Sustituye el <Startup Command> correspondiente en función de tu lenguaje, como se muestra en los ejemplos anteriores.

"entryPoint": [
  "sh",
  "-c",
  "export TOKEN=$(curl -X PUT \"http://169.254.169.254/latest/api/token\" -H \"X-aws-ec2-metadata-token-ttl-seconds: 21600\"); export DD_AGENT_HOST=$(curl -H \"X-aws-ec2-metadata-token: $TOKEN\" http://169.254.169.254/latest/meta-data/local-ipv4); <Startup Command>"
]

Leer más