【问题标题】:I want to get metrics of multiple ec2s at once from aws cloudwatch我想一次从 aws cloudwatch 获取多个 ec2 的指标
【发布时间】:2023-02-12 14:56:45
【问题描述】:

aws cloudwatch 可以对单个 ec2 使用 get_metric_data 和 get_metric_statistics。

但是,不可能同时从多个 ec2 中获取信息。

如何通过一次 api 调用获得多个 ec2 指标?

指标应由 ec2 分隔。

例子)

  1. 获取单个ec2数据(成功)
    import boto3
    from datetime import datetime, timedelta
    from dateutil.tz import tzutc
    session = boto3.Session(profile_name="XXXXXXXXXX")
    client = session.client('cloudwatch', 'ap-northeast-2')
    response = client.get_metric_data(
        MetricDataQueries=[
            {
                'Id': 'cpuUtilization',
                'MetricStat': {
                    'Metric': {
                        'Namespace': 'AWS/EC2',
                        'MetricName': 'CPUUtilization',
                        'Dimensions': [
                            {
                                'Name': 'InstanceId',
                                'Value': 'i-XXXXXXXXX'
                            },
                        ]
                    },
                    'Period': 60,
                    'Stat': 'Average'
                }
            }
        ],
        StartTime=datetime(2022, 7, 7, 0, 0, 0, tzinfo=tzutc()),
        EndTime=datetime(2022, 7, 7, 23, 59, 59, tzinfo=tzutc())
    )
    print(response)
    
    RESULT:
    {'MetricDataResults': [{'Id': 'cpuUtilization',
    
    1. 获取单个 ec2 数据(失败)
    import boto3
    from datetime import datetime, timedelta
    from dateutil.tz import tzutc
    session = boto3.Session(profile_name="XXXXXXXXXX")
    client = session.client('cloudwatch', 'ap-northeast-2')
    response = client.get_metric_data(
        MetricDataQueries=[
            {
                'Id': 'cpuUtilization',
                'MetricStat': {
                    'Metric': {
                        'Namespace': 'AWS/EC2',
                        'MetricName': 'CPUUtilization',
                        'Dimensions': [
                            {
                                'Name': 'InstanceId',
                                'Value': 'i-XXXXXXXXX'
                            },
                        ]
                    },
                    'Period': 60,
                    'Stat': 'Average'
                }
            },
            {
                'Id': 'cpuUtilization',
                'MetricStat': {
                    'Metric': {
                        'Namespace': 'AWS/EC2',
                        'MetricName': 'CPUUtilization',
                        'Dimensions': [
                            {
                                'Name': 'InstanceId',
                                'Value': 'i-XXXXXXXXX'
                            },
                        ]
                    },
                    'Period': 60,
                    'Stat': 'Average'
                }
            }
        ],
        StartTime=datetime(2022, 7, 7, 0, 0, 0, tzinfo=tzutc()),
        EndTime=datetime(2022, 7, 7, 23, 59, 59, tzinfo=tzutc())
    )
    print(response)
    
    RESULT:
    botocore.exceptions.ClientError: An error occurred (ValidationError) when calling the GetMetricData operation: The values for parameter id in MetricDataQueries are not unique.
    

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-cloudwatch metrics


    【解决方案1】:

    AWS-SDK Cloudwatch MaxQueryTimeRangeExceed

    我能够在上面的链接中找到我正在寻找的答案。但它有3小时的限制。如果您有其他好的方法,请分享。

    const AWS = require("aws-sdk");
    AWS.config.loadFromPath("./config.json");
    
    var cloudwatch = new AWS.CloudWatch({apiVersion: "2010-08-01"});
    
    var params = {
    
        StartTime: new Date('june 06, 2022 17:30'),
        EndTime: new Date('june 06, 2022 18:00'), 
        MetricDataQueries: [ 
          {
            Id: 'q1', 
            Expression: "SELECT AVG(CPUUtilization) FROM SCHEMA("AWS/EC2", InstanceId) WHERE InstanceId = 'i-**********'",
            Period: '600'
          },
        ],
        
      };
      cloudwatch.getMetricData(params, function(err, data) {
        if (err) console.log(err, err.stack); 
        else     console.log(data);           
      });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-18
      • 2017-08-19
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      相关资源
      最近更新 更多