0

该文档是在这里返回...采样率boto3 get_metric_statistics()

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'}] 

这里是我的问题

看看返回列表中的第一个字典。我猜,5的SampleCount是有意义的,因为我们的周期是60(秒),CloudWatch每5分钟提供一次'CPUUtilization'度量。但如果我改变Period,说3分钟(180),我仍然得到5的SampleCount(我期望1或2)。

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

它与3中间0值的数据点的平均这使得平均是(最小+最大+ 0 + 0 + 0)/ 5

我可以只得到的最少,最大通过添加它们和分2以获得更好的阅读效果 - 但我希望有人能够准确解释'Period'参数正在做什么。 正如我所说的,将其更改为360并不会改变SampleCount,但是当我将其更改为600时,突然我的SampleCount对于一个数据点为10.0(这确实有意义)。

回答

1

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

  1. 您可以一个一个地发布你的意见,并让做的CloudWatch聚集。
  2. 您可以自己汇总数据并发布统计集(SampleCount,Sum,Minimum,Maximum)。

如果使用方法1发布数据,您将获得期望的行为。但是,如果数据是使用方法2发布的,则受限于发布数据的详细程度。

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