¿Cómo calculo el uso total de la red para mis instancias de EC2 y determino qué instancia utilizó más ancho de banda dentro de un intervalo de fechas?
Tengo instancias de Amazon Elastic Compute Cloud (Amazon EC2). Quiero calcular el uso total de la red durante un período de tiempo y determinar qué instancia tuvo el mayor uso de la red.
Descripción breve
Utilice las métricas NetworkIn y NetWorkout de Amazon CloudWatch para determinar qué instancia de Amazon EC2 está causando un uso elevado de la red. Puede agregar los puntos de datos de estas métricas para calcular el uso de la red de su instancia de EC2.
Nota: La métrica NetWorkOut de CloudWatch es una métrica diferente de la métrica de DataTransfer-Out-Bytes que se utiliza en los informes de Explorador de costes de AWS. La métricaNetWorkOut de CloudWatch representa la cantidad de tráfico de red saliente de una instancia, independientemente de dónde se haya dirigido.
Requisitos previos para usar las métricas de CloudWatch:
- Configure un entorno de AWS Command Line Interface (AWS CLI). Para obtener más información, consulte ¿Qué es la interfaz de línea de comandos de AWS? Si recibe errores al ejecutar los comandos de la CLI de AWS, asegúrese de utilizar la versión más reciente de la CLI de AWS.
- Active el permiso cloudwatch:GetMetricStatistics para el usuario o rol de AWS Identity and Access Management (IAM) que utilice para ejecutar la CLI de AWS. Consulte Acciones, recursos y claves de condiciones de Amazon CloudWatch para obtener más información.
- Tenga un shell de Bash para ejecutar el script.
Nota: La siguiente resolución solo funciona para las instancias que puede ver en el panel de control de Amazon EC2. El siguiente script de shell de Bash no funciona para las instancias terminadas. Para las instancias terminadas, añada los ID de instancia al script en un formato separado por espacios.
Ejemplo de formato separado por espacios:
ADD_INSTANCES="i-xxxx i-yyyy i-zzzz"
Resolución
El siguiente script de shell de Bash identifica el uso de red de todas las instancias de EC2 en una región de AWS.
1. Copie el siguiente contenido para crear 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. Guarde el script con cualquier nombre. Por ejemplo, network_usage.sh.
network_usage.sh
3. Ejecute el siguiente comando para activar los permisos de ejecución del script:
$ sudo chmod a+x network_usage.sh
4. Utilice la siguiente sintaxis para ejecutar el script:
$ bash network_usage.sh ap-south-1 NetworkOut 2020-06-01T00:00:00.000Z 2020-06-30T23:59:59.000Z
- Reemplace ap-south-1 por la región en la que se encuentran sus instancias. Para obtener más información, consulte las regiones disponibles de Amazon EC2.
- Especifique NetworkIn o NetWorkOut para calcular la dirección del flujo de tráfico.
- Sustituya 2020-06-01T00:00:00.000Z y 2020-06-30T23:59:59.000Z por las marcas de tiempo de inicio y finalización del rango para el que desea calcular el uso de la red.
El siguiente ejemplo presenta una muestra de salida del comando anterior:
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
Información relacionada
Enumere las métricas de CloudWatch disponibles para sus instancias
GNU Bash (del sitio web de GNU)

Contenido relevante
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 6 meses
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 2 años