我应该使用 GetMetricData 还是 GetMetricStatistics 来检索 CloudWatch 指标?

3 分钟阅读
0

我想从 Amazon CloudWatch 指标中检索数据点。我应该使用哪个 API,GetMetricData 还是 GetMetricStatistics?

简述

最佳实践是使用 GetMetricData API 而不是 GetMetricStatistics,原因是使用 GetMetricData 可以更快地大规模检索数据。GetMetricData 还支持指标数学,它会返回有序的分页结果。此功能差异会反映在每项服务的成本上。GetMetricStatistics 包含在 CloudWatch 的免费套餐中,最多可发起 100 万个 API 请求,而 GetMetricData 没有。请参阅下表和 CloudWatch 定价表,了解哪个 API 更适合您。

每次调用的指标数每次调用的数据点数支持指标数学返回有序的分页结果计入免费套餐****限制
GetMetricData500100,800是*
GetMetricStatistics11,440

*要返回下一组数据点,必须使用响应中提供的 NextToken (--next-token) 对数据进行迭代。

GetMetricData API 的服务配额为:

  • 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)创建输入参数。输入参数有两个自定义指标(InvocationsErrors)和一个通过其他两个指标的指标数学计算得出的指标(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,响应中未包含 m1m2

$ 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"
        }
    ]
}

相关信息

get-metric-data AWS CLI 参考

get-metric-statistics AWS CLI 参考

AWS 官方
AWS 官方已更新 2 年前