Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Интенсивное использование API метрик может привести к регулированию или проблемам с производительностью. Перенос в metrics:getBatch API позволяет запрашивать несколько ресурсов в одном запросе REST. Два API используют общий набор параметров запроса и форматов ответа, которые упрощают миграцию.
В этой статье приводятся рекомендации по преобразованию существующего metrics:getBatch вызова API метрик в вызов API. Дополнительные сведения о регулировании см. в статье о том, как Azure Resource Manager регулирует запросы.
Формат запроса
Запрос metrics:getBatch API имеет следующий формат:
POST /subscriptions/<subscriptionId>/metrics:getBatch?metricNamespace=<resource type namespace>&api-version=2023-10-01
Host: <region>.metrics.monitor.azure.com
Content-Type: application/json
Authorization: Bearer <token>
{
"resourceids":[<comma separated list of resource IDs>]
}
Пример:
POST /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/metrics:getBatch?metricNamespace=microsoft.compute/virtualMachines&api-version=2023-10-01
Host: eastus.metrics.monitor.azure.com
Content-Type: application/json
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhb...TaXzf6tmC4jhog
{
"resourceids":["/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg-vms-01/providers/Microsoft.Compute/virtualMachines/vmss-001_41df4bb9",
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/rg-vms-02/providers/Microsoft.Compute/virtualMachines/vmss-001_c1187e2f"]
}
Ограничения пакетной обработки
Рассмотрим следующие ограничения, в которых ресурсы можно пакетировать вместе при выборе metrics:getBatch правильности api для вашего сценария.
- Все ресурсы в пакете должны находиться в одной подписке.
- Все ресурсы в пакете должны находиться в одном регионе Azure.
- Все ресурсы в пакете должны быть одинаковыми типами ресурсов.
Чтобы определить группы ресурсов, которые соответствуют этим критериям, выполните следующий запрос Azure Resource Graph с помощью Обозреватель Azure Resource Graph или API запросов ресурсов Azure Resource Manager.
resources
| project id, subscriptionId, ['type'], location
| order by subscriptionId, ['type'], location
Шаги преобразования запросов
Чтобы преобразовать вызов API существующих метрик в metric:getBatch вызов API, выполните следующие действия.
Предположим, что для запроса метрик используется следующий вызов API:
GET https://management.azure.com/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sample-test/providers/Microsoft.Storage/storageAccounts/testaccount/providers/microsoft.Insights/metrics?timespan=2023-04-20T12:00:00.000Z/2023-04-22T12:00:00.000Z&interval=PT6H&metricNamespace=microsoft.storage%2Fstorageaccounts&metricnames=Ingress,Egress&aggregation=total,average,minimum,maximum&top=10&orderby=total desc&$filter=ApiName eq '*'&api-version=2019-07-01
Измените имя узла.
Замените
management.azure.comна региональную конечную точку для плоскости данных метрик Azure Monitor, используя следующий формат:<region>.metrics.monitor.azure.comгдеregionнаходится регион ресурсов, для которых запрашивается метрика. Например, если ресурсы находятся в westus2, имя узла равноwestus2.metrics.monitor.azure.com.Измените имя и путь API.
metrics:getBatchAPI — это API уровня подписки POST. Ресурсы, для которых запрашиваются метрики, указываются в тексте запроса, а не в пути URL-адреса.Измените путь URL-адреса следующим образом:
от
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sample-test/providers/Microsoft.Storage/storageAccounts/testaccount/providers/microsoft.Insights/metrics
на/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/metrics:getBatchДля
metricNamespaceтребуется параметр запросаmetrics:getBatch. Для стандартных метрик Azure имя пространства имен обычно является типом ресурса указанных ресурсов. Чтобы проверить используемое значение пространства имен, см. API пространств имен для метрик.Переключение с использования
timespanпараметра запроса на использованиеstarttimeиendtime. Например,?timespan=2023-04-20T12:00:00.000Z/2023-04-22T12:00:00.000Zпреобразуется в?startime=2023-04-20T12:00:00.000Z&endtime=2023-04-22T12:00:00.000Z.Обновите параметр запроса версии API следующим образом:
&api-version=2023-10-01Параметр запроса фильтра в API не имеет префикса
$. Измените параметр запроса на$filter=filter=.metrics:getBatchAPI — это вызов POST с текстом, который содержит разделенный запятыми список идентификаторов ресурсов в следующем формате:Пример:
{ "resourceids": [ // <comma separated list of resource ids> ] }{ "resourceids": [ "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sample-test/providers/Microsoft.Storage/storageAccounts/testaccount" ] }В каждом вызове можно указать до 50 уникальных идентификаторов ресурсов. Каждый ресурс должен принадлежать к одной подписке, региону и иметь один и тот же тип ресурса.
Это важно
- Свойство
resourceidsобъекта в основной части должно быть в нижнем регистре. - Убедитесь, что в списке массивов отсутствуют конечные запятые.
Преобразованный пакетный запрос
В следующем примере показан преобразованный пакетный запрос.
POST https://westus2.metrics.monitor.azure.com/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/metrics:getBatch?starttime=2023-04-20T12:00:00.000Z&endtime=2023-04-22T12:00:00.000Z&interval=PT6H&metricNamespace=microsoft.storage%2Fstorageaccounts&metricnames=Ingress,Egress&aggregation=total,average,minimum,maximum&top=10&orderby=total desc&filter=ApiName eq '*'&api-version=2023-10-01
{
"resourceids": [
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sample-test/providers/Microsoft.Storage/storageAccounts/testaccount",
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sample2-test-rg/providers/Microsoft.Storage/storageAccounts/eax252qtemplate",
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sample3/providers/Microsoft.Storage/storageAccounts/sample3diag",
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sample3/providers/Microsoft.Storage/storageAccounts/sample3prefile",
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sample3/providers/Microsoft.Storage/storageAccounts/sample3tipstorage",
"/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sample3backups/providers/Microsoft.Storage/storageAccounts/pod01account1"
]
}
Формат ответа
Формат metrics:getBatch ответа API инкапсулирует список ответов на вызовы отдельных метрик в следующем формате:
{
"values": [
// <One individual metrics response per requested resourceId>
]
}
Свойство resourceid было добавлено в список метрик каждого ресурса в ответе metrics:getBatch API.
Ниже показаны примеры форматов ответов.
{
"cost": 11516,
"startime": "2023-04-20T12:00:00Z",
"endtime": "2023-04-22T12:00:00Z",
"interval": "P1D",
"value": [
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sample-test/providers/Microsoft.Storage/storageAccounts/testaccount/providers/Microsoft.Insights/metrics/Ingress",
"type": "Microsoft.Insights/metrics",
"name": {
"value": "Ingress",
"localizedValue": "Ingress"
},
"displayDescription": "The amount of ingress data, in bytes. This number includes ingress from an external client into Azure Storage as well as ingress within Azure.",
"unit": "Bytes",
"timeseries": [
{
"metadatavalues": [
{
"name": {
"value": "apiname",
"localizedValue": "apiname"
},
"value": "EntityGroupTransaction"
}
],
"data": [
{
"timeStamp": "2023-04-20T12:00:00Z",
"total": 1737897,
"average": 5891.17627118644,
"minimum": 1674,
"maximum": 10976
},
{
"timeStamp": "2023-04-21T12:00:00Z",
"total": 1712543,
"average": 5946.329861111111,
"minimum": 1674,
"maximum": 10980
}
]
},
{
"metadatavalues": [
{
"name": {
"value": "apiname",
"localizedValue": "apiname"
},
"value": "GetBlobServiceProperties"
}
],
"data": [
{
"timeStamp": "2023-04-20T12:00:00Z",
"total": 1284,
"average": 321,
"minimum": 321,
"maximum": 321
},
{
"timeStamp": "2023-04-21T12:00:00Z",
"total": 1926,
"average": 321,
"minimum": 321,
"maximum": 321
}
]
}
],
"errorCode": "Success"
},
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sample-test/providers/Microsoft.Storage/storageAccounts/testaccount/providers/Microsoft.Insights/metrics/Egress",
"type": "Microsoft.Insights/metrics",
"name": {
"value": "Egress",
"localizedValue": "Egress"
},
"displayDescription": "The amount of egress data. This number includes egress to external client from Azure Storage as well as egress within Azure. As a result, this number does not reflect billable egress.",
"unit": "Bytes",
"timeseries": [
{
"metadatavalues": [
{
"name": {
"value": "apiname",
"localizedValue": "apiname"
},
"value": "EntityGroupTransaction"
}
],
"data": [
{
"timeStamp": "2023-04-20T12:00:00Z",
"total": 249603,
"average": 846.1118644067797,
"minimum": 839,
"maximum": 1150
},
{
"timeStamp": "2023-04-21T12:00:00Z",
"total": 244652,
"average": 849.4861111111111,
"minimum": 839,
"maximum": 1150
}
]
},
{
"metadatavalues": [
{
"name": {
"value": "apiname",
"localizedValue": "apiname"
},
"value": "GetBlobServiceProperties"
}
],
"data": [
{
"timeStamp": "2023-04-20T12:00:00Z",
"total": 3772,
"average": 943,
"minimum": 943,
"maximum": 943
},
{
"timeStamp": "2023-04-21T12:00:00Z",
"total": 5658,
"average": 943,
"minimum": 943,
"maximum": 943
}
]
}
],
"errorCode": "Success"
}
],
"namespace": "microsoft.storage/storageaccounts",
"resourceregion": "westus2"
}
Изменения ответа на ошибку
В ответе на ошибку содержимое metrics:getBatch ошибки упаковывается в свойство "error" верхнего уровня в ответе. Например
Ответ об ошибках API метрик
{ "code": "BadRequest", "message": "Metric: Ingress does not support requested dimension combination: apiname2, supported ones are: GeoType,ApiName,Authentication, TraceId: {6666aaaa-77bb-cccc-dd88-eeeeee999999}" }Ответ об ошибке пакетного API:
{ "error": { "code": "BadRequest", "message": "Metric: Egress does not support requested dimension combination: apiname2, supported ones are: GeoType,ApiName,Authentication, TraceId: {6666aaaa-77bb-cccc-dd88-eeeeee999999}" } }
Устранение неполадок
Возвращен пустой временный ряд
"timeseries": []- Пустой временный ряд возвращается, если данные не доступны для указанного диапазона времени и фильтра. Наиболее распространенная причина заключается в указании диапазона времени, который не содержит никаких данных. Например, если для диапазона времени задана дата будущего.
- Еще одна распространенная причина заключается в указании фильтра, не соответствующего ресурсам. Например, если фильтр задает значение измерения, которое не существует ни для одного из ресурсов в данной комбинации подписки и региона,
"timeseries": []возвращается.
Фильтры подстановочных знаков
Использование подстановочного фильтра, например
Microsoft.ResourceId eq '*', заставляет API возвращать временные ряды для каждого идентификатора ресурса в подписке и регионе. Если сочетание подписки и региона не содержит ресурсов, возвращается пустой временный ряд. Тот же запрос без фильтра подстановочных знаков вернет один временный ряд, агрегируя запрошенную метрику по запрошенным измерениям, например подписку и регион.Пользовательские метрики в настоящее время не поддерживаются.
metrics:getBatchAPI не поддерживает запросы пользовательских метрик или запросов, в которых имя пространства имен метрик не является типом ресурса. Это касается метрик гостевой ОС виртуальной машины, использующих пространство имен "azure.vm.windows.guestmetrics" или "azure.vm.linux.guestmetrics".Верхний параметр применяется к указанному идентификатору ресурса.
Как параметр top работает в контексте пакетного API может быть немного запутанным. Вместо того чтобы налагать ограничение на суммарный временной ряд, возвращаемый всем вызовом, он применяет ограничение на суммарный временной ряд, возвращаемый на каждую метрику для каждого идентификатора ресурса. Если у вас есть пакетный запрос со многими фильтрами "*", двумя метриками и четырьмя идентификаторами ресурсов с верхней частью 5. Максимально возможное число временных рядов, возвращаемых этим запросом, равно 40, то есть 2x4x5 временных рядов.
Ошибки авторизации 401
Для API отдельных метрик требуется, чтобы у пользователя было разрешение 'Чтение мониторинга' для запрашиваемого ресурса.
metrics:getBatch Поскольку API относится к уровню подписки, пользователи должны иметь разрешение на просмотр данных мониторинга для запрашиваемой подписки, чтобы использовать пакетный API. Даже если у пользователей есть средство чтения мониторинга для всех ресурсов, запрашиваемых в пакетном API, запрос завершается ошибкой, если пользователь не имеет средства чтения мониторинга в самой подписке.
Сбои авторизации 403
Это означает, что обязательный поставщик ресурсов не зарегистрирован. См. поставщик ресурсов Microsoft.Insights не зарегистрирован для вашей подписки.
Ошибки ограничения частоты 529
Хотя пакетный API плоскости данных предназначен для устранения проблем дросселирования, коды ошибок 529 всё ещё могут возникать. Эта ошибка означает, что серверная часть метрик в настоящее время ограничивает ваши запросы. Рекомендуемое действие — внедрить механизм повторных попыток с экспоненциальной задержкой. Дополнительные сведения о регулировании см. в статье о том, как Azure Resource Manager регулирует запросы.
Пейджинг
Разбиение по страницам не поддерживается API metrics:getBatch. Наиболее распространённый случай использования этого API — это постоянные вызовы каждые несколько минут для тех же метрик и ресурсов за последний период времени. Низкая задержка является важным фактором, так что многие клиенты параллелизируют свои запросы как можно больше. Разбиение по страницам заставляет клиентов в последовательный шаблон вызова, который приводит к дополнительной задержке запроса. В сценариях, когда запросы возвращают тома данных метрик, где разбиение по страницам будет полезным, рекомендуется разделить запрос на несколько параллельных запросов.
Выставление счетов
Да, все данные метрик и пакетные вызовы в плоскости данных подлежат оплате. Дополнительные сведения см. в разделе "Собственные метрики Azure Monitor" в "Базовые запросы поиска по журналам".