Je possède des instances Amazon Elastic Compute Cloud (Amazon EC2). Je souhaite calculer l'utilisation totale du réseau sur une période donnée et déterminer quelle instance a été la plus utilisée.
Brève description
Utilisez les métriques Amazon CloudWatch NetworkIn et NetWorkout pour déterminer quelle instance Amazon EC2 est à l'origine d'une utilisation élevée du réseau. Vous pouvez agréger les points de données issus de ces mesures pour calculer l'utilisation du réseau pour votre instance EC2.
Remarque :La métrique CloudWatch NetWorkout est différente de la métrique DataTransfer-Out-Bytes utilisée dans les rapports AWS Cost Explorer. La métrique CloudWatchNetWorkoutreprésente le volume de trafic réseau sortant d'une instance, quel que soit son emplacement.
Conditions préalables à l'utilisation des métriques CloudWatch :
**Remarque :**La résolution suivante ne fonctionne que pour les instances que vous pouvez voir dans le tableau de bord Amazon EC2. Le script shell Bash suivant ne fonctionne pas pour les instances résiliées. Pour les instances résiliées, ajoutez les ID d'instance au script dans un format séparé par des espaces.
Exemple de format séparé par des espaces :
ADD_INSTANCES="i-xxxx i-yyyy i-zzzz"
Résolution
Le script shell Bash suivant identifie l'utilisation du réseau de toutes les instances EC2 d'une région AWS.
1. Copiez le contenu suivant pour créer un script :
#!/bin/bash
if [ $# -ne 4 ]; then
echo "Usage: $0 <REGION> <NetworkIn|NetworkOut> <START_TIMESTAMP> <END_TIMESTAMP>"
echo -e "\tNote: Do not change the order of parameters."
echo -e "\n\tExample: $0 ap-south-1 NetworkOut 2020-06-01T00:00:00.000Z 2020-06-30T23:59:59.000Z"
exit 1
fi
REGION="$1"
METRIC="$2"
START_TIME="$3"
END_TIME="$4"
ADD_INSTANCES=""
INSTANCES="${ADD_INSTANCES} $(aws ec2 describe-instances --region ${REGION} --query Reservations[*].Instances[*].InstanceId --output text)" || { echo "Failed to run aws ec2 describe-instances commandline, exiting..."; exit 1; }
[ "${INSTANCES}x" == "x" ] && { echo "There are no instances found from the given region ${REGION}, exiting..."; exit 1; }
for _instance_id in ${INSTANCES}; do
unset _value
_value="$(aws cloudwatch get-metric-statistics --metric-name ${METRIC} --start-time ${START_TIME} --end-time ${END_TIME} --period 86400 --namespace AWS/EC2 --statistics Sum --dimensions Name=InstanceId,Value=${_instance_id} --region ${REGION} --output text)"
[ "${_value}x" == "x" ] && { echo "Something went wrong while calculating the network usage of ${_instance_id}"; continue; }
echo "${_instance_id}: $(echo "${_value}" | awk '{ sum += $2 } END {printf ("%f\n", sum/1024/1024/1024)}';) GiB";
done
echo -e "\nNote: If you think the values are inaccurate, please verify the input and modify if needed."
2. Enregistrez le script sous n'importe quel nom. Par exemple,network_usage.sh.
network_usage.sh
3. Exécutez la commande suivante pour activer l'autorisation d'exécution du script :
$ sudo chmod a+x network_usage.sh
4. Utilisez la syntaxe suivante pour exécuter le script :
$ bash network_usage.sh ap-south-1 NetworkOut 2020-06-01T00:00:00.000Z 2020-06-30T23:59:59.000Z
- Remplacezap-south-1 par la région dans laquelle se trouvent vos instances. Pour plus d'informations, consultez la section Régions disponibles d'Amazon EC2.
- Spécifiez NetworkIn ou NetWorkout pour calculer la direction du flux de trafic.
- Remplacez 2020-06-01T00:00:00.000Z et 2020-06-30T23:59:59.000Z par les horodatages de début et de fin compris dans la plage pour laquelle vous souhaitez calculer l'utilisation du réseau.
L'exemple suivant montre un exemple de sortie de la commande précédente :
i-025a820f5ee9f1490: 0.000099 GiB
i-0b56df07325d9c0fa: 0.008475 GiB
i-09ad0a93b60a233b1: 0.000000 GiB
i-0ba35b570c7003ffe: 0.000000 GiB
i-012cc851406584b5c: 0.000000 GiB
i-0ef3921993739d772: 219.884000 GiB
i-01f193931c4101cf3: 0.000000 GiB
i-05ca8ccc8aa7caf76: 0.009235 GiB
i-06b165356b5769581: 0.000000 GiB
i-06c4d1e1cb4e9139d: 0.012911 GiB
i-070b6508dd4ab5040: 0.000000 GiB
i-0f29e3ba7f156dfee: 0.000000 GiB
Informations connexes
Répertorier les métriques CloudWatch disponibles pour vos instances
GNU Bash (depuis le site web de GNU)