Поделиться через


Общие сведения о языке запросов графика ресурсов 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
      

Следующие шаги