我应该使用 GetMetricData 还是 GetMetricStatistics 来检索 CloudWatch 指标?
我想从 Amazon CloudWatch 指标中检索数据点。我应该使用哪个 API,GetMetricData 还是 GetMetricStatistics?
简述
最佳实践是使用 GetMetricData API 而不是 GetMetricStatistics,原因是使用 GetMetricData 可以更快地大规模检索数据。GetMetricData 还支持指标数学,它会返回有序的分页结果。此功能差异会反映在每项服务的成本上。GetMetricStatistics 包含在 CloudWatch 的免费套餐中,最多可发起 100 万个 API 请求,而 GetMetricData 没有。请参阅下表和 CloudWatch 定价表,了解哪个 API 更适合您。
每次调用的指标数 | 每次调用的数据点数 | 支持指标数学 | 返回有序的分页结果 | 计入免费套餐****限制 | |
GetMetricData | 500 | 100,800 | 是 | 是* | 否 |
GetMetricStatistics | 1 | 1,440 | 否 | 否 | 是 |
*要返回下一组数据点,必须使用响应中提供的 NextToken (--next-token) 对数据进行迭代。
- 50 个事务/秒(TPS)。
- 如果 API 请求中的 StartTime 距离当前时间小于或等于三小时,为 180,000 个数据点/秒(DPS)。
- 如果 StartTime 距当前时间超过三个小时,为 396,000 DPS。
解决方法
**注意:**如果您在运行 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 [ { "Id": "e1", "Expression": "m1 / m2", "Label": "ErrorRate" }, { "Id": "m1", "MetricStat": { "Metric": { "Namespace": "MyApplication", "MetricName": "Errors", "Dimensions": [ { "Name": "FunctionName", "Value": "MyFunc" } ] }, "Period": 300, "Stat": "Sum", "Unit": "Count" }, "ReturnData": false }, { "Id": "m2", "MetricStat": { "Metric": { "Namespace": "MyApplication", "MetricName": "Invocations", "Dimensions": [ { "Name": "FunctionName", "Value": "MyFunc" } ] }, "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
**注意:**您还可以在同一个命名空间下使用单个 PutMetricData API 调用最多发布 20 个指标。要执行此操作,在 PutMetricData 调用中使用 --metric-data 选项。
3. 使用您的输入参数运行 aws cloudwatch get-metric-data 命令。
4. 查看输出。在此示例中,使用指标数学计算了五个数据点,并按时间排序返回结果。由于 ReturnData 设置为 false,响应中未包含 m1 和 m2。
$ 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": [ { "Timestamps": [ "2018-06-19T04:20:00Z", "2018-06-19T04:15:00Z", "2018-06-19T04:10:00Z", "2018-06-19T04:05:00Z", "2018-06-19T04:00:00Z" ], "StatusCode": "Complete", "Values": [ 0.1, 0.9, 0.2, 0.6, 0.3 ], "Id": "e1", "Label": "ErrorRate" } ] }
相关信息
相关内容
- AWS 官方已更新 10 个月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 1 年前