Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何計算 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 年前
- 已提問 2 年前
