2013-05-05 5 views
12

Próbuję uzyskać najnowsze dane dotyczące wykorzystania procesora dla instancji (faktycznie, kilku przypadkach, ale tylko jeden na początek), jednak następujące wezwanie nie zwraca żadnych danych:Jak uzyskać najnowsze dane metryki Cloudwatch dla instancji za pomocą Boto?

cw = boto.cloudwatch.connect_to_region(Region) 
cw.get_metric_statistics(
    300, 
    datetime.datetime.now() - datetime.timedelta(seconds=600), 
    datetime.datetime.now(), 
    'CPUUtilization', 
    'AWS/EC2', 
    'Average', 
    dimensions={'InstanceId':['i-11111111']} 
    # for stats across multiple instances: 
    # dimensions={'InstanceId':['i-11111111', 'i-22222222', 'i-33333333']} 
) 

Różne posty na innych stronach wskazują, że sprawdzenie regionu jest poprawne, sprawdzając, czy period (pierwszy argument) jest wielokrotnością 60, a (jeśli nie masz włączonego szczegółowego monitorowania) jest większy lub równy 300. sprawdziłem wszystkie te rzeczy i nadal nie otrzymuję żadnych danych.

Odpowiedz

22

To jest czas letni/czas lokalny!

trzeba użyć czasu UTC podczas odbierania danych statystycznych z Cloudwatch:

cw = boto.cloudwatch.connect_to_region(Region) 
    cw.get_metric_statistics(
     300, 
     datetime.datetime.utcnow() - datetime.timedelta(seconds=600), 
     datetime.datetime.utcnow(), 
     'CPUUtilization', 
     'AWS/EC2', 
     'Average', 
     dimensions={'InstanceId':['i-11111111']} 
    ) 

Od pewnego eksperymentu wydaje się również, że określenie wielokrotność InstanceId wymiary spowodują danych wyłącznie na ostatni podany przykład (przynajmniej jeśli Szczegółowy monitoring nie jest włączone).

+1

Najlepszy przykład tego, co widziałem do tej pory! – Eagle

1

Nie widziałem również danych zwróconych podczas ustawiania jednostek na "Megabajtów", podczas gdy ustawienie jednostek na "Bajty" zwróciło dane.

Oba są dozwolone w API reference.

data = conn.get_metric_statistics(period=60,start_time=start,end_time=end,metric_name="NetworkOut",namespace="AWS/EC2",statistics="Average",unit="Megabytes",dimensions={'InstanceId':'XXXXXX'}) 
print "data length: %d"%len(data) 
    # data length: 0 


data = conn.get_metric_statistics(period=60,start_time=start,end_time=end,metric_name="NetworkOut",namespace="AWS/EC2",statistics="Average",unit="Bytes",dimensions={'InstanceId':'XXXXXX'}) 
print "data length: %d"%len(data) 
    # data length: 59 
0

stwierdziliśmy, że AWS/Billing metryki "na żywo" tylko w jednym regionie - us-wschód-1.

Również AWS CLI (aws cloudwatch get-metric-statistics) ulegnie błędowi, jeśli spróbujesz pobrać więcej niż 1440 punktów danych z CloudWatch. Jeśli napotkasz to ustaw większe --period.

Aby uniknąć pułapek, możesz użyć mojego EC2_Metrics_Plotter.

Powiązane problemy