【问题标题】:Boto unable to fetch ElasticSearch Cloudwatch metricsBoto 无法获取 ElasticSearch Cloudwatch 指标
【发布时间】:2017-01-21 02:50:59
【问题描述】:

我正在尝试使用 boto 获取 elasticsearch cloud-watch 指标,但无论我做什么,我都没有得到价值。下面是我的代码的 sn-p,例如,如果我用于 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,它可以在适当的维度值下正常工作。这是我可以编写的简单代码。我不确定这里有什么问题。谁能帮我解决这个问题?

我在这里做错了什么?

谢谢

【问题讨论】:

    标签: boto amazon-cloudwatch


    【解决方案1】:

    我找到了解决方案。

    要提取特定域名的 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']
    )
    

    【讨论】:

    • 让我检查一下.. 移动到 boto3 对我来说有点困难,因为我必须将所有代码移动到 boto3。
    • 它应该与 Boto 语法一样工作。让我用我认为适用于您的代码的内容更新我的答案。
    • Lifesaver.. 也适用于 CLI。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 2013-05-18
    • 2015-02-15
    • 2018-06-05
    • 1970-01-01
    • 2017-08-19
    • 2014-10-14
    相关资源
    最近更新 更多