Boto无法获取ElasticSearch Cloudwatch指标

时间:2016-09-13 13:17:00

标签: boto amazon-cloudwatch

我正在尝试使用boto获得elasticsearch cloud-watch指标,但无论我做什么,我都没有得到价值。下面是我的代码片段,例如,如果我使用RDS指标,则相同的代码可用。

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,它可以正常使用适当的维度值。这是一个我可以编写的简单代码。我不确定这里有什么问题。任何人都可以帮我解决这个问题吗?

我在这里做错了什么?

由于

1 个答案:

答案 0 :(得分:3)

我找到了解决方案。

要为特定域名提取Elasticsearch指标,您还需要在维度中指明您的ClientId。

下面我的例子是在Boto3中,但是为了用你的代码(boto2)执行它,我相信你只需修改尺寸如下,假设你的语法最初是正确的:

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

尝试以下代码(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']
)