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

Date de la dernière mise à jour : 22/08/2019

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 le faire à 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

Avant de continuer, assurez-vous d'installer et de configurer l'interface de ligne de commande AWS pour l'utiliser avec l'instance que vous souhaitez surveiller.

Création d'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 présente 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 pour exécuter votre script toutes les minutes :

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

3. Save and exit (Enregistrer et quitter)

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 (Personnalisé).

5. Choisissez la dimension Instance.

6. Sélectionnez votre métrique personnalisée par son InstanceId (ID d'instance) et son Metric Name (nom de la 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). Pour les situations où les deux conditions sont satisfaites, la valeur est définie sur 1 (un). Vous pouvez ensuite créer des alarmes personnalisées autour de ces paramètres pour avertir des situations problématiques pour votre système.


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

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?