为什么 GetMetricData 返回一组空值?

Why is GetMetricData returning an empty set of values?

使用 JS AWS SDK 并传递以下参数:

{
  "StartTime": 1548111915,
  "EndTime": 1549321515,
  "MetricDataQueries": [
    {
      "Id": "m1",
      "MetricStat": {
        "Metric": {
          "MetricName": "NetworkOut",
          "Namespace": "AWS/EC2",
          "Dimensions": [
            {
              "Name": "InstanceId",
              "Value": "i-[redacted]"
            }
          ]
        },
        "Period": 300,
        "Stat": "Average",
        "Unit": "Gigabytes"
      }
    }
  ]
}

这是输出:

[
  {
    "Id": "m1",
    "Label": "NetworkOut",
    "Timestamps": [],
    "Values": [],
    "StatusCode": "Complete",
    "Messages": []
  }
]
  1. 查询与在 https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricData.html#API_GetMetricData_Examples

  2. 处找到的示例请求非常匹配
  3. 我确信该实例是一个有效实例,在该日期范围内肯定有 NetworkOut 流量。

Values 数组中缺少元素的原因是什么?

我试过了,得到了和你一样的(空)结果。

然后我把Gigabytes改成了Bytes,得到了结果。因此,您可能需要减小单位大小。

这是我用于 AWS CLI 的命令:

aws cloudwatch get-metric-data --start-time 1548111915 --end-time 1549321515 --metric-data-queries '[
    {
      "Id": "m1",
      "MetricStat": {
        "Metric": {
          "MetricName": "NetworkOut",
          "Namespace": "AWS/EC2",
          "Dimensions": [
            {
              "Name": "InstanceId",
              "Value": "i-xxx"
            }
          ]
        },
        "Period": 300,
        "Stat": "Average",
        "Unit": "Bytes"
      }
    }
  ]'

更好的解决方案是完全省略 "Unit",这样 AWS 就可以选择合适的单位,不仅在规模上,而且在类别上。

对于未来的审问者,有多种原因导致 aws cli 默默地 returns 空数据集而不是错误,因为输入要求比标准用户的期望更严格,但输出要求却很多松散。例子

  • 单位错误
  • 维度列表不完整
  • 错别字,case-sensitivity,等等

参考文献: