对于 CloudWatch 指标,使用 GetMetricData 还是 GetMetricStatistics 更好?
我想知道使用 GetMetricData 还是 GetMetricStatistics API 操作从 Amazon CloudWatch 指标中检索数据点更好。
简短描述
最佳做法是使用 GetMetricData API 操作而不是 GetMetricStatistics,原因是 GetMetricData 可以更快地大规模检索数据。GetMetricData 支持指标数学,它会返回有序的分页结果。
以下是 GetMetricData API 操作的服务配额:
- 50 个事务/秒 (TPS)。
- 如果 API 请求中的 StartTime 距离当前时间小于或等于 3 小时,则为 180,000 个数据点/秒 (DPS)。
- 如果 StartTime 距离当前时间超过 3 小时,则为 396,000 DPS。
**注意:**GetMetricData 的定价与 GetMetricStatistics 的定价不同。要了解更多信息,请在 Amazon CloudWatch 定价页面的 Paid tier(付费套餐)部分中选择 Metrics(指标)选项卡。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
要使用 GetMetricData API 操作来获取数据点,请在 AWS CLI 中完成以下步骤:
-
为您的 GetMetricData API 操作创建输入参数。<br id=hardline_break/> 操作示例:
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 } ]**注意:**请将 MyApplication 替换为您的应用程序名称。<br id=hardline_break/> 在上述操作中,输入参数有自定义指标 Invocations 和 Errors。CloudWatch 通过其他两个指标的指标数学来计算 ErrorRate 指标。
-
使用 PutMetricData 将样本指标数据作为自定义指标发布。<br id=hardline_break/> 操作示例:
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**注意:**要发布多达 20 个指标,请将 --metric-data 选项添加到同一命名空间下的一个 PutMetricData 操作中,然后运行 API。
-
运行以下 get-metric-data AWS CLI 命令:
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**注意:**请将 //./metric-data-queries.json 替换您的 JSON 文件,将 2018-06-19T04:00:00Z 替换为您的开始时间,并将 2018-06-19T04:30:00Z 替换为您的结束时间。<br id=hardline_break/> 输出示例:
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" } ] }**注意:**在上述输出示例中,CloudWatch 使用指标数学计算了五个数据点,并按时间排序返回结果。由于 ReturnData 设置为 false,因此 m1 和 m2 未包含在响应中。
- 语言
- 中文 (简体)
