インスタンスのCPU使用率に関する最新のデータ(実際には複数のインスタンスですが、最初は1つだけです)を取得しようとしていますが、次の呼び出しではデータが返されません。
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']}
)
他のサイトのさまざまな投稿は、地域のチェックが正しいこと、period
(最初の引数)が60の倍数であること、および(詳細な監視が有効になっていない場合)が以上であることを示しています。 300.これらすべてをチェックしましたが、まだデータを取得していません。
これは夏時間/タイムゾーンの問題です!
Cloudwatchから統計を受信するときは、UTC時間を使用する必要があります。
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']}
)
いくつかの実験から、複数のInstanceId
ディメンションを指定すると、最後に指定されたインスタンスのデータのみが生成されるようです(少なくとも詳細な監視が有効になっていない場合)。
また、単位を「メガバイト」に設定するとデータが返されませんでしたが、単位を「バイト」に設定するとデータが返されました。
APIリファレンス では両方とも許可されています。
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
見つけた AWS/Billing
メトリックは1つのリージョンでのみ「ライブ」-us-east-1。
また、AWS CLI(aws cloudwatch get-metric-statistics
)CloudWatchから1440を超えるデータポイントを取得しようとすると、エラーが発生します。遭遇した場合は大きく設定してください--period
。
落とし穴を避けるために、my EC2_Metrics_Plotter を使用できます。