2016-09-13 9 views
1

Я пытаюсь получить метрики cloud-watch elasticsearch, используя boto, но что бы я ни делал, я не получаю значение. Ниже приведен фрагмент моего кода, такой же код работает, например, если я использую метрики RDS.Boto не удалось получить ElasticSearch Показатели Cloudwatch

import datetime 
import boto.ec2.cloudwatch 

end = datetime.datetime.utcnow() 
start = end - datetime.timedelta(minutes=5) 

metric="CPUUtilization" 

region = boto.regioninfo.RegionInfo(
    name='ap-southeast-1', 
    endpoint='monitoring.ap-southeast-1.amazonaws.com') 

conn = boto.ec2.cloudwatch.CloudWatchConnection(region=region) 

data = conn.get_metric_statistics(60, start, end, metric, "AWS/ES", "Average", {"DomainName": "My-es-name"}) 

данные печати

[]

Однако если изменить пространство имен RDS работает нормально при правильном значении измерения. Это простой код, который я могу написать. Я не уверен, что здесь не так. Может ли кто-нибудь помочь мне разобраться в этом?

Что я здесь делаю неправильно?

Благодаря

ответ

2

У меня была точно такая же проблема, и потерял несколько часов, пытаясь понять это, но мне удалось найти решение.

Чтобы вывести показатели Elasticsearch для определенного доменного имени, вы также должны указать свой ClientId в измерениях.

Мои примеры, приведенные ниже в Boto3, но для его выполнения с кодом (boto2), я считаю, нужно только изменить размеры, как следовать, предполагая ваш синтаксис был первоначально право .:

data = conn.get_metric_statistics(60, start, end, metric, "AWS/ES", "Average", {"ClientId":"My-client-id", "DomainName": "My-es-name"}) 

Try код ниже (boto3). Это сработало для меня.

import boto3 
from datetime import datetime, timedelta 

cloudwatch = boto3.resource('cloudwatch', region_name='ap-southeast-1') 
cpu = cloudwatch.Metric('AWS/ES', 'CPUUtilization') 

cpu_usage = cpu.get_statistics(
    Dimensions=[ 
     {'Name': 'ClientId', 'Value': 'YOUR-CLIENT-ID'}, 
     {'Name': 'DomainName', 'Value': 'YOUR-DOMAIN-NAME'} 
    ], 
    StartTime=(datetime.utcnow() - timedelta(minutes=5)).isoformat(), 
    EndTime=datetime.utcnow().isoformat(), 
    Period=60, 
    Statistics=['Average'] 
) 

Если вы предпочитаете использовать клиент, используйте следующую вместо:

client = boto3.client('cloudwatch', region_name='ap-southeast-1') 
response = client.get_metric_statistics(
    Namespace='AWS/ES', 
    MetricName='CPUUtilization', 
    Dimensions=[ 
     {'Name': 'ClientId', 'Value': 'YOUR-CLIENT-ID'}, 
     {'Name': 'DomainName', 'Value': 'YOUR-DOMAIN-NAME'} 
    ], 
    StartTime=(datetime.utcnow() - timedelta(minutes=5)).isoformat(), 
    EndTime=datetime.utcnow().isoformat(), 
    Period=60, 
    Statistics=['Average'] 
) 

Пожалуйста, примите мой ответ, если он работает :-)

+0

Позвольте мне проверить .. переезд в boto3 является немного мне трудно, так как мне нужно переместить весь мой код на boto3. – PratapSingh

+0

Он должен работать точно так же с синтаксисом Boto. Позвольте мне обновить свой ответ тем, что, как я думаю, будет работать с вашим кодом. –

+1

Lifesaver .. также применяется для CLI. –