Comment surveiller l'utilisation de la mémoire dans Elastic Beanstalk pour les AMI Amazon Linux exécutées sur des instances Amazon EC2 ?

Date de la dernière mise à jour : 12/03/2021

L'utilisation de la mémoire pour mes Amazon Machine Images (AMI) Amazon Linux qui s'exécutent sur des instances Amazon Elastic Compute Cloud (Amazon EC2) dans AWS Elastic Beanstalk est trop élevée et augmente. Je veux surveiller l'utilisation de la mémoire au fil du temps.

Brève description

Pour surveiller l'utilisation de la mémoire (RAM), vous devez ajouter une métrique Amazon CloudWatch personnalisée à l'aide d'un fichier .ebextensions. Le fichier .ebextensions exécute un script dans les environnements de vos instances Amazon EC2. Le script émet régulièrement des métriques de mémoire et d'autres métriques CloudWatch personnalisées.

Important : l'extension .ebextension utilisée dans la résolution suivante s'applique aux instances AMI Amazon Linux et non pas aux instances AMI Ubuntu personnalisées dans Elastic Beanstalk.

Résolution

Important : Les étapes et scripts suivants fonctionnent uniquement avec les environnements utilisant le Service de métadonnées d'instance version 1 (IMDSv1). Pour les environnements utilisant IMDSv2, utilisez des configurations personnalisées pour agent CloudWatch moderne. Pour plus d'informations, consultez Publication de métriques personnalisées et Collecter des métriques de processus avec le plugin procstat.

1.    Créez un fichier .ebextensions (tel que .ebextensions/cloudwatch.config) basé sur l'exemplesuivant :

packages:
  yum:
    perl-DateTime: []
    perl-Sys-Syslog: []
    perl-LWP-Protocol-https: []
    perl-Switch: []
    perl-URI: []
    perl-Bundle-LWP: []
sources: 
  /opt/cloudwatch: https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip
  
container_commands:
  01-setupcron:
    command: |
      echo '*/5 * * * * root perl /opt/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl `{"Fn::GetOptionSetting" : { "OptionName" : "CloudWatchMetrics", "DefaultValue" : "--mem-util --disk-space-util --disk-path=/" }}` >> /var/log/cwpump.log 2>&1' > /etc/cron.d/cwpump
  02-changeperm:
    command: chmod 644 /etc/cron.d/cwpump
  03-changeperm:
    command: chmod u+x /opt/cloudwatch/aws-scripts-mon/mon-put-instance-data.pl
option_settings:
  "aws:autoscaling:launchconfiguration" :
    IamInstanceProfile : "aws-elasticbeanstalk-ec2-role"
  "aws:elasticbeanstalk:customoption" :
    CloudWatchMetrics : "--mem-util --mem-used --mem-avail --disk-space-util --disk-space-used --disk-space-avail --disk-path=/ --auto-scaling"

Important : pour les plates-formes basées sur Amazon Linux 2, remplacez le package yum perl-Bundle-LWP dans le fichier de configuration précédent par perl-Digest-SHA.

2.    Ajoutez les autorisations suivantes au profil d'instance de l'environnement Elastic Beanstalk :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "cloudwatch:PutMetricData",
        "ec2:DescribeTags"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ]
    }
  ]
}

Remarque : Les autorisations de l'étape 2 permettent aux instances de votre environnement de publier les métriques de l'étape 1 sur CloudWatch. Vous pouvez utiliser les conditions AWS Identity and Access Management (IAM) pour créer une stratégie plus restrictive. Pour plus d'informations, consultez Clés de condition pour Amazon EC2.

3.    Créez un groupe source d'application qui inclut votre fichier .ebextensions de l'étape 1.

4.    Déployez l'application Elastic Beanstalk mise à jour.

5.    Affichez les mesures dans la console CloudWatch dans la section Espace de noms du système Linux.

Remarque : un exemple de fichier de configuration incluant des métriques, des alarmes et une mise à l'échelle pour l'utilisation de la mémoire est disponible sur AWS GitHub.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?