API cloudwatch для получения метрик TransitGatewayAttachment через python не работает
Я могу получить метрики транзитного шлюза в порядке, используя приведенный ниже код, но он не работает, когда я делаю это для вложения 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(),
)
Код ниже возвращает пустой массив, код возврата - 200 и не жалуется на синтаксис. Идентификатор прикрепления tgw правильный и фактически прикреплен к указанному выше tgw. Я знаю, что недавно появилась поддержка гранулярных облачных метрик tgw attach, поэтому, возможно, она еще не поддерживается через 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 возвращает массив в значениях. Я пробовал разные 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}}
Что-нибудь очевидное, что я делаю неправильно? Заранее спасибо.
2 ответа
Ваше пространство имен неверно:
'Namespace': 'AWS/TransitGatewayAttachment',
должен быть:
'Namespace': 'AWS/TransitGateway',
Причина в том, что
TransitGatewayAttachment
это измерение внутри
AWS/TransitGateway
пространство имен, как описано в:
Это, наконец, сработало, и я считаю, что дает мне показатели вложений. Кажется, вам нужно указать как tgw, так и вложение в измерении, но он возвращает только 1 массив результатов и, глядя на него и сравнивая, когда я только прошу tgw, похоже, правильное значение только для вложения.
Я получил подсказку, посмотрев на консоль управления cloudwatch и посмотрев на график, вкладка источника показала этот фрагмент ниже и заметила, что в нем указаны 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(),
)