Información general

Amazon ECS es un servicio escalable de orquestación de contenedores de alto rendimiento compatible con contenedores de Docker. Con el Datadog Agent, puedes monitorizar contenedores y tareas de ECS en cada instancia EC2 de tu clúster.

Si deseas monitorizar ECS en Fargate, consulta Amazon ECS en AWS Fargate.

Ajustes

Para monitorizar tus contenedores y tareas de ECS, despliega el Datadog Agent como un contenedor una vez en cada instancia de EC2 en tu clúster de ECS. Para ello, crea una definición de tarea para el contenedor de Datadog Agent y despliégala como servicio daemon. Cada contenedor de Datadog Agent luego monitoriza los otros contenedores en su respectiva instancia de EC2.

Las siguientes instrucciones asumen que has configurado un clúster de EC2. Consulta la documentación de Amazon ECS para crear un clúster.

  1. Crear y añadir una definición de tarea de ECS
  2. Programar el Datadog Agent como servicio daemon
  3. (Opcional) Configurar funciones adicionales de Datadog Agent

Nota: Es posible utilizar Autodiscovery de Datadog junto con ECS y Docker para detectar y monitorizar automáticamente las tareas que se ejecutan en tu entorno.

Crear una definición de tarea de ECS

Esta definición de tarea de ECS lanza el contenedor de Datadog Agent con las configuraciones necesarias. Cuando necesites modificar la configuración del Agent, actualiza esta definición de tarea y vuelve a desplegar el servicio daemon. Puedes configurar esta definición de tarea utilizando la consola de administración de AWS, o con la AWS CLI.

El siguiente ejemplo es una configuración mínima para la monitorización de inraestructuras básicas, aunque también tienes más ejemplos de definiciones de tareas con varias funciones activadas en la sección Configurar las funciones adicionales del Agent por si quieres usarlas en su lugar.

Crear y gestionar el archivo de definición de tareas

  1. Para contenedores de Linux, descarga datadog-agent-ecs.json.

    These files provide minimal configuration for core infrastructure monitoring. For more sample task definition files with various features enabled, see the Set up additional Agent features section on this page.
  2. Editar el archivo de definición de la tarea base

  3. (Opcional) Para desplegar en un clúster Anywhere de ECS, añade la siguiente línea a la definición de tu tarea de ECS:

    "requiresCompatibilities": ["EXTERNAL"]
    
  4. (Opcional) Para añadir un check de estado del Agent, añade la siguiente línea a la definición de tu tarea de ECS:

    "healthCheck": {
      "retries": 3,
      "command": ["CMD-SHELL","agent health"],
      "timeout": 5,
      "interval": 30,
      "startPeriod": 15
    }
    

Registrar la definición de la tarea

Una vez creado el archivo de definición de tareas, ejecuta el siguiente comando para registrar el archivo en AWS.

aws ecs register-task-definition --cli-input-json file://<path to datadog-agent-ecs.json>

Una vez que tengas tu archivo de definición de tareas, utiliza la consola de AWS para registrar el archivo.

  1. Inicia sesión en tu consola de AWS y ve a la sección Elastic Container Service.
  2. Selecciona Task Definitions* (Definiciones de tarea) en el panel de navegación. En el menú Create new task definition (Crear nueva definición de tarea), selecciona Create new task definition with JSON (Crear nueva definición de tarea con JSON).
  3. En el cuadro del editor JSON, pega el contenido de tu archivo de definición de tareas.
  4. Selecciona Create (Crear).

Ejecutar el Agent como sevicio daemon

Para tener un contenedor de Datadog Agent ejecutándose en cada instancia de EC2, ejecuta la definición de tarea del Datadog Agent como servicio daemon.

Programar un servicio daemon en AWS utilizando la tarea de ECS de Datadog

  1. Inicia sesión en la consola de AWS y navega hasta la sección de ECS. En la página Clusters (Clústeres), elige el clúster en el que ejecutas el Agent.
  2. En la pestaña Services (Servicios) del clúster, selecciona Create (Crear).
  3. En Deployment configuration (Configuración de despliegue), para Service type (Tipo de servicio), selecciona Daemon.
  4. No es necesario configurar el balanceo de carga o el escalado automático.
  5. Haz clic en Next Step (Paso siguiente) y, a continuación, en Create Service (Crear servicio).

Configurar funciones adicionales del Agent

Los archivos de definición de tareas proporcionados en la sección anterior son mínimos. Estos archivos despliegan un contenedor del Agent con una configuración base para recopilar las métricas centrales sobre los contenedores en tu clúster de ECS. El Agent también puede ejecutar integraciones del Agent según las etiquetas de Docker descubiertas en tus contenedores.

Para funciones adicionales:

APM

Consulta la documentación de configuración de APM y el ejemplo datadog-agent-ecs-apm.json.

Log Management

Consulta la documentación de la recopilación de log y el ejemplo datadog-agent-ecs-logs.json

DogStatsD

Si estás utilizando DogStatsD, edita tu definición del contenedor de Datadog Agent para añadir la asignación de puerto de host para 8125/udp y establecer la variable de entorno DD_DOGSTATSD_NON_LOCAL_TRAFFIC en true..:

{
 "containerDefinitions": [
  {
   "name": "datadog-agent",
   (...)
   "portMappings": [
     {
      "hostPort": 8125,
      "protocol": "udp",
      "containerPort": 8125
     }
   ],
   "environment" : [
     {
       "name": "DD_API_KEY",
       "value": "<YOUR_DATADOG_API_KEY>"
     },
     {
       "name": "DD_SITE",
       "value": "datadoghq.com"
     },
     {
       "name": "DD_DOGSTATSD_NON_LOCAL_TRAFFIC",
       "value": "true"
     }
   ]
  }
 ],
 (...)
}

Esta configuración permite enrutar el tráfico de DogStatsD desde los contenedores de la aplicación, a través del host y los puertos de host, hasta el contenedor de Datadog Agent. Sin embargo, el contenedor de aplicación debe utilizar la dirección IP privada del host para este tráfico. Pueded habilitar esto configurando la variable de entorno DD_AGENT_HOST a la dirección IP privada de la instancia de EC2, que puedes recuperar desde Instance Metadata Service (IMDS). Alternativamente, puedes establecer esto en el código durante la inicialización. La implementación para DogStatsD es la misma que para APM. Consulta Configurar el endpoint del Trace Agent para ejemplos de configuración del endpoint del Agent.

Asegúrate de que la configuración de grupo de seguridad de tus instancias EC2 no exponga públicamente los puertos para APM y DogStatsD.

Recopilación de procesos

Para recopilar la información de Live Process de todos tus contenedores y enviarla a Datadog, actualiza tu definición de tarea con la variable de entorno DD_PROCESS_AGENT_ENABLED:

{
 "containerDefinitions": [
  {
   "name": "datadog-agent",
   (...)
   "environment" : [
     {
       "name": "DD_API_KEY",
       "value": "<YOUR_DATADOG_API_KEY>"
     },
     {
       "name": "DD_SITE",
       "value": "datadoghq.com"
     },
     {
       "name": "DD_PROCESS_AGENT_ENABLED",
       "value": "true"
     }
   ]
  }
 ],
 (...)
}

Network Performance Monitoring

Esta función sólo está disponible para Linux.

Consulta el archivo de ejemplo datadog-agent-sysprobe-ecs.json.

Si utilizas Amazon Linux 1 (AL1, antes AMI de Amazon Linux), consulta datadog-agent-sysprobe-ecs1.json.

Si ya dispones de una definición de tarea, actualiza tu archivo para incluir la siguiente configuración:

{
  "containerDefinitions": [
    (...)
      "mountPoints": [
        (...)
        {
          "containerPath": "/sys/kernel/debug",
          "sourceVolume": "debug"
        },
        (...)
      ],
      "environment": [
        (...)
        {
          "name": "DD_SYSTEM_PROBE_NETWORK_ENABLED",
          "value": "true"
        }
      ],
      "linuxParameters": {
       "capabilities": {
         "add": [
           "SYS_ADMIN",
           "SYS_RESOURCE",
           "SYS_PTRACE",
           "NET_ADMIN",
           "NET_BROADCAST",
           "NET_RAW",
           "IPC_LOCK",
           "CHOWN"
         ]
       }
     },
  ],
  "requiresCompatibilities": [
   "EC2"
  ],
  "volumes": [
    (...)
    {
     "host": {
       "sourcePath": "/sys/kernel/debug"
     },
     "name": "debug"
    },
    (...)
  ],
  "family": "datadog-agent-task"
}

Modo AWSVPC

A partir de la versión 6.10 del Agent, el modo awsvpc es compatible para contenedores aplicativos, siempre y cuando los grupos de seguridad estén configurados para permitir que el grupo de seguridad de la instancia de host llegue los contenedores aplicativos en los puertos correspondientes.

Puedes ejecutar el Agent en modo awsvpc, pero Datadog no lo recomienda porque puede ser difícil recuperar la IP ENI para llegar al Agent para obtener las métricas de DogStatsD y trazas de APM. En su lugar, ejecuta el Agent en modo puente con una asignación de puertos para permitir una recuperación más fácil de la IP de host a través del servidor de metadatos.

Proxy FIPS para Datadog para entornos de Gobierno

Esta función sólo está disponible para Linux.

Para enviar datos a sitio de Datadog para el Gobierno, añade el contenedor auxiliar fips-proxy y abre los puertos de contenedor para garantizar una comunicación adecuada para funciones compatibles.

 {
   "containerDefinitions": [
     (...)
          {
            "name": "fips-proxy",
            "image": "datadog/fips-proxy:1.1.5",
            "portMappings": [
                {
                    "containerPort": 9803,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9804,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9805,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9806,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9807,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9808,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9809,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9810,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9811,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9812,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9813,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9814,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9815,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9816,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9817,
                    "protocol": "tcp"
                },
                {
                    "containerPort": 9818,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "environment": [
                {
                    "name": "DD_FIPS_PORT_RANGE_START",
                    "value": "9803"
                },
                {
                    "name": "DD_FIPS_LOCAL_ADDRESS",
                    "value": "127.0.0.1"
                }
            ]
        }
   ],
   "family": "datadog-agent-task"
}

También debes actualizar las variables entorno del contenedor del Datadog Agent para que sea posible enviar tráfico a través del proxy de FIPS:

{
    "containerDefinitions": [
        {
            "name": "datadog-agent",
            "image": "public.ecr.aws/datadog/agent:latest",
            (...)
            "environment": [
              (...)
                {
                    "name": "DD_FIPS_ENABLED",
                    "value": "true"
                },
                {
                    "name": "DD_FIPS_PORT_RANGE_START",
                    "value": "9803"
                },
                {
                    "name": "DD_FIPS_HTTPS",
                    "value": "false"
                },
             ],
        },
    ],
   "family": "datadog-agent-task"
}

Solucionar problemas

¿Necesitas ayuda? Contacta con el equipo de asistencia de Datadog.

Leer más