Comment puis-je transférer les métriques personnalisées d'une instance EC2 Linux vers CloudWatch ?

Date de la dernière mise à jour : 18/11/2020

Je souhaite surveiller les métriques du système d'exploitation et les compteurs de performances de mon instance Linux Amazon Elastic Compute Cloud (EC2). Comment puis-je procéder à l'aide d'Amazon CloudWatch ?

Brève description

Vous pouvez créer une métrique CloudWatch personnalisée pour vos statistiques d'instance EC2 Linux en créant un script via l'interface de ligne de commande AWS (AWS CLI). Ensuite, vous pouvez surveiller cette métrique en la transférant vers CloudWatch.

Résolution

Remarque : si vous recevez des erreurs lors de l'exécution des commandes depuis l'interface de ligne de commande AWS, assurez-vous que vous utilisez la version AWS CLI la plus récente.

Avant de poursuivre, veillez à configurer l'interface de ligne de commande AWS en vue de son utilisation avec l'instance que vous souhaitez surveiller.

Créer une métrique CloudWatch personnalisée

Pour créer votre métrique personnalisée :

1.    Connectez-vous à l'instance via l'interface de ligne de commande AWS.

2.    Copiez le script bash suivant, puis enregistrez-le dans votre instance (par exemple mem.sh).

Cet exemple de script montre les valeurs que vous pouvez publier dans CloudWatch. Dans cet exemple, l'appel d'API put-metric-data est utilisé pour transférer les valeurs suivantes vers CloudWatch :

  • Pourcentage de mémoire utilisée (USEDMEMORY)
  • Nombre total de connexions (TCP_CONN)
  • Nombre de connexions TCP sur le port 80 (TCP_CONN_PORT_80)
  • Nombre d'utilisateurs actuellement connectés (USERS)
  • Pourcentage de temps d'attente d'E/S (IO_WAIT)
========Sample script======
#!/bin/bash
USEDMEMORY=$(free -m | awk 'NR==2{printf "%.2f\t", $3*100/$2 }')
TCP_CONN=$(netstat -an | wc -l)
TCP_CONN_PORT_80=$(netstat -an | grep 80 | wc -l)
USERS=$(uptime |awk '{ print $6 }')
IO_WAIT=$(iostat | awk 'NR==4 {print $5}')
 
aws cloudwatch put-metric-data --metric-name memory-usage --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $USEDMEMORY
aws cloudwatch put-metric-data --metric-name Tcp_connections --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $TCP_CONN
aws cloudwatch put-metric-data --metric-name TCP_connection_on_port_80 --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $TCP_CONN_PORT_80
aws cloudwatch put-metric-data --metric-name No_of_users --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $USERS
aws cloudwatch put-metric-data --metric-name IO_WAIT --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $IO_WAIT
===============================================

3.    Après avoir créé le script bash, accordez des autorisations d'exécution au fichier.

$ chmod +x mem.sh

4.    Exécutez le script bash pour vérifier qu'il fonctionne.

Transférer votre métrique vers CloudWatch

1.    Créez une tâche cron :

$ crontab -e

2.    Ajoutez cette ligne afin d'exécuter votre script toutes les minutes :

*/1 * * * * /home/ec2-user/mem.sh

3.    Enregistrez et quittez.

Lorsque crontab est enregistré, crontab: install new crontab s'affiche.

Surveiller votre instance EC2

Recherchez votre métrique personnalisée dans la console CloudWatch :

1.    Ouvrez la console CloudWatch.

2.    Choisissez Metrics (Métriques).

3.    Choisissez l'onglet All Metrics (Toutes les métriques).

4.    Choisissez Custom (Personnaliser).

5.    Choisissez la dimension Instance.

6.    Sélectionnez votre métrique personnalisée en fonction de son InstanceId et de son Nom de métrique.

7.    Affichez le graphique de votre métrique.

Autres utilisations

Vous pouvez utiliser cet exemple pour créer votre propre logique afin de traiter plusieurs dimensions, puis transférer ces données de métriques vers CloudWatch.

Par exemple, supposons que vous évaluiez votre application. Ensuite, vous découvrez que le système cesse de fonctionner correctement lorsque le temps d'attente d'E/S et le pourcentage d'utilisation de la mémoire atteignent un certain seuil. Pour résoudre ce problème, vous pouvez surveiller les deux valeurs simultanément dans un script. Stockez l'AND logique des valeurs dans une troisième variable que vous transférerez ensuite vers CloudWatch.

c=0
if [[  $IO_WAIT > 70 && $USEDMEMORY > 80 ]]
then
  c=1
fi
aws cloudwatch put-metric-data --metric-name danger --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $c

Pour les conditions normales, cette variable est 0 (zéro). Lorsque les deux conditions sont respectées, la valeur est définie sur 1 (un). Vous pouvez ensuite créer des alarmes personnalisées autour de ces paramètres afin de vous alerter en cas de situations problématiques pour votre système.


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


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