13

我正在尝试获取一个实例的 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。我检查过所有这些事情,我仍然没有得到任何数据。

4

3 回答 3

28

这是夏令时/时区问题!

从 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将导致仅针对最后一个指定实例的数据(至少在未启用详细监控的情况下)。

于 2013-05-05T11:00:48.020 回答
1

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

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
于 2014-04-30T22:04:43.870 回答
0

我发现AWS/Billing指标仅在一个地区“有效” - us-east-1

aws cloudwatch get-metric-statistics此外,如果您尝试从 CloudWatch 获取超过 1440 个数据点,AWS CLI ( ) 将出错。如果遇到它设置更大--period

为避免陷阱,您可以使用我的EC2_Metrics_Plotter

于 2016-04-05T01:44:04.557 回答