Présentation

Amazon ECS est un service d’orchestration de conteneurs évolutif et à hautes performances qui prend en charge les conteneurs Docker. Grâce à l’Agent Datadog, vous pouvez surveiller des conteneurs et tâches ECS sur chaque instance EC2 de votre cluster.

Si vous souhaitez surveiller ECS sur Fargate, consultez la section Amazon ECS sur AWS Fargate.

Configuration

Pour surveiller vos conteneurs et tâches ECS, déployez l’Agent Datadog en tant que conteneur une fois sur chaque instance EC2 de votre cluster ECS. Pour cela, créez une définition de tâche pour le conteneur de l’Agent Datadog et déployez-le en tant que service daemon. Chaque conteneur d’Agent Datadog surveille alors les autres conteneurs sur son instance EC2 respective.

Les instructions suivantes supposent que vous avez déjà configuré un cluster EC2. Consultez la documentation Amazon ECS pour découvrir comment créer un cluster.

  1. Créer et ajouter une définition de tâche ECS
  2. Planifier l’Agent de Datadog en tant que service daemon
  3. Configurer des fonctionnalités supplémentaires pour l’Agent Datadog (facultatif)

Remarque : la fonction Autodiscovery de Datadog peut être utilisée avec ECS et Docker afin de découvrir et de surveiller automatiquement les tâches s’exécutant dans votre environnement.

Créer une définition de tâche ECS

Cette définition de tâche ECS lance le conteneur de l’Agent Datadog avec les configurations nécessaires. Pour modifier la configuration de l’Agent, modifiez la définition de cette tâche et redéployez le service daemon. Vous pouvez configurer la définition de cette tâche à l’aide de la console de gestion AWS ou de l’interface de ligne de commande AWS.

L’exemple suivant montre comment effectuer une surveillance générale de l’infrastructure avec une configuration minimale. Toutefois, si vous souhaitez découvrir d’autres exemples de définition de tâche où diverses fonctionnalités sont activées, consultez la section Configurer les fonctionnalités supplémentaires de l’Agent.

Créer et gérer le fichier de définition de tâche

  1. Pour les conteneurs Linux, téléchargez 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. Modifier le fichier de définition de tâche de base

    • Remplacez le placeholder <YOUR_DATADOG_API_KEY> par la clé d’API Datadog de votre compte pour définir la variable d’environnement DD_API_KEY. Sinon, vous pouvez aussi fournir l’ARN d’un secret stocké dans AWS Secrets Manager.

    • Définissez la variable d’environnement DD_SITE sur votre site Datadog, à savoir .

      If DD_SITE is not set, it defaults to the US1 site, datadoghq.com.
    • Si vous le souhaitez, ajoutez une variable d’environnement DD_TAGS afin de spécifier des tags supplémentaires.

  3. Pour un déploiement sur un cluster ECS Anywhere, ajoutez la ligne suivante à la définition de votre tâche ECS (facultatif) :

    "requiresCompatibilities": ["EXTERNAL"]
    
  4. Pour ajouter un check de santé de l’Agent, ajoutez la ligne suivante à la définition de votre tâche ECS (facultatif) :

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

Enregistrer la définition de tâche

Une fois votre fichier de définition de tâche créé, exécutez la commande suivante afin d’enregistrer le fichier dans AWS.

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

Une fois votre fichier de définition de tâche créé, utilisez la console AWS pour l’enregistrer.

  1. Connectez-vous à votre console AWS et accédez à la section Elastic Container Service.
  2. Sélectionnez Task Definitions dans le volet de navigation. Depuis le menu Create new task definition, sélectionnez Create new task definition with JSON.
  3. Dans la zone de l’éditeur JSON, collez le contenu du fichier de définition de votre tâche.
  4. Sélectionnez Create.

Exécuter l’Agent en tant que service daemon

Pour qu’un conteneur d’Agent Datadog s’exécute sur chaque instance EC2, exécutez la définition de tâche de l’Agent Datadog en tant que service daemon.

Planifier un service daemon dans AWS à l’aide de la tâche ECS de Datadog

  1. Connectez-vous à la console AWS et accédez à la section ECS. Sur la page Clusters, choisissez le cluster sur lequel vous exécutez l’Agent.
  2. Depuis l’onglet Services de votre cluster, sélectionnez Create.
  3. Sous Deployment configuration, sélectionnez Daemon pour le champ Service type.
  4. Il n’est pas nécessaire de configurer la répartition des charges ou l’autoscaling.
  5. Cliquez sur Next Step, puis sur Create Service.

Configurer des fonctionnalités d’Agent supplémentaires

Les fichiers de définition de tâche fournis à la section précédente sont basiques. Ils déploient un conteneur d’Agent avec une configuration simplifiée permettant de recueillir des métriques générales à propos des conteneurs de votre cluster ECS. L’Agent peut également exécuter des intégrations d’Agent basées sur des étiquettes Docker découvertes sur vos conteneurs.

Fonctionnalités supplémentaires :

APM

Consultez la documentation relative à la configuration APM et le fichier d’exemple datadog-agent-ecs-apm.json.

Log Management

Consultez la documentation relative à la collecte de logs et le fichier d’exemple datadog-agent-ecs-logs.json.

DogStatsD

Si vous utilisez DogStatsD, modifiez la définition du conteneur de l’Agent Datadog afin d’ajouter le mappage du port du host pour 8125/udp et de définir la variable d’environnement DD_DOGSTATSD_NON_LOCAL_TRAFFIC sur true :

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

Cette configuration permet au trafic DogStatsD d’être acheminé depuis les conteneurs d’application jusqu’au conteneur de l’Agent Datadog en passant par le host et le port du host. Toutefois, le conteneur d’application doit utiliser l’adresse IP privée du host pour ce trafic. Pour ce faire, définissez la variable d’environnement DD_AGENT_HOST sur l’adresse IP privée de l’instance EC2, qui peut être récupérée depuis le système Instance Metadata Service (IMDS). Une autre solution consiste à définir l’adresse sous forme de code lors de l’initialisation. L’implémentation pour DogStatsD est la même que pour APM. Consultez la rubrique Configurer l’endpoint de l’Agent de trace pour obtenir des exemples de configuration de l’endpoint de l’Agent.

Assurez-vous que les paramètres des groupes de sécurité sur vos instances EC2 n’exposent pas publiquement les ports pour APM et DogStatsD.

Collecte de processus

Pour recueillir des informations sur les live processes pour l’ensemble de vos conteneurs, et les envoyer à Datadog, définissez la variable d’environnement DD_PROCESS_AGENT_ENABLED dans la définition de votre tâche :

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

Network Performance Monitoring

Cette fonctionnalité est uniquement disponible sous Linux.

Consultez le fichier d’exemple datadog-agent-sysprobe-ecs.json.

Si vous vous servez Amazon Linux 1 (AL1, anciennement Amazon Linux AMI), consultez datadog-agent-sysprobe-ecs1.json.

Si vous disposez déjà d’une définition de tâche, modifiez votre fichier de façon à inclure la configuration suivante :

{
  "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"
}

Mode AWSVPC

Pour l’Agent 6.10 et les versions ultérieures, le mode awsvpc est pris en charge par les conteneurs d’application, tant que les groupes de sécurité autorisent le groupe de sécurité de l’instance de host de se connecter aux conteneurs d’application sur les ports concernés.

Vous pouvez exécuter l’Agent en mode awsvpc. Toutefois, Datadog vous le déconseille, car il serait difficile de récupérer l’IP de l’interface réseau Elastic (ENI) afin d’accéder à l’Agent pour les métriques DogStatsD et les traces APM. Exécutez plutôt l’Agent en mode bridge avec un mappage de port, afin de pouvoir récupérer plus facilement l’adresse IP du host via le serveur de métadonnées.

Proxy FIPS pour Datadog (environnements gouvernementaux)

Cette fonctionnalité est uniquement disponible sous Linux.

Pour envoyer des données à Datadog pour le site gouvernemental, ajoutez le conteneur de sidecar fips-proxy et ouvrez les ports du conteneur afin que les fonctionnalités prises en charge fonctionnent correctement.

 {
   "containerDefinitions": [
     (...)
          {
            "name": "fips-proxy",
            "image": "datadog/fips-proxy:1.1.4",
            "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"
}

Vous devez également mettre à jour les variables d’environnement du conteneur de l’Agent Datadog pour permettre l’envoi de trafic via le proxy 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"
}

Dépannage

Besoin d’aide ? Contactez l’assistance Datadog.

Pour aller plus loin

PREVIEWING: may/unit-testing