为什么我的 CloudWatch GetMetricStatistics API 调用未返回数据点? 

上次更新时间:2018 年 6 月 5 日

我的 Amazon CloudWatch “GetMetricStatistics” API 调用没有返回任何数据点。但在 CloudWatch 控制台上可以使用数据点。如何解决此问题?

解决方法

注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时遇到错误,请确保您运行的是最新版本的 AWS CLI

CloudWatch 是一项区域服务,因此请务必确保 API 调用使用的区域正确。GetMetricStatistics API 调用在发出时具有多个参数,这些参数必须与指标的属性相符。由于这些参数区分大小写,因此请务必在 CloudWatch 控制台配置中检查名称和大小写是否一致。大部分情况下,错误的原因是参数不正确。

维度

如果在创建指标时使用了多个维度,则只有指定配置的所有维度才能检索到该指标的数据点。例如,假设您在具有以下属性的 DataCenterMetric 命名空间中发布了一个名为 ServerStats 的指标:

Dimensions: Server=Prod, Domain=Frankfurt, Unit: Count, Timestamp: 2016-10-31T12:30:00Z, Value: 105

则您必须指定这些维度才能检索此指标的数据点:

Server=Prod,Domain=Frankfurt

如果仅指定这两个维度中的一个,则无法检索到数据点:例如:

Server=Prod

对于 AWS CLI,在 get-metric-statistics 命令中用于指定维度的格式与在 put-metric-data 命令中不同。务必使用如下格式:

"Name"=string, "Value"=string

而不是以下格式:

Name=Value

get-metric-statistics 调用示例:

aws cloudwatch get-metric-statistics --metric-name "MyMetric" --start-time 2018-04-08T23:18:00Z --end-time 2018-04-09T23:18:00Z --period 3600 --namespace "MyNamespace" --statistics Maximum --dimensions Name=Server,Value=Prod

put-metric-data 调用示例:

aws cloudwatch put-metric-data --namespace "MyNamespace" --metric-name "MyMetric" --dimensions Server=Prod --value 10

周期

如果未按指定周期值推送指标,则系统不会返回任何数据点。

例如,如果您为某个实例启用了基本监控,则 Amazon EC2 会每五分钟推送一次数据点。假设 Amazon EC2 推送数据点的时间戳为 12:00、12:05、12:10 等等。如果您的开始时间和结束时间设置在 12:01 和 12:04,然后尝试按照 60 秒的周期检索数据点,则无法看到任何数据点。最佳实践是将从开始时间到结束时间的间隔设置为一个大于指标所提供最低粒度的间隔(本例中为 5 分钟),或者使用大于或等于指标所提供最小粒度的周期。

统计数据

要检索指标的百分位统计数据,请使用 ExtendedStatistic

CloudWatch 使用原始数据点来计算百分位。如果您使用统计数据集发布数据,则仅在满足下列条件中的一项时,才能检索到此数据的百分位统计数据:

  • 统计数据集的样本容量为 1。
  • 统计数据集的最小值和最大值相等。

单位

  • 如果指定的单位与为指标配置的单位不同,则系统不会返回任何数据点。
  • 如果未指定单位参数,则系统会返回所有单位的数据点。

开始时间和结束时间

  • 按照 GetMetricStatistics 文档中所述,设置开始时间和结束时间参数的格式。
  • 如果在开始时间到结束时间之间没有为该指标推送任何数据点,则不会返回任何数据点。

注意:如果数据点的时间戳为 24 小时或更久之前的时间,则至少需要经过 48 小时,数据点才能供 get-metric-statistics 使用。有关更多信息,请参阅 put-metric-data


这篇文章对您有帮助吗?


您是否需要账单或技术支持?