0

出于某些警报和监视目的,我正在尝试获取 RDS cloudwatch 指标。大约有 50 个 RDS 实例,并希望在一次 API 调用中获取所有这些实例的指标(我使用的是 boto3)。这是我的代码:

response = cloudwatch_client.get_metric_data(
    MetricDataQueries=[
        {
            'Id': 'fetching_data_for_something',
            'MetricStat': {
                'Metric': {
                    'Namespace': 'AWS/RDS',
                    'MetricName': 'FreeStorageSpace',
                    'Dimensions': [
                        {
                            'Name': 'DBInstanceIdentifier',
                            'Value': '*'
                        },
                    ]
                },
                'Period': 300,
                'Stat': 'Average'
            },
            'ReturnData': True
        },
    ],
    StartTime=datetime(2019, 6, 11,13,0,0),
    EndTime=datetime(2019, 6, 11,13,20,00),
    ScanBy='TimestampDescending',
    MaxDatapoints=123
) 

但这会返回一个空结果,但是当我搜索特定的数据库实例时,它会返回结果。这是有效的:

'Dimensions': [
{
    'Name': 'DBInstanceIdentifier',
    'Value': 'name_of_db'
},
]

但是,这不是:

'Dimensions': [
{
    'Name': 'DBInstanceIdentifier',
    'Value': '*'
},
]

有没有办法做到这一点?一次获取所有数据库的指标?

4

1 回答 1

5

您可以使用 SEARCH 函数使用度量数学表达式来执行此操作。有关更多详细信息,请参见此处:https ://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-search-expressions.html

您的表达式将如下所示:

SEARCH('{AWS/RDS,DBInstanceIdentifier} MetricName="FreeStorageSpace"', 'Average', 300)

完整的 boto3 示例:

response = cloudwatch_client.get_metric_data(
    MetricDataQueries=[
        {
            'Id': 'fetching_data_for_something',
            'Expression': "SEARCH('{AWS/RDS,DBInstanceIdentifier} MetricName=\"FreeStorageSpace\"', 'Average', 300)",
            'ReturnData': True
        },
    ],
    StartTime=datetime(2019, 6, 11,13,0,0),
    EndTime=datetime(2019, 6, 11,13,20,0,0),
    ScanBy='TimestampDescending',
    MaxDatapoints=123
) 
于 2019-06-14T11:27:57.353 回答