显示多个实例的RDS指标

时间:2014-02-26 00:11:50

标签: python amazon-web-services boto amazon-rds

我想一次使用Boto为多个数据库提取RDS Cloudwatch指标。

到目前为止,我只能使用这样的方法一次只获取一个实例的指标:

botoRDS = boto.connect_cloudwatch(aws_access_key_id=Key, aws_secret_access_key=OtherKey)

instanceStats = botoRDS.get_metric_statistics(period=60, 
                start_time=self.startTime,
                end_time=self.endTime, 
                namespace="AWS/RDS", 
                metric_name='CPUUtilization', 
                statistics=["Average"],
                dimensions={'DBInstanceIdentifier':['DB1','DB2']})

这就是我得到的:

[
{
    u'Timestamp': datetime.datetime(2034,1,14,21,2),
    u'Average': 45.1,
    u'Unit': u'Percent'
}]

我希望能够返回的是数据库的平均值。像这样:

[
{
    u'Timestamp': datetime.datetime(2034,1,14,21,2),
    u'DBInstanceID':'DB1',
    u'Average': 33.02,
    u'Unit': u'Percent'
},
{
   u'Timestamp': datetime.datetime(2034,1,14,21,2),
   u'DBInstanceID':'DB2',
    u'Average': 45.1,
    u'Unit': u'Percent'
}

是否可以形成指定的维度以获得这样的结果。我真的不想为每个数据库提取数据。

2 个答案:

答案 0 :(得分:2)

我认为没有办法做你要问的事。您可以指定单个DBInstanceIndentifier作为维度并获取该DBInstance的特定数据,或者您可以指定多个DBInstanceIdentifiers并获取跨这些维度汇总的指标数据,但我认为没有任何方法可以请求单个API调用中的多个单独维度。我认为你必须为你感兴趣的每个特定维度打电话。

答案 1 :(得分:0)

对于Boto3,“尺寸”需求的工作方式如下:

response = cloudwatch.get_metric_data(
    MetricDataQueries=[
        {
            'Id': 'cpu_1',
            'MetricStat': {
            'Metric': {
                'Namespace': 'AWS/RDS',
                'MetricName': 'CPUUtilization',
                'Dimensions': [
                        {
                            "Name": "DBInstanceIdentifier",
                            "Value": "DB1"  
                        }]
            },
            'Period': period,
            'Stat': 'Maximum',
            }
        },
        {
            'Id': 'cpu_2',
            'MetricStat': {
            'Metric': {
                'Namespace': 'AWS/RDS',
                'MetricName': 'CPUUtilization',
                'Dimensions': [
                        {
                            "Name": "DBInstanceIdentifier",
                            "Value": "DB2"  
                        }]
            },
            'Period': period,
            'Stat': 'Maximum',
            }
        }
    ],
    StartTime=(datetime.now() - timedelta(seconds=300 * 3)).timestamp(),
    EndTime=datetime.now().timestamp()
)