Technique

Comment monitorer Amazon ECS avec Elastic Observability

Un nombre croissant d'organisations migrent leurs applications et leurs charges de travail vers des conteneurs. La capacité à en monitorer et en suivre la santé et l'utilisation est donc plus essentielle que jamais. De nombreuses équipes utilisent déjà le module Docker de Metricbeat afin de recueillir des données de monitoring de conteneur Docker, puis de les stocker et les analyser dans Elasticsearch. Or, que se passe-t-il lorsque les utilisateurs ont recours à Amazon Elastic Container Service (Amazon ECS) ? Est-il toujours possible d'utiliser Metricbeat pour monitorer Amazon ECS ? Oui !

Dans cet article, nous vous expliquons en détail comment monitorer Amazon ECS à l'aide d'Elastic Observability.

Qu'est-ce qu'Amazon ECS ?

Amazon ECS est un service entièrement géré et extrêmement scalable qui facilite l'orchestration et le provisionnement des conteneurs Docker. Il est propulsé par deux services cloud sous-jacents différents appelés "types de lancement" qui déterminent la méthode de gestion des ressources informatiques. Il s'agit d'EC2 et de Fargate.

Avec le type de lancement EC2, les conteneurs sont exécutés sur des instances EC2 que les utilisateurs doivent gérer eux-mêmes. Avec l'autre type de lancement Fargate, les utilisateurs ont seulement besoin de spécifier les conteneurs et les tâches. Ainsi, Fargate provisionnera, configurera et gèrera l'infrastructure back-end.

Découvrons comment monitorer chaque type de lancement avec Metricbeat

Comment monitorer les conteneurs Amazon ECS EC2 avec Elastic

Lors du déploiement des conteneurs sur EC2, les utilisateurs doivent déployer et gérer leur propre cluster Amazon ECS. Du point de vue du monitoring, ces instances EC2 fonctionnent comme n'importe quelle autre machine virtuelle : les utilisateurs peuvent s'y connecter et recueillir des statistiques Docker directement depuis le daemon Docker. Voyons à présent comment monitorer en quelques étapes simples les conteneurs Amazon ECS exécutés sur EC2.

Prérequis : clé SSL

Lorsque vous créez votre cluster Amazon ECS, assurez-vous de joindre une clé SSL valide afin que toutes les instances soient accessibles par SSH.

1re étape : groupe de sécurité

Dans la section dédiée au réseau, assurez-vous de sélectionner un groupe de sécurité (Security group) qui vous permettra d'activer l'accès en SSH (port 22).

2e étape : vérification de l'instance EC2

Après avoir lancé correctement le cluster Amazon ECS, vous devriez pouvoir répertorier vos instances EC2.

3e étape : connexion SSL

Vous pouvez vous connecter à chaque instance en SSH à l'aide de la paire de clés que vous avez ajoutée à la première étape.

ssh -i "ec2-ecs-test.pem" ec2-user@3.125.104.129

4e étape : installation de Metricbeat

Comme vous avez accès à toutes les instances du cluster, vous pouvez installer Metricbeat sur chacune d'entre elles et commencer à recueillir des indicateurs depuis le daemon Docker.

curl -L -O <a href="https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.11.1-x86_64.rpm">https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.11.1-x86_64.rpm</a> 
sudo rpm -vi metricbeat-7.10.1-x86_64.rpm 
sudo metricbeat modules disable system 
sudo metricbeat modules enable docker

Vous pouvez maintenant définir le point de terminaison Elasticsearch vers lequel envoyer les indicateurs. Dans l'exemple illustré ici, il s'agit d'une instance exécutée sur Elastic Cloud. Si vous souhaitez tester cette configuration, vous pouvez vous inscrire à un essai gratuit.

Modifiez le fichier metricbeat.yml et ajoutez les options Elastic Cloud.

En règle générale, ce fichier se trouve sous /etc/metricbeat/metricbeat.yml. Vous pouvez le modifier à l'aide de la commande suivante.

sudo vi /etc/metricbeat/metricbeat.yml
cloud.id: "elastic-observability-deployment:ZXV…….k3MTI1ZTA1Ng==" 
cloud.auth: "elastic:2vXXXXXXXXXXXxxxxxxxxxxxV"

Si vous exécutez un cluster Elasticsearch autogéré, vous devez configurer la sortie Elasticsearch.

output.elasticsearch: 
  hosts: ["https://myEShost:9200"] 
  username: "elastic" 
  password: "changeme"

Ensuite, vous pouvez configurer des mappings, des index et des tableaux de bord prédéfinis.

sudo metricbeat setup -e

Démarrez Metricbeat.

./metricbeat -e -d & 
sudo service metricbeat start

Vous pouvez également configurer le service Metricbeat afin qu'il se lance automatiquement au démarrage du système.

systemctl enable metricbeat
Remarque : Ce processus doit s'exécuter sur toutes les instances EC2 du cluster.

5e étape : vérification de la collecte d'indicateurs

Metricbeat s'exécute. Nous pouvons maintenant vérifier que les événements sont stockés dans notre cluster Elasticsearch en étudiant les indicateurs relatifs à Docker dans l'affichage Discover de Kibana.

Nous pouvons à présent poursuivre et déployer des tâches sur notre cluster Amazon ECS, à partir duquel Metricbeat recueillera des indicateurs. Nous pouvons utiliser ces indicateurs pour créer des visualisations et des tableaux de bord tout en exploitant des métadonnées supplémentaires, notamment cloud_metadata et host_metadata, qui sont ajoutées par défaut afin de mettre en corrélation des indicateurs en fonction des comptes AWS, des régions, des identificateurs d'hôte, des types ou autres. Par exemple, en associant l'indicateur docker.info.containers.running avec host.name, nous pouvons fournir une vue d'ensemble du nombre de conteneurs exécutés par hôte dans le temps.

6e étape : affichage des indicateurs dans des tableaux de bord Kibana prédéfinis

En règle générale, nous disposons d'une jolie vue d'ensemble des charges de travail de notre conteneur dans le tableau de bord Docker par défaut proposé avec Metricbeat.

Le monitoring des tâches d'Amazon ECS s'effectue en quelques étapes seulement. Ensuite, vous pouvez continuer à renforcer la visibilité du cluster EC2 à l'aide de Metricbeat. Maintenant, voyons comment nous pouvons monitorer nos tâches d'Amazon ECS quand elles sont exécutées sur Fargate.

Comment monitorer les conteneurs Fargate avec Elastic

Amazon ECS sur Fargate révèle plusieurs métadonnées, indicateurs de réseau et statistiques de Docker sur l'exécution des tâches et des conteneurs via le point de terminaison des métadonnées des tâches. Metricbeat utilise la version 4 du point de terminaison des métadonnées des tâches, qui est disponible pour chaque conteneur et activée par défaut sur la version 1.4.0 ou supérieure de la plateforme AWS Fargate.

Pour monitorer une tâche exécutée sur Fargate, vous devez déployer un conteneur Metricbeat sur la tâche elle-même en ajoutant manuellement une nouvelle définition de conteneur. Dans la section Standard, vous pouvez attribuer un nom de conteneur (Container name), comme metricbeat-container, et utiliser l'image du docker Metricbeat dans le registre Elastic Docker docker.elastic.co/beats/metricbeat:7.11.0 pour une version spécifique d'image Metricbeat.

Par ailleurs, nous devons ajouter une commande pour ce conteneur afin de configurer et de lancer Metricbeat avec l'envoi de données sur Elastic Cloud.

./metricbeat setup -E cloud.id=$ELASTIC_CLOUD_ID -E cloud.auth=$ELASTIC_CLOUD_AUTH && ./metricbeat modules disable system && ./metricbeat modules enable awsfargate && ./metricbeat -e -E cloud.id=$ELASTIC_CLOUD_ID -E cloud.auth=$ELASTIC_CLOUD_AUTH

Vous devez ajouter les valeurs pour $ELASTIC_CLOUD_ID et $ELASTIC_CLOUD_AUTH dans la section Environment variables dédiée aux variables d'environnement en indiquant les identifiants réels, si possible à l'aide d'AWS Secrets Manager pour éviter de stocker ces valeurs sous forme de texte brut.

Une fois la révision de la définition de la nouvelle tâche créée, cliquez sur run task (Exécuter la tâche) dans le menu déroulant Actions. Metricbeat sera ajouté à la tâche à son redémarrage.

Si vous avez de nombreuses tâches à monitorer, il peut être fastidieux et chronophage d'ajouter manuellement les conteneurs Metricbeat. Dans ce cas, nous vous recommandons d'utiliser AWS CloudFormation, une méthode native d'AWS permettant de gérer des ressources en les provisionnant et en les mettant à jour tout au long du cycle de vie sans nécessiter d'actions manuelles. Grâce à AWS CloudFormation, vous traitez votre infrastructure en tant que code et la gérez à l'aide d'un fichier modèle qui définit toutes les ressources requises et leurs dépendances.

Voici un exemple simplifié de la manière dont vous pouvez ajouter le conteneur Metricbeat dans une tâche à l'aide de CloudFormation.

 TaskDefinition: 
   Type: AWS::ECS::TaskDefinition 
   Properties: 
     Family: !Ref TaskName 
     Cpu: 256 
     Memory: 512 
     NetworkMode: awsvpc 
     ExecutionRoleArn: !Ref ExecutionRole 
     ContainerDefinitions: 
       - Name: metricbeat-container 
         Image: docker.elastic.co/beats/metricbeat:7.11.0 
         Secrets: 
           - Name: ELASTIC_CLOUD_ID 
             ValueFrom: !Ref CloudIDArn 
           - Name: ELASTIC_CLOUD_AUTH 
             ValueFrom: !Ref CloudAuthArn 
                 EntryPoint: 
           - sh 
           - -c 
         Command: 
           - ./metricbeat setup -E cloud.id=$ELASTIC_CLOUD_ID -E cloud.auth=$ELASTIC_CLOUD_AUTH && ./metricbeat modules disable system && ./metricbeat modules enable awsfargate && ./metricbeat -e -E cloud.id=$ELASTIC_CLOUD_ID -E cloud.auth=$ELASTIC_CLOUD_AUTH

Vous trouverez aussi un modèle complet d'AWS CloudFormation avec le module awsfargate, qui crée un cluster et une définition de tâche avec un conteneur test et un conteneur Metricbeat, mais aussi lance le service. N'hésitez pas à copier ce modèle dans le fichier cloudformation.yml en local afin de l'essayer.

Si vous utilisez Elastic Cloud, il est recommandé de stocker l'identifiant et l'authentification du cloud dans AWS Secrets Manager. Voici l'exemple de l'interface de ligne de commande d'AWS.

Créez une authentification ELASTIC_CLOUD_AUTH secrète.

aws --region us-east-1 secretsmanager create-secret --name ELASTIC_CLOUD_AUTH --secret-string XXX

Créez un identifiant ELASTIC_CLOUD_ID secret.

aws --region us-east-1 secretsmanager create-secret --name ELASTIC_CLOUD_ID --secret-string YYY

Une fois les secrets configurés, créons une pile entière avec une interface de ligne de commande d'AWS en utilisant le fichier modèle cloudformation.yml de CloudFormation.

Créez la pile CloudFormation.

aws --region us-east-1 cloudformation create-stack --stack-name test-metricbeat-deployment --template-body file://./cloudformation.yml --capabilities CAPABILITY_NAMED_IAM --parameters ParameterKey=SubnetID,ParameterValue=subnet-5d89de27 ParameterKey=CloudAuthArn,ParameterValue=arn:aws:secretsmanager:us-east-1:xxx:secret:ELASTIC_CLOUD_AUTH-abc ParameterKey=CloudIDArn,ParameterValue=arn:aws:secretsmanager:us-east-1:xxx:secret:ELASTIC_CLOUD_ID-abc ParameterKey=ClusterName,ParameterValue=metricbeat-fargate ParameterKey=RoleName,ParameterValue=ecsFargateTaskExecutionRole 
ParameterKey=TaskName,ParameterValue=task-metricbeat ParameterKey=ServiceName,ParameterValue=metricbeat-service ParameterKey=LogGroupName,ParameterValue=metricbeat-fargate-log-group

Lorsque CloudFormation affiche le statut CREATE_COMPLETE pour votre pile, vous devriez voir les indicateurs de monitoring envoyés dans Elasticsearch toutes les 10 secondes. Le module awsfargate recueille les indicateurs d'exécution auprès de chaque conteneur, y compris les informations relatives au processeur, à la mémoire, au réseau et aux E/S disque. Il existe aussi un tableau de bord prêt à l'emploi que vous pouvez utiliser pour afficher l'ensemble des données de monitoring provenant d'awsfargate dans Kibana.

Quand vous avez fini vos expériences, vous pouvez facilement supprimer toute la pile à l'aide de l'interface de ligne de commande d'AWS.

aws --region us-east-1 cloudformation delete-stack --stack-name test-metricbeat-deployment

Et ensuite ?

Cherchez-vous une solution de monitoring pour vos déploiements de conteneur Amazon ECS ? Avec les modules docker de Metricbeat et awsfargate, les utilisateurs peuvent facilement monitorer les conteneurs Amazon ECS et envoyer les indicateurs dans Elasticsearch Service sur Elastic Cloud. Si vous avez des questions ou des commentaires, n’hésitez pas à les publier sur le forum consacré à Beats.