Amazon ECS
La gestion des incidents est désormais disponible pour tous ! La gestion des incidents est désormais disponible pour tous !

Amazon ECS

Présentation

Amazon ECS est un service d’orchestration de conteneurs hautement évolutif et performant 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.

Cette page aborde la configuration d’Amazon ECS avec l'Agent de conteneur Datadog v6. Pour d’autres configurations, consultez les pages suivantes :

Remarque : si vous souhaitez configurer ECS sur Fargate, suivez cette documentation.

Configuration

Pour commencer la configuration, exécutez l'Agent Datadog sur chaque instance EC2 de votre cluster ECS. Si vous n’avez pas configuré un cluster EC2 Container Service, consultez la section de mise en route de la documentation ECS pour définir un cluster. Une fois la configuration terminée, suivez les instructions ci-dessous.

  1. Créer et ajouter une tâche ECS
  2. Créer ou modifier votre stratégie IAM
  3. Planifier l’Agent Datadog en tant que service Daemon
  4. Facultatif : configurer la collecte de processus
  5. Facultatif : configurer la collection de données réseau (NPM)

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 tâche ECS

Cette tâche lance le conteneur Datadog. Si vous devez modifier la configuration, changez la définition de cette tâche en suivant les instructions indiquées plus loin dans ce guide.

Si vous utilisez l'APM, DogStatsD ou Log Management, définissez les flags adéquats dans la définition de votre tâche :

  • Si vous utilisez l’APM, définissez portMappings afin que vos conteneurs en aval puissent transmettre des traces au service de l’Agent. L’APM reçoit les traces via TCP sur le port 8126. Utilisez donc ces paramètres pour configurer le hostPort dans la définition de la tâche.

Remarque : pour activer la collecte de traces à partir d’autres conteneurs, vous devez vous assurer que la variable d’environnement DD_APM_NON_LOCAL_TRAFFIC est définie sur true. En savoir plus sur l’utilisation de l’APM avec des conteneurs.

  • Si vous utilisez DogStatsD, définissez le hostPort sur UDP et 8125 dans la définition de votre tâche.

Remarque : pour activer la collecte de métriques avec DogStatsD à partir d’autres conteneurs, assurez-vous que la variable d’environnement DD_DOGSTATSD_NON_LOCAL_TRAFFIC est définie sur true.

Vérifiez bien les réglages de groupe de sécurité pour vos instances EC2. Assurez-vous que ces ports ne sont pas publiquement accessibles. Datadog utilise une IP privée pour transmettre les données des conteneurs à l’Agent.

Configurez la tâche à l’aide des outils del ‘interface de ligne de commande AWS ou de la console Web d’Amazon.

  1. Pour les conteneurs Linux, téléchargez datadog-agent-ecs.json (datadog-agent-ecs1.json si vous utilisez une AMI Amazon Linux 1 d’origine). Pour Windows, téléchargez datadog-agent-ecs-win.json.

  2. Modifiez datadog-agent-ecs.json et remplacez <YOUR_DATADOG_API_KEY> par la clé d’API Datadog de votre compte.

  3. Facultatif : ajoutez un check de santé de l’Agent.

    Ajoutez le bloc suivant à la définition de votre tâche ECS pour créer un check de santé de l’Agent :

    "healthCheck": {
      "retries": 3,
      "command": ["CMD-SHELL","agent health"],
      "timeout": 5,
      "interval": 30,
      "startPeriod": 15
    }
    
  4. Facultatif : si vous êtes sur le site européen de Datadog, modifiez datadog-agent-ecs.json et définissez DD_SITE sur DD_SITE:datadoghq.eu.

  5. Facultatif : activez la collecte de logs en consultant la rubrique dédiée.

  6. Facultatif : activez la collecte de processus en consultant la rubrique dédiée.

  7. Facultatif : activez la collecte de traces (APM) en consultant la rubrique dédiée.

  8. Facultatif : activez la collecte de données réseau (NPM) en consultant la rubrique dédiée.

  9. Exécutez la commande suivante :

aws ecs register-task-definition --cli-input-json <chemin vers datadog-agent-ecs.json>
  1. Connectez-vous à votre console AWS et accédez à la section EC2 Container Service.
  2. Cliquez sur le cluster pour lequel vous souhaitez ajouter Datadog.
  3. Cliquez sur Task Definitions sur le côté gauche, puis cliquez ensuite sur le bouton Create new Task Definition.
  4. Saisissez un Task Definition Name, tel que datadog-agent-task.
  5. Cliquez sur le lien Add volume.
  6. Pour Name, saisissez docker_sock. Pour Source Path, saisissez /var/run/docker.sock sous Linux ou \\.\pipe\docker_engine sous Windows. Cliquez sur Add.
  7. Pour Linux uniquement, ajoutez un autre volume avec le nom proc et le chemin source /proc/.
  8. Pour Linux uniquement, ajoutez un autre volume avec le nom cgroup et le chemin source /sys/fs/cgroup/ (ou /cgroup/ si vous utilisez une AMI Amazon Linux 1 d’origine).
  9. Cliquez sur le gros bouton Add container.
  10. Pour Container name, saisissez datadog-agent.
  11. Pour le champ Image, saisissez gcr.io/datadoghq/agent:latest.
  12. Pour Maximum memory, indiquez 256. Remarque : en cas d’utilisation intense des ressources, il se peut que vous ayez besoin de rehausser la limite de mémoire.
  13. Faites défiler jusqu’à atteindre la section Advanced container configuration, puis saisissez 10 pour CPU units.
  14. Pour Env Variables, ajoutez la clé DD_API_KEY et indiquez votre clé d’API Datadog en valeur. Si vous préférez stocker ce type de secrets dans S3, consultez le guide de configuration d’ECS.
  15. Ajoutez une variable d’environnement supplémentaire pour chaque tag à ajouter en utilisant la clé DD_TAGS.
  16. Faites défiler jusqu’à atteindre la section Storage and Logging.
  17. Dans Mount points, sélectionnez le volume source docker_sock et indiquez comme chemin du conteneur /var/run/docker.sock pour Linux ou \\.\pipe\docker_engine pour Windows. Cochez ensuite la case Read only.
  18. Pour Linux uniquement, ajoutez un point de montage supplémentaire pour proc et saisissez /host/proc/ dans le chemin du conteneur. Cochez la case Read only.
  19. Linux uniquement : ajoutez un troisième point de montage pour cgroup et indiquez /host/sys/fs/cgroup dans le chemin du conteneur. Cochez la case Read only.

Remarque : si vous définissez la tâche Datadog de façon à utiliser 10 « CPU units », la métrique aws.ecs.cpuutilization pour service:datadog-agent peut afficher un pourcentage d’utilisation du processeur de 1000 %. Cela est dû à la façon dont AWS affiche la charge processeur. Vous pouvez ajouter davantage de « CPU units » pour corriger votre graphique.

Créer ou modifier votre stratégie IAM

Ajoutez les autorisations suivantes à votre stratégie IAM Datadog afin de recueillir des métriques Amazon ECS. Pour en savoir plus sur les stratégies ECS, consultez la documentation du site Web d’AWS.

Autorisation AWSDescription
ecs:ListClustersRenvoie la liste des clusters existants.
ecs:ListContainerInstancesRenvoie la liste des instances de conteneur dans un cluster précis.
ecs:ListServicesÉnumère les services qui s’exécutent sur un cluster précis.
ecs:DescribeContainerInstancesDécrit les instances de conteneur Amazon ECS.

Exécuter l’Agent en tant que service Daemon

Dans l’idéal, l’Agent Datadog charge un conteneur sur chaque instance EC2. Pour y parvenir, nous vous conseillons d’exécuter 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 Clusters. Cliquez sur le cluster sur lequel vous exécutez l’Agent.
  2. Cliquez sur le bouton Create sous « Services » pour créer un service.
  3. Pour le type de lancement, sélectionnez « EC2 », puis la définition de tâche précédemment créée.
  4. Sélectionnez le type de service DAEMON, puis saisissez un nom de service. Cliquez ensuite sur Next.
  5. Puisque le service s’exécute une fois sur chaque instance, vous n’avez pas besoin d’un répartiteur de charge. Sélectionnez None, puis cliquez sur Next.
  6. Les services Daemon n’ont pas besoin d’Auto Scaling. Vous pouvez donc cliquer sur Next Step, puis sur Create Service.

Collecte de processus

Pour recueillir des informations sur les processus pour l’ensemble de vos conteneurs et les envoyer à Datadog :

  1. Suivez les instructions ci-dessus pour installer l’Agent Datadog.
  2. Modifiez votre fichier datadog-agent-ecs.json (datadog-agent-ecs1.json si vous utilisez une AMI Amazon Linux d’origine) avec la configuration suivante :
{
  "containerDefinitions": [
   {
      (...)
      "mountPoints": [
        {
          (...)
        },
        {
          "containerPath": "/var/run/docker.sock",
          "sourceVolume": "docker_sock",
          "readOnly": true
        },
        {
        (...)
        }
      ],
      "environment": [
        (...)
        {
          "name": "DD_API_KEY",
          "value": "<VOTRE_CLÉ_API_DATADOG>"
        }
      ]
    }
  ],
  "volumes": [
    {
      "host": {
        "sourcePath": "/var/run/docker.sock"
      },
      "name": "docker_sock"
    },
    (...)
  ],
  "family": "datadog-agent-task"
}
  1. Suivez les instructions ci-dessus pour installer l’Agent Datadog.
  2. Modifiez votre fichier datadog-agent-ecs-win.json avec la configuration suivante :
{
  "containerDefinitions": [
    (...)
      "environment": [
        (...)
        {
          "name": "DD_PROCESS_AGENT_ENABLED",
          "value": "true"
        }
      ]
    }
  ],
  "family": "datadog-agent-task"
}

Collecte de données réseau (NPM)

Cette fonction est uniquement disponible sous Linux.

  1. Suivez les instructions ci-dessus pour installer l’Agent Datadog.
  • Si vous procédez à l’installation pour la première fois, il existe un fichier datadog-agent-ecs.json, datadog-agent-sysprobe-ecs.json (datadog-agent-sysprobe-ecs1.json si vous utilisez une AMI Amazon Linux d’origine), à utiliser avec les instructions ci-dessus. Notez que la configuration initiale de la surveillance des performances réseau nécessite l’interface de ligne de commande, car vous ne pouvez pas ajouter linuxParameters dans l’interface utilisateur AWS.
  1. Si vous avez déjà une définition de tâche, modifiez votre fichier datadog-agent-ecs.json (datadog-agent-ecs1.json si vous utilisez une AMI Amazon Linux d’origine) avec la configuration suivante :
{
  "containerDefinitions": [
    (...)
      "mountPoints": [
        (...)
        {
          "containerPath": "/sys/kernel/debug",
          "sourceVolume": "debug"
        },
        (...)
      ],
      "environment": [
        (...)
        {
          "name": "DD_SYSTEM_PROBE_ENABLED",
          "value": "true"
        }
      ],
      "linuxParameters": {
       "capabilities": {
         "add": [
           "SYS_ADMIN",
           "SYS_RESOURCE",
           "SYS_PTRACE",
           "NET_ADMIN"
         ]
       }
     },
  ],
  "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é sont configurés pour permettre au groupe de sécurité des instances de host de se connecter aux conteneurs d’application sur les ports concernés.

Bien qu’il soit possible d’exécuter l’Agent en mode awsvpc, nous vous le déconseillons. En effet, il serait difficile de récupérer l’IP de l’interface réseau Elastic afin d’accéder à l’Agent pour les métriques DogStatsd et les traces de l’APM.

Exécutez plutôt l’Agent en mode Pont, avec le mappage des ports, afin de faciliter la récupération des IP des hosts via le serveur de métadonnées.

Dépannage

Besoin d’aide ? Contactez l’assistance Datadog.

Pour aller plus loin