Come faccio a calcolare l'utilizzo totale della rete per le mie istanze EC2 e determinare quale istanza ha utilizzato la maggior larghezza di banda in un intervallo di date?
Sono presenti istanze Amazon Elastic Compute Cloud (Amazon EC2). Voglio calcolare l'utilizzo totale della rete per un periodo di tempo e determinare quale istanza ha avuto il maggior utilizzo della rete.
Breve descrizione
Utilizza le metriche Amazon CloudWatch NetworkIn e NetworkOut per determinare quale istanza Amazon EC2 causa un elevato utilizzo della rete. Puoi aggregare i punti dati da queste metriche per calcolare l'utilizzo della rete per la tua istanza EC2.
Nota: la metrica CloudWatch NetworkOut è una metrica diversa dalla metrica DataTransfer-Out-Bytes utilizzata nei report dell'Esploratore dei costi AWS. La metrica CloudWatch NetworkOut rappresenta la quantità di traffico di rete in uscita da un'istanza, indipendentemente da dove è andata.
Prerequisiti per l'utilizzo delle metriche di CloudWatch:
- Configura un ambiente dell'interfaccia della linea di comando AWS (AWS CLI). Per ulteriori informazioni, consulta Cos'è l'interfaccia della linea di comando AWS? Se riscontri degli errori durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS, assicurati di utilizzare la versione più recente dell'interfaccia AWS CLI.
- Attiva l'autorizzazione cloudwatch:GetMetricStatistics per l'utente o il ruolo AWS Identity and Access Management (IAM) che usi per eseguire l'interfaccia della linea di comando AWS. Per ulteriori informazioni, consulta Azioni, risorse e chiavi di condizione per Amazon CloudWatch.
- Utilizza una shell (interprete di comandi) Bash per eseguire lo script.
Nota: la seguente risoluzione funziona solo per le istanze che puoi vedere nella dashboard di Amazon EC2. Il seguente script di shell Bash non funziona per le istanze terminate. Per le istanze terminate, aggiungi gli ID di istanza allo script in un formato separato da spazi.
Esempio di formato separato da spazi:
ADD_INSTANCES="i-xxxx i-yyyy i-zzzz"
Risoluzione
Il seguente script di shell Bash identifica l'utilizzo della rete di tutte le istanze EC2 in una regione AWS.
1. Copia il seguente contenuto per creare uno 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. Salva lo script con un nome qualsiasi. Ad esempio, network_usage.sh.
network_usage.sh
3. Esegui il comando seguente per attivare l'autorizzazione all'esecuzione dello script:
$ sudo chmod a+x network_usage.sh
4. Usa la seguente sintassi per eseguire lo script:
$ bash network_usage.sh ap-south-1 NetworkOut 2020-06-01T00:00:00.000Z 2020-06-30T23:59:59.000Z
- Sostituisci ap-south-1 con la regione in cui si trovano le tue istanze. Per ulteriori informazioni, consulta le regioni disponibili di Amazon EC2.
- Specifica NetworkIn o NetworkOut per calcolare la direzione del flusso di traffico.
- Sostituisci 2020-06-01T00:00:00.000Z e 2020-06-30T23:59:59.000Z con i timestamp di inizio e fine nell'intervallo per il quale desideri calcolare l'utilizzo della rete.
L'esempio seguente mostra un esempio di output del comando precedente:
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
Informazioni correlate
Elenca le metriche CloudWatch disponibili per le tue istanze
GNU Bash (dal sito Web di GNU)

Contenuto pertinente
- AWS UFFICIALEAggiornata 5 mesi fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un mese fa