La API de cloudwatch para recuperar las métricas de TransitGatewayAttachment a través de Python no funciona

Oct 03 2020

Puedo recuperar las métricas de transitgateway bien usando el código a continuación, pero no funciona cuando lo hago para el adjunto tgw. Pero sé que hay estadísticas porque el panel del administrador de red muestra métricas para el tgw y todos los archivos adjuntos y grafica los valores.

El código a continuación funciona y obtengo una matriz de respuesta para el tgw, la región está configurada correctamente, etc. El adjunto tgw también está en la misma región, así que uso el mismo objeto de observación de la nube.

El rango de tiempo solicitado es idéntico para los archivos adjuntos tgw y tgw y ambos fueron creados al mismo tiempo, así que estoy bastante seguro de que no es un problema de rango de tiempo.

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(),
)

El código a continuación devuelve una matriz vacía, el código de retorno es 200 y no se queja de la sintaxis. el ID adjunto de tgw es correcto y en realidad está adjunto al tgw anterior. Sé que la compatibilidad con las métricas granulares de la nube adjunta de tgw ocurrió recientemente, por lo que tal vez aún no sea compatible a través de la 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(),
)

Los resultados se ven así, sin resultados de valores, donde el primer conjunto de código para tgw devuelve una matriz en valores. Probé diferentes Stat, Period, MetricName sin éxito.

{'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}}

¿Algo obvio que estoy haciendo mal? Gracias por adelantado.

Respuestas

Marcin Oct 03 2020 at 19:18

Su espacio de nombres es incorrecto:

 'Namespace': 'AWS/TransitGatewayAttachment',

debería ser:

 'Namespace': 'AWS/TransitGateway',

La razón es que TransitGatewayAttachmentes una dimensión dentro del AWS/TransitGatewayespacio de nombres como se explica en:

  • Métricas de CloudWatch para sus pasarelas de tránsito
js9999 Oct 04 2020 at 15:13

Esto finalmente funcionó y creo que me está dando las métricas de apego. Entonces, parece que tiene que dar tanto el tgw como el archivo adjunto en la dimensión, pero solo devuelve 1 matriz de resultados y, al mirarlo y compararlo cuando solo pido tgw, parece el valor correcto solo para el archivo adjunto.

Obtuve la pista al mirar la consola de administración de Cloudwatch y mirar el gráfico, la pestaña de origen mostró este fragmento a continuación y noté que especificaba el tgw y el archivo adjunto, aunque solo estaba graficando el archivo adjunto.

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

Código que funciona

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(),
)