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可以執行的統計數據。