0

文档在这里...

http://boto3.readthedocs.io/en/latest/reference/services/cloudwatch.html#CloudWatch.Client.get_metric_statistics

这是我们的电话

response = cloudwatch.get_metric_statistics(
    Namespace='AWS/EC2', 
    MetricName='CPUUtilization', #reported every 5 minutes

    Dimensions=[
        {
            'Name': 'AutoScalingGroupName', 
            'Value': 'Celery-AutoScalingGroup' 
        },
    ],
    StartTime=now - datetime.timedelta(minutes=12),
    EndTime=now,
    Period=60, #I can't figure out what exactly changing this is doing
    Statistics=['Average','SampleCount','Sum','Minimum','Maximum'],
)

这是我们的回应

>>> response['Datapoints']
[ {u'SampleCount': 5.0, u'Timestamp': datetime.datetime(2017, 8, 25, 12, 46, tzinfo=tzutc()), u'Average': 0.05,  u'Maximum': 0.17, u'Minimum': 0.0, u'Sum': 0.25, u'Unit': 'Percent'},
  {u'SampleCount': 5.0, u'Timestamp': datetime.datetime(2017, 8, 25, 12, 51, tzinfo=tzutc()), u'Average': 0.034, u'Maximum': 0.08, u'Minimum': 0.0, u'Sum': 0.17, u'Unit': 'Percent'}
]

这是我的问题

查看返回列表中的第一个字典。我猜,SampleCount 为 5 是有道理的,因为我们的 Period 是 60(秒),而 CloudWatch 每 5 分钟提供一次“CPUUtilization”指标。

但是,如果我将 Period 更改为 3 分钟(180),我仍然会得到 5 的 SampleCount(我希望为 1 或 2)。

这是一个问题,因为我想要平均值,但我认为它平均 5 个数据点,其中只有 2 个是有效的(开始和结束,对应于最小值和最大值,即某个时间 t 的 CloudWatch 指标和在时间 t+5 分钟下一次报告该指标)。

它使用 3 个中间 0 值数据点对此进行平均,因此平均值为 (Minimum+Maximum+0+0+0)/5

我可以得到最小值,最大值将它们相加并除以 2 以获得更好的读数 - 但我希望有人可以准确地解释“期间”参数的作用。就像我说的,将其更改为 360 并不会更改 SampleCount,但是当我将其更改为 600 时,突然我的 SampleCount 对于一个数据点为 10.0(这确实有意义)。

4

1 回答 1

1

可以通过两种不同的方式将数据发布到 CloudWatch:

  1. 您可以一一发布您的观察结果并让 CloudWatch 进行聚合。
  2. 您可以自己聚合数据并发布统计集(SampleCount、Sum、Minimum、Maximum)。

如果使用方法 1 发布数据,您将获得预期的行为。但是如果数据是使用方法二发布的,你会受到发布数据粒度的限制。

如果 ec2 将数据聚合 5 分钟,然后发布统计集,那么在 3 分钟级别请求数据是没有意义的。但是,如果您请求的数据周期是发布周期数据的倍数(例如 10 分钟),则可以计算统计数据,CloudWatch 就是这样做的。

于 2017-08-26T09:49:29.817 回答