如何计算我的 EC2 实例的总网络使用量,并确定在某个日期范围内哪个实例消耗的带宽最多?
2 分钟阅读
0
我有 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 命令行界面 (AWS CLI) 环境。有关详细信息,请参阅什么是 AWS 命令行界面?如果在运行 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 和 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 网站)
AWS 官方已更新 2 年前
没有评论
相关内容
- 已提问 7 个月前lg...
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前
- AWS 官方已更新 6 个月前