Como calculo o uso total da rede para minhas instâncias do EC2 e determino qual instância usou mais largura de banda em um intervalo de datas?
Eu tenho instâncias do Amazon Elastic Compute Cloud (Amazon EC2). Quero calcular o uso total da rede por um período de tempo e determinar qual instância teve o maior uso da rede.
Breve descrição
Use as métricas Amazon CloudWatch NetworkIn e NetworkOut para determinar qual instância do Amazon EC2 está causando alto uso da rede. Você pode agregar os pontos de dados dessas métricas para calcular o uso da rede para sua instância do EC2.
Observação: A métrica do CloudWatch NetworkOut é uma métrica diferente da métrica DataTransfer-Out-Bytes que é usada nos relatórios do Explorador de Custos da AWS. A métrica do CloudWatch NetworkOut representa a quantidade de tráfego de rede de saída de uma instância, independentemente de seu destino.
Pré-requisitos para o uso das métricas do CloudWatch:
- Configure um ambiente da AWS Command Line Interface (AWS CLI). Para obter mais informações, consulte O que é a interface de linha de comando da AWS? Se houver erros ao executar comandos da AWS CLI, verifique se está usando a versão mais recente da AWS CLI.
- Ative a permissão cloudwatch:GetMetricStatistics para o usuário do AWS Identity and Access Management (IAM) ou a função que você está tentando usar para executar a AWS CLI. Consulte Chaves de ações, recursos e condições para o Amazon Cloudwatch para obter mais informações.
- Tenha um shell Bash para executar o script.
Observação: A resolução a seguir funciona somente para instâncias em que é possível ver no painel do Amazon EC2. O script de shell Bash a seguir não funciona para instâncias que foram encerradas. Para instâncias encerradas, adicione os IDs de instância ao script em um formato separado por espaço.
Exemplo de formato separado por espaço:
ADD_INSTANCES="i-xxxx i-yyyy i-zzzz"
Resolução
O script de shell Bash a seguir identifica o uso da rede de todas as instâncias do EC2 numa região da AWS.
1. Copie o conteúdo a seguir para criar um 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. Salve o script com qualquer nome. Por exemplo, network_usage.sh.
network_usage.sh
3. Execute o comando a seguir para ativar a permissão para a execução do script:
$ sudo chmod a+x network_usage.sh
4. Use a sintaxe a seguir para executar o script:
$ bash network_usage.sh ap-south-1 NetworkOut 2020-06-01T00:00:00.000Z 2020-06-30T23:59:59.000Z
- Substitua ap-south-1 pela região em que suas instâncias estão localizadas. Para obter mais informações, consulte Regiões de disponibilidade do Amazon EC2.
- Especifique NetworkIn ou NetWorkout para calcular a direção do fluxo de tráfego.
- Substitua 2020-06-01T00:00:00.000Z e 2020-06-30T23:59:59.000Z pelos registros de data e hora iniciais e finais no intervalo pelo para o qual você quer calcular o uso da rede.
O exemplo a seguir apresenta uma amostra da saída do 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
Informações relacionadas
Relacionar as métricas disponíveis do CloudWatch para suas instâncias
Bash GNU (do site GNU)
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos