我正在尝试获取实例的CPU利用率的最新数据(实际上,有几个实例,但只有一个开始),但是以下调用不会返回任何数据:
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.我检查了所有这些东西,但我仍然没有得到任何数据。
答案 0 :(得分:24)
这是夏令时/时区问题!
从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
维度将导致仅针对最后指定实例的数据(至少如果未启用详细监视)。
答案 1 :(得分:1)
我还看到将设备设置为“兆字节”时没有返回数据,而将单位设置为“字节”则返回数据。
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
答案 2 :(得分:0)
我发现AWS/Billing
指标仅在一个地区“生活” - us-east-1 。
此外,如果您尝试从CloudWatch获取超过1440个数据点,AWS CLI(aws cloudwatch get-metric-statistics
)将会出错。
如果遇到它,请设置较大的--period
。
为避免陷阱,您可以使用我的EC2_Metrics_Plotter。