AWS surveillance débit et latence d’un VPN

Le 10/05/2021
Automation and Deployment
AWS
Cloud
Cloud @en
4 minutes de lecture
Partage
copier
partager par email

AWS surveillance débit et latence d’un VPN

Une problématique classique dans AWS concerne la mesure de flux et de latence réseau lors de la communication avec des entités situées à l'extérieur du cloud. Et notamment lors de connexions utilisant un VPN. AWS fournit de nombreux outils dans le but de nous aider à optimiser la supervision de nos déploiements dans son cloud. Certains de ces outils sont disponibles sous forme d'un template d'ec2 installé par un "document" du Service System Manager. Pour notre problématique, une solution existante est décrite dans cet article de blog https://aws.amazon.com/fr/premiumsupport/knowledge-center/vpc-packet-loss-latency-gateway/ Cependant, l'installation de cet outil via un "document", comme décrit dans l'article ci-dessus, est trop complexe à mon goût. J'ai donc pris le parti de l'installer une fois, regarder comment AWS "s'y prend" et réaliser la même chose mais beaucoup plus simplement.  

Principe

Une ec2 de type t3.nano envoie des pings toutes les minutes à un système situé à l'extérieur du cloud. Dans notre cas, un serveur Windows situé dans un datacenter relié au cloud AWS avec un VPN. Cette ec2 de type t3.nano est créée avec un user_data pouvant être ré-exécuté à chaque redémarrage de l'ec2 (ce n'est pas le comportement par défaut). Ce champ user_data contient :
  • la création d'un script shell contenant la commande ping utilisée pour tester la connexion. Le système distant doit être autorisé à répondre au ping envoyé par le script shell.
  • La mise en crontab pour l'exécution de ce script shell toutes les minutes.
  • L'installation d'un agent CloudWatch.
  • la création d'un fichier de configuration pour que l'agent CloudWatch remonte les informations récoltées au service de supervision CloudWatch.
 

Installation

  1. Créer une ec2 pouvant envoyer des pings à l'entité distante.
  2. Ajouter dans la zone user_data le script contenu dans l'annexe ci-dessous.
  3. Affecter un rôle à l'ec2 avec la policy CloudWatchAgentServerPolicy permettant à l'agent SSM de communiquer avec l'API correspondante.
  4. Une fois l'ec2 lancée, un custom namespace, dont le nom est défini dans le script user_data est créé automatiquement dans CloudWatch. Des dashboards sont créés dans Cloudwatch à partir des données remontées depuis l'agent SSM de l'ec2 dans le namespace.
 

Résultat

Il vous reste à créer un dashboard dans CloudWatch pour visualiser les données remontées.  

Annexe

Le script ci-dessous est à copier dans le champ user_data de l'ec2. Deux paramètres sont à modifier dans le script pour l'adapter :
  • ADRESSE_VPN dans la crontab : adresse du serveur à "pinguer"
  • "log_group_name" dans le fichier .json de paramétrage de l'agent SSM : custom namespaces CloudWatch qui recevra les points de mesure.
 
Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"

#!/bin/bash
###########
# installation de l'envoi des metriques VPN vers cloudwatch
yum install -y amazon-cloudwatch-agent

#####
echo '#!/bin/bash
ping -s 56 -c 30 $1 | sed -e "1,$ s/^/ /" | sed "s/%//g" | tail -n 3 | sed "s#/# #g" >> /home/ec2-user/logs/ping64.$(date +\%Y\%m\%d\%H)' > /home/ec2-user/ping64.sh
###########
echo '{
"agent": {
"run_as_user": "root"
},
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_path": "/home/ec2-user/logs/ping64.*",
"log_group_name": "/flux-vpn",
"log_stream_name": "ping64",
"auto_removal":true
}
]
}
}
}
}' > /home/ec2-user/config.json
###########
echo 'ADRESSE_VPN="192.168.3.1"
* * * * * /home/ec2-user/ping64.sh $ADRESSE_VPN
'> /home/ec2-user/crontab.txt
crontab -u ec2-user /home/ec2-user/crontab.txt
mkdir /home/ec2-user/logs 2>/dev/null
chmod u+x /home/ec2-user/*.sh
chown ec2-user:ec2-user /home/ec2-user/*
###########
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/home/ec2-user/config.json -s
 
Partage
copier
partager par email