我应为 CloudWatch 指标使用 GetMetricData 还是 GetMetricStatistics?
上次更新时间:2020 年 1 月 30 日
我想要从 Amazon CloudWatch 指标检索数据点。应使用哪个 API:GetMetricData还是GetMetricStatistics?
简短描述
最好使用GetMetricDataAPI 而不是GetMetricStatistics,因为您可以使用GetMetricData 更快地大规模检索数据。GetMetricData还支持指标数据,并且会返回有序的分页结果。
| 每次调用的指标数 | 每次调用的数据点数 | 支持指标数学 | 返回有序的分页结果 | |
| GetMetricData | 500 | 100800 | 是 | 是* |
| GetMetricStatistics | 1 | 1440 | 否 | 否 |
*要返回下一组数据点,必须使用响应中提供的 NextToken (--next-token) 循环访问数据。
GetMetricData API 的服务配额为:
50 个事务/秒 (TPS)。 180000 个数据点/秒 (DPS),如果 API 请求中的StartTime小于或等于当前时间的三个小时。 396000 DPS,如果 StartTime 大于当前时间的三个小时。解决方法
注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI。
使用以下示例调用作为参考,在 AWS CLI 中执行自己的 GetMetricData API 调用。
1.为 GetMetricData API 调用 (metric-data-queries.json) 创建一个输入参数。该输入参数包含两个自定义指标(Invocations 和 Errors)和一个根据另外两个指标 (ErrorRate) 的指标数学计算得出的指标 (ErrorRate)。
$ cat metric-data-queries.json
},
"Period": 300,
"Stat": "Sum",
"Unit": "Count"
},
"ReturnData": false
},
{
"Id": "m2",
"MetricStat": {
"Metric": {
"Namespace": "MyApplication",
"MetricName": "Invocations",
"Dimensions":
},
"Period": 300,
"Stat": "Sum",
"Unit": "Count"
},
"ReturnData": false
}
]
2.使用 PutMetricData 将示例指标数据作为自定义指标发布。例如:
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Invocations --dimensions FunctionName=MyFunc --value 10 --unit Count --timestamp 2018-06-19T04:00:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Invocations --dimensions FunctionName=MyFunc --value 10 --unit Count --timestamp 2018-06-19T04:05:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Invocations --dimensions FunctionName=MyFunc --value 10 --unit Count --timestamp 2018-06-19T04:10:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Invocations --dimensions FunctionName=MyFunc --value 10 --unit Count --timestamp 2018-06-19T04:15:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Invocations --dimensions FunctionName=MyFunc --value 10 --unit Count --timestamp 2018-06-19T04:20:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Errors --dimensions FunctionName=MyFunc --value 3 --unit Count --timestamp 2018-06-19T04:00:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Errors --dimensions FunctionName=MyFunc --value 6 --unit Count --timestamp 2018-06-19T04:05:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Errors --dimensions FunctionName=MyFunc --value 2 --unit Count --timestamp 2018-06-19T04:10:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Errors --dimensions FunctionName=MyFunc --value 9 --unit Count --timestamp 2018-06-19T04:15:00Z
$ aws cloudwatch put-metric-data --namespace MyApplication --metric-name Errors --dimensions FunctionName=MyFunc --value 1 --unit Count --timestamp 2018-06-19T04:20:00Z
注意:您也可以在相同命名空间下使用一个PutMetricDataAPI 调用发布多达 20 个指标。要执行此操作,在PutMetricData调用中使用--metric-data选项。
3.使用您的输入参数运行命令aws cloudwatch get-metric-data。
4.查看输出。在本示例中,使用指标数学计算出了五个数据点并作为按时间排序的结果返回。m1 和 m2 未包括在响应中,因为 ReturnData 设置为 false。
$ aws cloudwatch get-metric-data --metric-data-queries file://./metric-data-queries.json --start-time 2018-06-19T04:00:00Z --end-time 2018-06-19T04:30:00Z
{
"MetricDataResults": ,
"StatusCode": "Complete",
"Values": ,
"Id": "e1",
"Label": "ErrorRate"
}
]
}