Share Your AWS re:Post Experience - Quick 3 Question Survey
Help us improve AWS re:Post! We're interested in understanding how you use re:Post and its impact on your AWS journey. Please take a moment to complete our brief 3-question survey.
如何計算 EC2 執行個體的總網路使用量,並確定哪一個執行個體在日期範圍內使用的頻寬最多?
我有 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體。我想計算一段時間內的總網絡使用量,並確定哪一個執行個體的網路使用量最多。
簡短描述
使用 Amazon CloudWatch NetworkIn 和 NetworkOut指標確定哪一個 Amazon EC2 執行個體造成高網路使用量。您可以彙總這些指標中的資料點,以計算 EC2 執行個體的網路使用量。
**注意:**CloudWatch NetworkOut 指標與 AWS Cost Explorer 報告中使用的 DataTransfer-Out-Bytes 指標不同。CloudWatch NetworkOut 指標表示來自執行個體的輸出網路流量,無論其流向何處。
使用 CloudWatch 指標的先決條件:
- 設定 AWS Command Line Interface (AWS CLI) 環境。如需詳細資訊,請參閱什麼是 AWS Command Line Interface?如果您在執行 AWS CLI 命令時收到錯誤訊息,請確認您使用的是最新版本的 AWS CLI。
- 為您用於執行 AWS CLI 的 AWS Identity and Access Management (IAM) 使用者或角色開啟 cloudwatch:GetMetricStatistics 權限。如需詳細資訊,請參閱適用於 Amazon CloudWatch 的動作、資源和條件索引鍵。
- 具有一個 Bash Shell 來執行指令碼。
**注意:**下列解決方案僅適用於您可以在 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 可用區域。
- 指定 NetworkIn 或 NetworkOut 以計算流量流向。
- 將 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
相關資訊
GNU Bash (來自 GNU 網站)

相關內容
- 已提問 1 年前lg...
- 已提問 1 年前lg...
- 已提問 2 年前lg...
- 已提問 2 年前lg...
- 已提問 4 個月前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 4 年前