如何計算 EC2 執行個體的總網路使用量,並確定哪一個執行個體在日期範圍內使用的頻寬最多?

2 分的閱讀內容
0

我有 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。我想計算一段時間內的總網絡使用量,並確定哪一個執行個體的網路使用量最多。

簡短描述

使用 Amazon CloudWatch NetworkInNetworkOut指標確定哪一個 Amazon EC2 執行個體造成高網路使用量。您可以彙總這些指標中的資料點,以計算 EC2 執行個體的網路使用量。

**注意:**CloudWatch NetworkOut 指標與 AWS Cost Explorer 報告中使用的 DataTransfer-Out-Bytes 指標不同。CloudWatch NetworkOut 指標表示來自執行個體的輸出網路流量,無論其流向何處。

使用 CloudWatch 指標的先決條件:

**注意:**下列解決方案僅適用於您可以在 Amazon EC2 儀表板中看到的執行個體。下列 Bash Shell 指令碼不適用於已終止的執行個體。對於已終止的執行個體,請以空格分隔的格式將執行個體 ID 新增至指令碼。

空格分隔的格式範例:

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

解決方案

下列 Bash Shell 指令碼可識別 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 取代為執行個體所在的區域。如需詳細資訊,請參閱 Amazon EC2 可用區域
  • 指定 NetworkInNetworkOut 以計算流量流向。
  • 2020-06-01T00:00:00.000Z and 2020-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

相關資訊

列出執行個體可用的 CloudWatch 指標

GNU Bash (來自 GNU 網站)

AWS 官方
AWS 官方已更新 1 年前