Python 如何在CloudWatch中获取MetricDataResults中的所有维度值

Python 如何在CloudWatch中获取MetricDataResults中的所有维度值,python,amazon-web-services,boto3,amazon-cloudwatch,Python,Amazon Web Services,Boto3,Amazon Cloudwatch,我有一个如下所示的搜索表达式: stats = cloudwatch.get_metric_data( MetricDataQueries=[ { "Id":'m1', 'Expression': "SEARCH('{ABC/HEARTBEAT,Client_Email, Clinic_Id, NodeName} MetricName=\"PING_PONG\" Clinic_Id = 7667', 'Av

我有一个如下所示的搜索表达式:

stats = cloudwatch.get_metric_data(

        MetricDataQueries=[
            {
            "Id":'m1',
            'Expression': "SEARCH('{ABC/HEARTBEAT,Client_Email, Clinic_Id, NodeName} MetricName=\"PING_PONG\" Clinic_Id = 7667', 'Average', 864000)",
            'ReturnData': True,
        },

        ],
        StartTime=Util.utcnow() - timedelta(hours=2),
        EndTime=Util.utcnow(),
    )
它返回:

{
    "Messages": [],
    "ResponseMetadata": {
        "RetryAttempts": 0,
        "HTTPStatusCode": 200,
        "RequestId": "2f33cc09-61ff-40b0-9d28-72c4d949b2f0",
        "HTTPHeaders": {
            "x-amzn-requestid": "2f33cc09-61ff-40b0-9d28-72c4d949b2f0",
            "date": "Fri, 06 Dec 2019 22:47:25 GMT",
            "content-length": "928",
            "content-type": "text/xml"
        }
    },
    "MetricDataResults": [
        {
            "Timestamps": [
                "2019-12-06 20:47:00+00:00"
            ],
            "StatusCode": "Complete",
            "Values": [
                1
            ],
            "Id": "m1",
            "Label": "simran+test2@abc.com"
        },
        {
            "Timestamps": [
                "2019-12-06 20:47:00+00:00"
            ],
            "StatusCode": "Complete",
            "Values": [
                1
            ],
            "Id": "m1",
            "Label": "simran+test4@abc.com"
        }
    ]
}
我需要获取Client_Email的值,NodeName,用于Clinic_Id=7667的度量

目前,我得到客户电子邮件作为标签不知道为什么,但我需要客户电子邮件和节点名

更新:

u'MetricDataResults在我看来是这样的:

u'MetricDataResults': [{u'Timestamps': [], u'StatusCode': 'Complete', u'Values': [], u'Id': 'm1', u'Label': 'abc'}, {u'Timestamps': [], u'StatusCode': 'Complete', u'Values': [], u'Id': 'm1', u'Label': 'abc2'}]

为什么时间戳和值中有空数组?

标签是响应中唯一可以显示此值的位置。 我怀疑NodeName只有一个不同的值,这就是为什么标签只包含Client_电子邮件。如果您有更多的电子邮件和节点组合,它们将显示在标签中,以空格分隔

如果您对度量的值不感兴趣,而只对维度的值感兴趣,则可以使用list metrics API,例如:

response = cloudwatch.list_metrics(
    Namespace='ABC/HEARTBEAT',
    MetricName='PING_PONG',
    Dimensions=[
        {
            'Name': 'Clinic_Id',
            'Value': '7667'
        },
    ],
)

你说获取每个记录的所有维度的值是什么意思?@JohnRotenstein请检查update@JohnRotenstein请检查一下最新版本。I lookedup list_metrics.list_metrics似乎没有开始时间和结束时间。我需要开始时间和结束时间,以便在最后几个小时内检查它。我们这里有更好的吗?还有,有没有一种方法可以确定标签的顺序-比如尺寸值在标签下显示的顺序/也许对您来说最好的方法是两者都使用。首先列出指标,这将为您提供过去两周内发布数据的所有指标。然后对每个指标执行GetMetricData,查看哪些指标在过去几个小时内有数据。这些指标是如何公布的?ContributorInsights是最适合您的功能,这可能需要您更改发布度量的方式:我首先向SQS写信,它会触发一个lambda函数。当lambda被触发时,它会使用put_metric_数据写入cloudwatch。您需要使用嵌入式Metrics格式而不是PutMetricData才能使用Contributor Insights。客户端支持Python和NodeJ: