I'm trying to get the most recent data for CPU utilization for an instance (actually, several instances, but just one to start with), however the following call doesn't return any data:
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']}
)
Various posts on other sites indicate that checking the region is correct, checking that the period
(first argument) is a multiple of 60, and (if you don't have detailed monitoring enabled) is greater than or equal to 300. I've checked all these things and I'm still not getting any data.
I was also seeing no data returned when setting units to "Megabytes", while setting units to "Bytes" returned data.
Both are allowed in the API reference.
I found that
AWS/Billing
metrics "live" only in one region - us-east-1.Also, AWS CLI (
aws cloudwatch get-metric-statistics
) will errorr out if you try to grab more than 1440 data points from CloudWatch. If you encounter it set larger--period
.To avoid pitfalls you can use my EC2_Metrics_Plotter .
This is a daylight savings time / time zone issue!
You need to use UTC time when receiving statistics from Cloudwatch:
From some experimentation it also seems that specifying multiple
InstanceId
dimensions will result in data only for the last specified instance (at least if detailed monitoring is not enabled).