EC2 인스턴스의 총 네트워크 사용량을 계산하고 날짜 범위 내에서 가장 많은 대역폭을 사용한 인스턴스를 확인하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 1월 5일

Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스가 있습니다. 일정 기간 동안의 총 네트워크 사용량을 계산하고 네트워크 사용량이 가장 많은 인스턴스를 확인하려고 합니다. 어떻게 해야 합니까?

간략한 설명

Amazon CloudWatch NetworkInNetworkOut 지표를 사용하여 네트워크 사용량이 많은 인스턴스를 확인할 수 있습니다. 이러한 지표의 데이터 포인트를 집계하여 인스턴스의 네트워크 사용량을 계산할 수 있습니다.

참고: CloudWatch NetworkOut 지표는 AWS Cost Explorer 보고서에 사용된 DataTransfer-Out-Bytes 지표와 다른 지표입니다. CloudWatch NetworkOut 지표는 이동 위치에 관계없이 AWS EC2 인스턴스의 아웃바운드 네트워크 트래픽 양을 나타냅니다.

CloudWatch 지표 사용을 위한 사전 요구 사항:

참고: 다음 해결 방법은 Amazon EC2 대시보드에 표시되는 EC2 인스턴스에만 적용됩니다. 다음 Bash 셸 스크립트는 종료된 인스턴스에 대해 작동하지 않습니다. 종료된 인스턴스의 경우 다음 예와 같이 공백으로 구분된 형식으로 스크립트에 인스턴스 ID를 추가합니다.

ADD_INSTANCES="i-xxxx i-yyyy i-zzzz"

해결 방법

다음 Bash 셸 스크립트는 AWS 리전에 있는 모든 EC2 인스턴스의 네트워크 사용을 식별합니다.

1.    다음 내용을 복사하여 스크립트를 만듭니다.

#!/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.    스크립트를 임의의 이름으로 저장합니다. 예: network_usage.sh

network_usage.sh

3.    다음 명령을 실행하여 스크립트에 대한 실행 권한을 활성화합니다.

$ sudo chmod a+x network_usage.sh

4.    다음 구문을 사용하여 스크립트를 실행합니다.

$ bash network_usage.sh  ap-south-1  NetworkOut  2020-06-01T00:00:00.000Z  2020-06-30T23:59:59.000Z
  • ap-south-1을 EC2 인스턴스가 위치한 AWS 리전으로 바꿉니다. 자세한 내용은 Amazon EC2 가용 리전을 참조하세요.
  • NetworkIn 또는 NetworkOut 중 하나를 지정하여 트래픽 흐름 방향을 계산합니다.
  • 2020-06-01T00:00:00.000Z2020-06-30T23:59:59.000Z를 네트워크 사용량을 계산할 범위의 시작과 끝 타임스탬프로 바꿉니다.

다음 예에서는 앞 명령의 샘플 출력을 보여 줍니다.

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

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?