我想一次使用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'
}
是否可以形成指定的维度以获得这样的结果。我真的不想为每个数据库提取数据。
答案 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()
)