跳至内容

对于 CloudWatch 指标,使用 GetMetricData 还是 GetMetricStatistics 更好?

3 分钟阅读
0

我想知道使用 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 中完成以下步骤:

  1. 为您的 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/> 在上述操作中,输入参数有自定义指标 InvocationsErrors。CloudWatch 通过其他两个指标的指标数学来计算 ErrorRate 指标。

  2. 使用 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。

  3. 运行以下 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,因此 m1m2 未包含在响应中。

AWS 官方已更新 6 个月前