AWS CloudWatch get-metric-statistics获取S3 BytesDownloaded无数据求助
问题描述
已确认AWS在收集S3数据:通过S3指标页跳转CloudWatch GUI可正常查看月度下载字节数统计,但执行AWS CLI的get-metric-statistics命令获取BytesDownloaded指标时,始终返回空的Datapoints。调整起止时间、周期参数,甚至修改指标名称为任意值,结果仍为空且无报错。其他AWS CLI命令(如创建实例、S3数据传输等)均正常,已排除基础认证或账户问题,需排查线索。
执行命令示例
aws cloudwatch get-metric-statistics --metric-name BytesDownloaded --namespace AWS/S3 --statistics Sum --start-time 2022-12-01T00:00:00Z --end-time 2022-12-31T00:00:00Z --period 2678400 --dimensions '[{"Name":"BucketName","Value":"chess-bgn"}]'
返回结果
{ "Label": "BytesDownloaded", "Datapoints": [] }
排查线索
修正维度参数格式:避免JSON转义在不同shell下的兼容性问题,改用键值对格式指定维度:
aws cloudwatch get-metric-statistics --metric-name BytesDownloaded --namespace AWS/S3 --statistics Sum --start-time 2022-12-01T00:00:00Z --end-time 2022-12-31T00:00:00Z --period 2678400 --dimensions Name=BucketName,Value=chess-bgn核对统计周期的合法性:S3标准指标的存储粒度为5分钟(300秒),
period参数必须是300的整数倍。虽2678400秒符合要求,但可先尝试更小的周期(如86400秒/1天)测试,确认是否能返回数据。指定桶所在区域:确保CLI命令的区域与S3桶所在区域一致,可通过
--region <桶区域>参数指定,例如:aws cloudwatch get-metric-statistics --metric-name BytesDownloaded --namespace AWS/S3 --statistics Sum --start-time 2022-12-01T00:00:00Z --end-time 2022-12-31T00:00:00Z --period 2678400 --dimensions Name=BucketName,Value=chess-bgn --region us-east-1验证指标存在性:先执行
list-metrics确认目标指标是否存在:aws cloudwatch list-metrics --namespace AWS/S3 --metric-name BytesDownloaded --dimensions Name=BucketName,Value=chess-bgn若返回结果包含该指标,说明指标存在,问题聚焦在查询参数;若未返回,需确认桶的指标是否已启用(GUI可查看则此情况概率极低)。
检查IAM权限:确认当前执行CLI的IAM主体拥有
cloudwatch:GetMetricStatistics权限,且无资源级策略限制对该指标的访问。可通过IAM控制台查看权限策略,或使用aws iam simulate-principal-policy模拟权限验证。调整时间范围:将
end-time设置为统计周期结束后的时间点(如2023-01-01T00:00:00Z),确保完整覆盖目标周期的数据聚合时间。
内容的提问来源于stack exchange,提问作者Buzz Moschetti

