文档在这里......
这是我们的电话
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是有意义的,因为我们的周期为60(秒),CloudWatch每5分钟提供一次“CPUUtilization”指标。
但如果我改变句号,说3分钟(180),我仍然得到一个5的SampleCount(我期望1或2)。
这是一个问题,因为我想要平均值,但我认为它平均有5个数据点,其中只有2个是有效的(开头和结尾,对应于Min和Max,这是CloudWatch指标在某个时间t和在时间t + 5分钟的下一次报告。
平均为3个中间0值数据点,使得平均值为(最小值+最大值+ 0 + 0 + 0)/ 5
我可以得到最小值,最大值加上它们并除以2以获得更好的读数 - 但我希望有人能够准确地解释'周期'参数正在做什么。 就像我说的那样,将它更改为360并没有改变SampleCount,但当我将其更改为600时,我的SampleCount突然变为10.0(一个数据点)(这确实有意义)。
答案 0 :(得分:1)
可以通过两种不同的方式将数据发布到CloudWatch:
如果使用方法1发布数据,您将获得您期望的行为。但是,如果使用方法2发布数据,则会受到已发布数据的粒度限制。
如果ec2将数据聚合5分钟然后发布统计集,那么在3分钟级别请求数据是没有意义的。但是,如果您请求的数据周期为数据周期的倍数(例如10分钟),则可以计算统计数据,CloudWatch会执行此操作。