Python 如何使用Boto获取实例的最新Cloudwatch度量数据?

Python 如何使用Boto获取实例的最新Cloudwatch度量数据?,python,amazon-web-services,boto,amazon-cloudwatch,Python,Amazon Web Services,Boto,Amazon Cloudwatch,我试图获取一个实例的CPU利用率的最新数据(实际上,有几个实例,但仅从一个实例开始),但是以下调用不会返回任何数据: cw = boto.cloudwatch.connect_to_region(Region) cw.get_metric_statistics( 300, datetime.datetime.now() - datetime.timedelta(seconds=600), datetime.datetime.now(), 'CPUUtilizati

我试图获取一个实例的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']}
)

其他站点上的各种帖子表明,检查区域是否正确,检查
期间(第一个参数)是否为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']}
   )
cw=boto.cloudwatch.connect_到_区域(区域)
cw.get_度量_统计(
300,
datetime.datetime.utcnow()-datetime.timedelta(秒=600),
datetime.datetime.utcnow(),
“CPUUtilization”,
“AWS/EC2”,
"一般",,
维度={'InstanceId':['i-11111111']}
)

从一些实验来看,指定多个
实例ID
维度似乎只会产生最后一个指定实例的数据(至少在未启用详细监控的情况下)。

当将单位设置为“兆字节”时,我也没有看到返回的数据,而将单位设置为“字节”返回的数据

这两个都允许进入


我发现,
AWS/Billing
metrics仅在一个区域(us-east-1)中“有效”

此外,如果您试图从cloudwatch获取超过1440个数据点,AWS CLI(
AWS cloudwatch获取度量统计信息
)将出错。 如果遇到此问题,请设置更大的
--句点


为了避免陷阱,你可以使用我的

到目前为止,这是我见过的最好的例子!维度必须是一个列表。这个答案需要更新。
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