Общие сведения о языке запросов графика ресурсов Azure
Язык запросов для Azure Resource Graph поддерживает множество операторов и функций. Каждый из них работает так же, как элементы языка запросов Kusto (KQL). Чтобы ознакомиться с языком запросов, используемом в Resource Graph, начните с учебника по KQL.
В этой статье рассматриваются компоненты языка, поддерживаемые Resource Graph:
Таблицы Resource Graph
Resource Graph предоставляет несколько таблиц для хранения данных по типам ресурсов Azure Resource Manager и их свойствам. Таблицы Resource Graph можно использовать с оператором join
для получения свойств из связанных типов ресурсов.
Таблицы Graph ресурсов поддерживают join
вкусы:
Таблица Resource Graph | Может ли join к другим таблицам? |
Description |
---|---|---|
AdvisorResources | Да | Содержит ресурсы, связанные с Microsoft.Advisor . |
AlertsManagementResources | Да | Содержит ресурсы, связанные с Microsoft.AlertsManagement . |
AppServiceResources | Да | Содержит ресурсы, связанные с Microsoft.Web . |
AuthorizationResources | Да | Содержит ресурсы, связанные с Microsoft.Authorization . |
AWSResources | Да | Содержит ресурсы, связанные с Microsoft.AwsConnector . |
AzureBusinessContinuityResources | Да | Содержит ресурсы, связанные с Microsoft.AzureBusinessContinuity . |
ChaosResources | Да | Содержит ресурсы, связанные с Microsoft.Chaos . |
CommunityGalleryResources | Да | Содержит ресурсы, связанные с Microsoft.Compute . |
ComputeResources | Да | Включает ресурсы, связанные с Microsoft.Compute Масштабируемые наборы виртуальных машин. |
DesktopVirtualizationResources | Да | Содержит ресурсы, связанные с Microsoft.DesktopVirtualization . |
DnsResources | Да | Содержит ресурсы, связанные с Microsoft.Network . |
EdgeOrderResources | Да | Содержит ресурсы, связанные с Microsoft.EdgeOrder . |
ElasticsanResources | Да | Содержит ресурсы, связанные с Microsoft.ElasticSan . |
ExtendedLocationResources | Да | Содержит ресурсы, связанные с Microsoft.ExtendedLocation . |
FeatureResources | Да | Содержит ресурсы, связанные с Microsoft.Features . |
GuestConfigurationResources | Да | Содержит ресурсы, связанные с Microsoft.GuestConfiguration . |
HealthResourceChanges | Да | Содержит ресурсы, связанные с Microsoft.Resources . |
HealthResources | Да | Содержит ресурсы, связанные с Microsoft.ResourceHealth . |
InsightsResources | Да | Содержит ресурсы, связанные с Microsoft.Insights . |
IoTSecurityResources | Да | Содержит ресурсы, связанные с Microsoft.IoTSecurity и Microsoft.IoTFirmwareDefense . |
KubernetesConfigurationResources | Да | Содержит ресурсы, связанные с Microsoft.KubernetesConfiguration . |
KustoResources | Да | Содержит ресурсы, связанные с Microsoft.Kusto . |
MaintenanceResources | Да | Содержит ресурсы, связанные с Microsoft.Maintenance . |
ManagedServicesResources | Да | Содержит ресурсы, связанные с Microsoft.ManagedServices . |
МиграцияResources | Да | Содержит ресурсы, связанные с Microsoft.OffAzure . |
NetworkResources | Да | Содержит ресурсы, связанные с Microsoft.Network . |
OrbitalResources | Да | Содержит ресурсы, связанные с Microsoft.Orbital . |
PatchAssessmentResources | Да | Включает ресурсы, связанные с оценкой Microsoft.Compute исправлений Виртуальные машины Azure и Microsoft.HybridCompute . |
PatchInstallationResources | Да | Включает ресурсы, связанные с установкой Microsoft.Compute исправлений Виртуальные машины Azure и Microsoft.HybridCompute . |
PolicyResources | Да | Содержит ресурсы, связанные с Microsoft.PolicyInsights . |
RecoveryServicesResources | Да | Содержит ресурсы, связанные с Microsoft.DataProtection и Microsoft.RecoveryServices . |
ResourceChanges | Да | Содержит ресурсы, связанные с Microsoft.Resources . |
ResourceContainerChanges | Да | Содержит ресурсы, связанные с Microsoft.Resources . |
ResourceContainers | Да | Включает типы ресурсов и данные группы управления (Microsoft.Management/managementGroups ), подписки (Microsoft.Resources/subscriptions ) и группы ресурсов (Microsoft.Resources/subscriptions/resourcegroups ). |
Ресурсы | Да | Таблица по умолчанию, если таблица не определена в запросе. В ней содержится большинство типов ресурсов Resource Manager и их свойств. |
SecurityResources | Да | Содержит ресурсы, связанные с Microsoft.Security . |
ServiceFabricResources | Да | Содержит ресурсы, связанные с Microsoft.ServiceFabric . |
ServiceHealthResources | Да | Содержит ресурсы, связанные с Microsoft.ResourceHealth/events . |
SpotResources | Да | Содержит ресурсы, связанные с Microsoft.Compute . |
SupportResources | Да | Содержит ресурсы, связанные с Microsoft.Support . |
ТегиResources | Да | Содержит ресурсы, связанные с Microsoft.Resources/tagnamespaces . |
Список таблиц, включающих типы ресурсов, перейдите в таблицу Azure Resource Graph и ссылку на тип ресурса.
Примечание.
Resources
— это таблица по умолчанию. При запросе Resources
таблицы не требуется указать имя таблицы, если join
не используется или union
не используется. Но рекомендуется всегда включать начальную таблицу в запрос.
Чтобы узнать, какие типы ресурсов доступны в каждой таблице, используйте обозреватель Resource Graph на портале. В качестве альтернативы можно использовать такой запрос, как <tableName> | distinct type
, чтобы получить список имеющихся в среде типов ресурсов, которые поддерживаются данной таблицей Resource Graph.
В приведенном ниже запросе показана простая операция join
. В результате запроса столбцы объединяются, а ко всем дублирующимся именам столбцов из соединяемой таблицы (в этом примере ResourceContainers) добавляется 1. Поскольку таблица ResourceContainers имеет типы для подписок и групп ресурсов, любой тип может использоваться для присоединения к ресурсу из Resources
таблицы.
Resources
| join ResourceContainers on subscriptionId
| limit 1
В приведенном ниже запросе показано более сложное использование join
. Во-первых, запрос используется project
для получения полей из Resources
типа ресурса Хранилища ключей Azure. Следующий шаг использует join
, чтобы объединить результаты с ResourceContainers, где тип — это подписка на свойство, указанное как в project
первой таблицы, так и в project
объединенной таблицы. Переименование поля избегает join
добавления в качестве имени1 , так как свойство уже проецируется из Resources
. Результатом запроса является хранилище ключей, которое представляет тип, название, местоположение и группу ресурсов хранилища, а также название подписки.
Resources
| where type == 'microsoft.keyvault/vaults'
| project name, type, location, subscriptionId, resourceGroup
| join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| project type, name, location, resourceGroup, SubName
| limit 1
Примечание.
При ограничении результатов join
с помощью project
свойство, используемое join
для связывания двух таблиц (subscriptionId в приведенном выше примере), должно включаться в project
.
Расширенные свойства
В качестве предварительной версии некоторые типы ресурсов в Resource Graph имеют дополнительные свойства, связанные с типом, доступные для запроса за пределами свойств, предоставляемых Azure Resource Manager. Этот набор значений, известный как Расширенные свойства, существует в поддерживаемом типе ресурсов в properties.extended
. Чтобы отобразить типы ресурсов с расширенными свойствами, используйте следующий запрос:
Resources
| where isnotnull(properties.extended)
| distinct type
| order by type asc
Пример: получить количество виртуальных машин по instanceView.powerState.code
:
Resources
| where type == 'microsoft.compute/virtualmachines'
| summarize count() by tostring(properties.extended.instanceView.powerState.code)
пользовательские элементы языка Resource Graph
Синтаксис общего запроса (Предварительная версия)
В качестве предварительной версии функции, доступ к общему запросу можно получить прямо через запрос Resource Graph. Этот сценарий позволяет создавать стандартные запросы в виде общих и использовать их повторно. Чтобы вызвать общий запрос в рамках запроса Resource Graph, используйте синтаксис {{shared-query-uri}}
. URI общего запроса — это идентификатор ресурса общего запроса на странице Параметры этого запроса. В этом примере наш URI общего запроса — /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS
.
Этот URI указывает на подписку, группу ресурсов и полное имя общего запроса, на который мы хотим ссылаться в другом запросе. Этот запрос совпадает с запросом, который был создан в Руководстве по созданию запроса и предоставлению общего доступа к нему.
Примечание.
Нельзя сохранить запрос, который ссылается на общий запрос в виде общего запроса.
Пример 1. Используйте только общий запрос:
Результаты этого запроса Resource Graph совпадают с результатами запроса, хранящегося в общем запросе.
{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
Пример 2. Включение общего запроса в состав более крупного запроса:
Сначала этот запрос использует общий запрос, а затем использует limit
для ограничения результатов.
{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
| where properties_storageProfile_osDisk_osType =~ 'Windows'
Поддерживаемые элементы языка KQL
Resource Graph поддерживает подмножество типов данных, скалярных функций, скалярных операторов и агрегатных функций KQL. Resource Graph поддерживает определенные табличные операторы, некоторые из которых имеют разное поведение.
Поддерживаемые табличные операторы и операторы верхнего уровня
Ниже приведен список табличных операторов KQL, поддерживаемых Resource Graph с определенными примерами:
KQL | Пример запроса Resource Graph | Примечания. |
---|---|---|
count | Число хранилищ ключей | |
distinct | Отображение ресурсов, которые содержат хранилище | |
extend | Подсчет виртуальных машин по типу ОС | |
join | Хранилище ключей с именем подписки | Поддерживаемые вкусы соединения: innerunique, inner, leftouter и fullouter. Ограничение в три join в одном запросе, одно из которых может быть перекрестной таблицей join . Если все использование между таблицами join выполняется между ресурсом и ResourceContainers, то допускается три перекрестные таблицы join . Пользовательские стратегии соединения, такие как широковещательное соединение, не допускаются. Для каких таблиц можно использовать join , перейдите к таблицам Resource Graph. |
limit | Вывод списка общедоступных IP-адресов | Синоним take . Не работает со Skip. |
mvexpand | Устаревший оператор, используйте вместо него mv-expand . RowLimit max 2000. Значение по умолчанию — 128. |
|
mv-expand | Вывод списка Azure Cosmos DB с определенными расположениями записи | RowLimit max 2000. Значение по умолчанию — 128. Не более 3 mv-expand в одном запросе. |
order | Вывод списка ресурсов, отсортированных по имени | Синоним sort |
parse | Получение виртуальных сетей и подсетей сетевых интерфейсов | Доступ к свойствам рекомендуется осуществлять напрямую, если они существуют, а не с помощью parse . |
project | Вывод списка ресурсов, отсортированных по имени | |
project-away | Удаление столбцов из результатов | |
sort | Вывод списка ресурсов, отсортированных по имени | Синоним order |
summarize | Подсчет ресурсов Azure | Только первая упрощенная страница |
take | Вывод списка общедоступных IP-адресов | Синоним limit . Не работает со Skip. |
top | Отображение первых пяти виртуальных машин по имени и типу ОС | |
union | Объединение результатов из двух запросов в один результат | Разрешена одна таблица: | union [kind= inner|outer] [withsource=ColumnName] Table . Ограничение на три union ноги в одном запросе. Нечеткое разрешение таблиц разветвлений union не допускается. Может использоваться в одной таблице или между таблицами Resources и ResourceContainers . |
where | Отображение ресурсов, которые содержат хранилище |
Ограничение по умолчанию — три join
и три mv-expand
оператора в одном запросе пакета SDK для Resource Graph. Чтобы увеличить эти ограничения для своего клиента, выберите Справка + поддержка.
Для поддержки интерфейса портала open Query обозреватель Azure Resource Graph имеет более высокий глобальный предел, чем пакет SDK для Resource Graph.
Примечание.
Вы не можете ссылаться на таблицу в виде правой таблицы несколько раз, что превышает ограничение 1. При этом вы получите ошибку с кодом DisallowedMaxNumberOfRemoteTables.
Область запроса
Область действия подписок или групп управления, из которой по умолчанию возвращаются ресурсы, задается по списку подписок в зависимости от контекста авторизированного пользователя. Если группа управления или список подписок не определена, область запроса является всеми ресурсами и включает делегированные ресурсы Azure Lighthouse .
Список подписок или групп управления для запроса может быть определен вручную для изменения области результатов. Например, свойство managementGroups
REST API принимает идентификатор группы управления, который отличается от названия группы управления. При managementGroups
указании включены ресурсы из первых 10 000 подписок в указанной иерархии групп управления или в ней. managementGroups
нельзя использовать в то же время, что и subscriptions
.
Пример. Запрос всех ресурсов в иерархии группы управления с My Management Group
идентификатором myMG
.
Универсальный код ресурса (URI) REST API
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01
Текст запроса
{ "query": "Resources | summarize count()", "managementGroups": ["myMG"] }
Этот AuthorizationScopeFilter
параметр позволяет перечислять Политика Azure назначения и назначения ролей на основе ролей Azure (Azure RBAC) в AuthorizationResources
таблице, унаследованной от верхних областей. Параметр AuthorizationScopeFilter
принимает следующие значения для PolicyResources
таблиц и AuthorizationResources
таблиц:
- AtScopeAndBelow (по умолчанию, если не указано): возвращает назначения для данной области и всех дочерних областей.
- AtScopeAndAbove: возвращает назначения для данной области и всех родительских областей, но не дочерних областей.
- AtScopeAboveAndBelow: возвращает назначения для данной области, все родительские области и все дочерние области.
- AtScopeExact: возвращает назначения только для заданной области; родительские или дочерние области не включены.
Примечание.
Чтобы использовать AuthorizationScopeFilter
параметр, обязательно используйте версию API 2021-06-01-preview или более поздней версии API в запросах.
Пример. Получение всех назначений политик в областях группы управления myMG и корня (родителя) арендатора.
Универсальный код ресурса (URI) REST API
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
Пример текста запроса
{ "options": { "authorizationScopeFilter": "AtScopeAndAbove" }, "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'", "managementGroups": ["myMG"] }
Пример. Получение всех назначений политик в областях подписки mySubscriptionId, группы управления и корня арендатора.
Универсальный код ресурса (URI) REST API
POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
Пример текста запроса
{ "options": { "authorizationScopeFilter": "AtScopeAndAbove" }, "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'", "subscriptions": ["mySubscriptionId"] }
Escape-символы
Некоторые имена свойств, например включающие в себя .
или $
, должны заключаться в оболочку или экранироваться в запросе, иначе они будут интерпретироваться неправильно и давать непредвиденные результаты.
Точка (
.
): заключите имя['propertyname.withaperiod']
свойства с помощью квадратных скобок.Пример запроса, в котором заключается свойство odata.type:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']
Знак доллара (
$
): экранируйте символ в имени свойства. Используемый escape-символ зависит от оболочки, которая запускает Resource Graph.Bash: используйте обратную косую черту (
\
) в качестве escape-символа.Пример запроса, в котором экранируется свойство $type в bash:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
cmd: не избегайте знака доллара (
$
) символа.PowerShell: используйте обратную черту (
`
) в качестве escape-символа.Пример запроса, в котором экранируется свойство $type в PowerShell:
where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.`$type
Следующие шаги
- Начальные запросы языка запросов Azure Resource Graph и расширенные запросы.
- Узнайте больше о том, как изучить ресурсы Azure.