Amazon ECS
Rapport de recherche Datadog : Bilan sur l'adoption de l'informatique sans serveur Rapport : Bilan sur l'adoption de l'informatique sans serveur

Amazon ECS

Présentation

Amazon ECS sur EC2 est un service d’orchestration de conteneurs hautement scalable et à hautes performances pour les conteneurs Docker s’exécutant sur des instances EC2.

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 surveiller vos conteneurs et tâches ECS avec Datadog, exécutez l’Agent en tant que conteneur sur chaque instance EC2 de votre cluster ECS. Voici les différentes étapes de configuration à suivre :

  1. Ajouter une tâche ECS
  2. Créer ou modifier votre stratégie IAM
  3. Planifier l’Agent Datadog en tant que service Daemon

Si vous n’avez pas encore configuré un cluster EC2 Container Service, consultez la section Mise en route de la documentation ECS.

Collecte de métriques

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 AWS CLI 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 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.
  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>
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
}
  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 sur Linux ou \\.\pipe\docker_engine sur 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 d’origine).
  9. Cliquez sur le gros bouton Add container.
  10. Pour Container name, saisissez datadog-agent.
  11. Pour Image, saisissez datadog/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.

Détection dynamique et surveillance des services en cours d’exécution

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.

Mode AWSVPC

Pour l’Agent v6.10+, le mode awsvpc est pris en charge à la fois pour les conteneurs d’application et pour le conteneur de l’Agent, sous réserve des conditions suivantes :

  1. Pour les applications et l’Agent en mode awsvpc, les groupes de sécurité doivent être configurés pour permettre :

    • au groupe de sécurité de l’Agent de se connecter aux conteneurs d’application sur les ports concernés.
    • au groupe de sécurité de l’Agent de se connecter aux instances du host sur le port TCP 51678. Le conteneur de l’Agent ECS doit s’exécuter en mode réseau host (par défaut) ou avoir un port lié au host.
  2. Pour les applications en mode awsvpc et l’Agent en mode pont, les groupes de sécurité doivent être 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.

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": "/etc/passwd",
          "sourceVolume": "passwd",
          "readOnly": true
        },
        (...)
      ],
      "environment": [
        (...)
        {
          "name": "DD_PROCESS_AGENT_ENABLED",
          "value": "true"
        }
      ]
    }
  ],
  "volumes": [
    (...)
    {
      "host": {
        "sourcePath": "/etc/passwd"
      },
      "name": "passwd"
    },
    (...)
  ],
  "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 pour la surveillance des performances réseau (Linux uniquement)

  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 disponible, 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"
 }
 

Dépannage

Besoin d’aide ? Contactez l’assistance Datadog.

Pour aller plus loin