2013-05-05 17 views
12

sto cercando di ottenere i dati più recenti per l'utilizzo della CPU per un'istanza (in realtà, molti casi, ma solo per cominciare), tuttavia la seguente chiamata non restituisce alcun dato:Come posso ottenere i dati della metrica di Cloudwatch più recenti per un'istanza utilizzando 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']} 
) 

Diversi post su altri siti indicano che il controllo dell'area è corretto, controllando che il period (primo argomento) sia un multiplo di 60 e (se non si dispone di monitoraggio dettagliato abilitato) è maggiore o uguale a 300. Ho controllato tutte queste cose e non sto ancora ottenendo alcun dato.

risposta

22

Questo è un problema di ora legale/fuso orario!

È necessario utilizzare il tempo UTC quando si ricevono le statistiche da 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']} 
    ) 

Da qualche sperimentazione sembra anche che specificano più InstanceId dimensioni si tradurrà in dati solo per l'ultima istanza specificata (monitoraggio almeno se dettagliato non è abilitato).

+1

Il miglior esempio di questo l'ho visto finora! – Eagle

1

Stavo anche vedendo nessun dato restituito quando si impostava le unità su "Megabyte", mentre l'impostazione delle unità su "Byte" restituiva i dati.

Entrambi sono consentiti nello 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

ho scoperto che AWS/Billing metriche "dal vivo" solo in una regione - noi-est-1.

Inoltre, AWS CLI (aws cloudwatch get-metric-statistics) verrà erroneamente fuori se si tenta di afferrare più di 1440 punti dati da CloudWatch. Se lo si incontra, impostare --period più grande.

Per evitare le insidie, è possibile utilizzare il numero EC2_Metrics_Plotter.