应对 CloudWatch 指标使用 GetMetricData 还是 GetMetricStatistics?

上次更新时间:2020 年 1 月 30 日

我想要从 Amazon CloudWatch 指标检索数据点。应使用哪个 API:GetMetricData 还是 GetMetricStatistics

简短描述

最好使用 GetMetricData API 而不是 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 中执行自己的 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.    查看输出。在本示例中,使用指标数学计算出了五个数据点并作为按时间排序的结果返回。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": [
        {
            "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"
        }
    ]
}

这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?