Как получить последние данные метрики Cloudwatch для экземпляра с помощью Boto?

Я пытаюсь получить самые последние данные для загрузки процессора для экземпляра (фактически, несколько экземпляров, но только один для начала), однако следующий вызов не возвращает никаких данных:

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. Я проверил все эти вещи, и я до сих пор не получаю никаких данных.

Ответ 1

Это проблема с летним временем/часовым поясом!

Вам нужно использовать время UTC при получении статистики от Cloudwatch:

    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 приведет к данным только для последнего указанного экземпляра (по крайней мере, если подробный мониторинг не включен).

Ответ 2

Я также не видел никаких данных, возвращаемых при установке единиц в "мегабайты", при установке единиц на "Байты" возвращаемые данные.

Оба разрешены в ссылке 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

Ответ 3

Я обнаружил, что AWS/Billing метрики "живут" только в одном регионе - us-east-1.

Кроме того, AWS CLI (aws cloudwatch get-metric-statistics) будет ошибкой, если вы попытаетесь захватить более 1440 точек данных из CloudWatch. Если вы столкнулись с этим, установите более крупный --period.

Чтобы избежать ошибок, вы можете использовать EC2_Metrics_Plotter.