cloudwatch API 无法通过 python 检索 TransitGatewayAttachment 指标

cloudwatch API to retrieve TransitGatewayAttachment metrics via python not working

我可以使用下面的代码很好地检索中转网关指标,但是当我为 tgw 附件执行此操作时它不起作用。但我知道有统计数据,因为网络管理器仪表板显示了 tgw 和所有附件的指标并绘制了值。

下面的代码有效,我得到了 tgw 的响应数组,区域设置正确等。tgw 附件也在同一区域,所以我使用相同的 cloudwatch 对象。

tgw 和 tgw 附件要求的时间范围是相同的,而且它们是同时创建的,所以我很确定这不是时间范围问题。

response = cloudwatch.get_metric_data(
MetricDataQueries=[
    {
        'Id': 'm1',
        'MetricStat': {
            'Metric': {
                'Namespace': 'AWS/TransitGateway',
                'MetricName': 'BytesIn',
                'Dimensions': [
                    {
                        'Name': 'TransitGateway',
                        'Value': 'tgw-0456c4c6fe596f58b',
                    },
                ]
            },
            'Period': 360,
            'Stat': 'Sum',  
            'Unit': 'None'
        },
        'ReturnData': True,
    },
],
StartTime=datetime(2020, 10, 1),
EndTime=datetime.now(),
)

下面的代码返回一个空数组,return 代码是 200 并且不抱怨语法。 tgw 附加 id 是正确的,实际上附加到上面的 tgw。我知道最近发生了对粒度 tgw 附加云指标的支持,所以它可能还不支持 API ?

response_attach = cloudwatch.get_metric_data(
MetricDataQueries=[
    {
        'Id': 'm1',
        'MetricStat': {
            'Metric': {
                'Namespace': 'AWS/TransitGatewayAttachment',
                'MetricName': 'BytesIn',
                'Dimensions': [
                    {
                        'Name': 'TransitGatewayAttachment',
                        'Value': 'tgw-attach-08ed0e1d3e5f488d8'
                    },
                ]
            },
            'Period': 360,
            'Stat': 'Sum',
            'Unit': 'None'
        },
        'ReturnData': True,
    },
],
StartTime=datetime(2020, 10, 1),
EndTime=datetime.now(),
)

结果看起来像这样,没有值结果,其中作为 tgw 的第一组代码 returns 值中的数组。我尝试了不同的 Stat、Period、MetricName 都无济于事。

{'MetricDataResults': [{'Id': 'm1', 'Label': 'BytesIn', 'Timestamps': [], 'Values': [], 'StatusCode': 'Complete'}], 'Messages': [], 'ResponseMetadata': {'RequestId': '495f97d5-5862-49f2-b8d0-91346606c88a', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': '495f97d5-5862-49f2-b8d0-91346606c88a', 'content-type': 'text/xml', 'content-length': '490', 'date': 'Sat, 03 Oct 2020 10:57:38 GMT'}, 'RetryAttempts': 0}}

有什么明显的我做错了吗?提前致谢。

您的命名空间不正确:

 'Namespace': 'AWS/TransitGatewayAttachment',

应该是:

 'Namespace': 'AWS/TransitGateway',

原因是 TransitGatewayAttachmentAWS/TransitGateway 命名空间中的一个维度,如以下所述:

这终于奏效了,我相信它给了我附件指标。因此,似乎您必须在维度中同时提供 tgw 和附件,但它只有 returns 1 个结果数组并查看它并在我只要求 tgw 时进行比较,它看起来就像附件的正确值。

我通过查看 cloudwatch mgmt 控制台和图表得到了线索,源选项卡在下面显示了这个片段并注意到它指定了 tgw 和附件,尽管它只是绘制附件。

{
    "view": "timeSeries",
    "stacked": false,
    "metrics": [
        [ "AWS/TransitGateway", "BytesIn", "TransitGatewayAttachment", "tgw-attach-08ed0e1d3e5f488d8", "TransitGateway", "tgw-0456c4c6fe596f58b" ]
    ],
    "region": "us-east-1"
}

有效的代码

response = cloudwatch.get_metric_data(
MetricDataQueries=[
    {
        'Id': 'm1',
        'MetricStat': {
            'Metric': {
                'Namespace': 'AWS/TransitGateway',
                'MetricName': 'BytesIn',
                'Dimensions': [
                    {
                        'Name': 'TransitGateway',
                        'Value': 'tgw-0456c4c6fe596f58b',
                    },
                    {
                        'Name': 'TransitGatewayAttachment',
                        'Value': 'tgw-attach-08ed0e1d3e5f488d8'
                    },
                ]
            },
            'Period': 360, # 3600,
            'Stat': 'Sum',   # 'SampleCount',
            'Unit': 'None'
        },
        'ReturnData': True,
    },
],
StartTime=datetime(2020, 10, 1),
EndTime=datetime.now(),
)