Wie berechne ich die gesamte Netzwerknutzung für meine EC2-Instances und ermittle, welche Instance innerhalb eines Datumsbereichs die meiste Bandbreite verbraucht hat?
Ich habe Amazon Elastic Compute Cloud (Amazon EC2)-Instances. Ich möchte die gesamte Netzwerknutzung für einen bestimmten Zeitraum berechnen und ermitteln, welche Instance die meiste Netzwerkauslastung hatte.
Kurze Beschreibung
Verwenden Sie die Amazon CloudWatch NetworkIn- und NetWorkout-Metriken, um zu ermitteln, welche Amazon EC2-Instance eine hohe Netzwerknutzung verursacht. Sie können die Datenpunkte aus diesen Metriken aggregieren, um die Netzwerknutzung für Ihre EC2-Instance zu berechnen.
**Hinweis:**Die CloudWatch NetworkOut-Metrik ist eine andere Metrik als die DataTransfer-Out-Bytes-Metrik, die in AWS Cost Explorer-Berichten verwendet wird. Die CloudWatch NetWorkout-Metrik stellt die Menge des ausgehenden Netzwerkverkehrs von einer Instance dar, unabhängig davon, wohin er ging.
Voraussetzungen für die Verwendung von CloudWatch-Metriken:
- Richten Sie eine AWS Command Line Interface (AWS CLI)-Umgebung ein. Weitere Informationen finden Sie unter Was ist die AWS-Befehlszeilenschnittstelle?Wenn Sie beim Ausführen von AWS-CLI-Befehlen Fehler erhalten, stellen Sie sicher, dass Sie die neueste Version der AWS-CLI verwenden.
- Aktivieren Sie die CloudWatch:GetMetricStatistics-Berechtigung für den AWS Identity and Access Management (IAM)-Benutzer oder die Rolle, die Sie zum Ausführen der AWS-CLI verwenden. Weitere Informationen finden Sie unter Aktionen, Ressourcen und Bedingungsschlüssel für Amazon CloudWatch.
- Habe eine Bash-Shell, um das Skript auszuführen.
**Hinweis:**Die folgende Lösung funktioniert nur für Instances, die Sie im Amazon EC2-Dashboard sehen können. Das folgende Bash-Shell-Skript funktioniert nicht für terminierte Instanzen. Fügen Sie für terminierte Instances die Instanz-IDs in einem durch Leerzeichen getrennten Format zum Skript hinzu.
Beispiel für ein durch Leerzeichen getrenntes Format:
ADD_INSTANCES="i-xxxx i-yyyy i-zzzz"
Auflösung
Das folgende Bash-Shell-Skript identifiziert die Netzwerknutzung aller EC2-Instances in einer AWS-Region.
1.Kopieren Sie den folgenden Inhalt, um ein Skript zu erstellen:
#!/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.Speichern Sie das Script unter einem beliebigen Namen. Zum Beispiel network\ _usage.sh.
network_usage.sh
3.Führen Sie den folgenden Befehl aus, um die Berechtigung zur Ausführung des Skripts zu aktivieren:
$ sudo chmod a+x network_usage.sh
4.Verwenden Sie die folgende Syntax, um das Skript auszuführen:
$ bash network_usage.sh ap-south-1 NetworkOut 2020-06-01T00:00:00.000Z 2020-06-30T23:59:59.000Z
- Ersetzen Sie ap-south-1 durch die Region, in der sich Ihre Instances befinden. Weitere Informationen finden Sie unter Verfügbare Regionen in Amazon EC2.
- Geben Sie entweder NetworkIn oder NetWorkout an, um die Verkehrsflussrichtung zu berechnen.
- Ersetzen Sie 2020-06-01T00:00:00.000Z und 2020-06-30T23:59:59.000Z durch die Start- und Endzeitstempel in dem Bereich, für den Sie die Netzwerknutzung berechnen möchten.
Das folgende Beispiel zeigt eine Beispielausgabe des vorherigen Befehls:
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
Verwandte Informationen
Listen Sie die verfügbaren CloudWatch-Metriken für Ihre Instances auf
GNU Bash (von der GNU-Website)
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren