Примеры запросов к Resource Graph для начинающих
Первым шагом на пути к пониманию запросов к Azure Resource Graph является общее понимание языка запросов. Если вы еще не знакомы с языком запросов Kusto (KQL), советуем просмотреть учебник по KQL, чтобы понять, как составлять запросы к ресурсам, которые вы ищете.
В этой статье используются следующие начальные запросы:
- Подсчет ресурсов Azure
- Подсчет ресурсов хранилища ключей
- Вывод списка ресурсов, отсортированных по имени
- Отображение всех виртуальных машин, упорядоченных по имени в порядке убывания
- Отображение первых пяти виртуальных машин по имени и типу ОС
- Подсчет виртуальных машин по типу ОС
- Отображение ресурсов, которые содержат хранилище
- Список всех подсетей виртуальной сети Azure
- Вывод списка общедоступных IP-адресов
- Подсчет ресурсов с IP-адресами, настроенными посредством подписки
- Вывод списка ресурсов с определенным значением тега
- Вывод списка всех учетных записей хранения с определенным значением тега
- Вывод всех тегов и их значений
- Отображение несвязанных групп безопасности сети
- Перечисление оповещений Azure Monitor, упорядоченных по серьезности
- Вывод списка оповещений Azure Monitor, упорядоченных по уровню серьезности и состоянию оповещения
- Вывод списка оповещений Azure Monitor, упорядоченных по серьезности, мониторингу службы и типу целевого ресурса
Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.
Поддержка языков
Azure CLI (с помощью расширения) и Azure PowerShell (с помощью модуля) поддерживают Azure Resource Graph. Перед выполнением любого из следующих запросов убедитесь, что среда готова. В разделах об Azure CLI и Azure PowerShell приведены инструкции по установке и проверке выбранной вами среды оболочки.
Подсчет ресурсов Azure
Этот запрос возвращает количество ресурсов Azure в доступных вам подписках. Этот запрос также удобно использовать, чтобы проверить, установлены ли в выбранной оболочке соответствующие компоненты Azure Resource Graph и работают ли они.
Resources
| summarize count()
По умолчанию Azure CLI запрашивает все доступные подписки, но можно указать --subscriptions
параметр для запроса определенных подписок.
az graph query -q "Resources | summarize count()"
В этом примере используется переменная для идентификатора подписки.
subid=$(az account show --query id --output tsv)
az graph query -q "Resources | summarize count()" --subscriptions $subid
Вы также можете запросить области для группы управления и клиента. Замените <managementGroupId>
и <tenantId>
собственными значениями.
az graph query -q "Resources | summarize count()" --management-groups '<managementGroupId>'
az graph query -q "Resources | summarize count()" --management-groups '<tenantId>'
Можно также использовать переменную для идентификатора клиента.
tenantid=$(az account show --query tenantId --output tsv)
az graph query -q "Resources | summarize count()" --management-groups $tenantid
Подсчет ресурсов хранилища ключей
Для подсчета количества возвращаемых записей в этом запросе используется count
вместо summarize
. В подсчет включаются только хранилища ключей.
Resources
| where type =~ 'microsoft.keyvault/vaults'
| count
az graph query -q "Resources | where type =~ 'microsoft.keyvault/vaults' | count"
Вывод списка ресурсов, отсортированных по имени
Этот запрос возвращает любой тип ресурса, но только свойства name, type и location. Он использует выражение order by
, чтобы сортировать свойства по свойству name в порядке возрастания (asc
).
Resources
| project name, type, location
| order by name asc
az graph query -q "Resources | project name, type, location | order by name asc"
Отображение всех виртуальных машин, упорядоченных по имени в порядке убывания
Чтобы вывести только список виртуальных машин (относящихся к типу Microsoft.Compute/virtualMachines
), в результатах можно применить сопоставление по свойству type. Аналогично предыдущему запросу, desc
изменяет order by
для сортировки по убыванию. =~
в сопоставлении типа указывает Resource Graph не учитывать регистр.
Resources
| project name, location, type
| where type =~ 'Microsoft.Compute/virtualMachines'
| order by name desc
az graph query -q "Resources | project name, location, type| where type =~ 'Microsoft.Compute/virtualMachines' | order by name desc"
Отображение первых пяти виртуальных машин по имени и типу ОС
Этот запрос использует top
для извлечения только пяти соответствующих записей, упорядоченных по имени. Типом ресурса Azure является Microsoft.Compute/virtualMachines
. project
указывает Azure Resource Graph, какие свойства следует включить.
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| project name, properties.storageProfile.osDisk.osType
| top 5 by name desc
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project name, properties.storageProfile.osDisk.osType | top 5 by name desc"
Подсчет виртуальных машин по типу ОС
Основываясь на предыдущем запросе, мы по-прежнему ограничиваем результаты типом ресурса Azure Microsoft.Compute/virtualMachines
, но больше не ограничиваем количество возвращаемых записей.
Вместо этого мы использовали summarize
и count()
, чтобы определить способ группирования и объединения значений по свойству (properties.storageProfile.osDisk.osType
в этом примере). Чтобы получить представление о том, как эта строка выглядит в полном объекте, ознакомьтесь с просмотром ресурсов и обнаружением виртуальных машин.
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| summarize count() by tostring(properties.storageProfile.osDisk.osType)
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | summarize count() by tostring(properties.storageProfile.osDisk.osType)"
Этот запрос можно составить по-другому. Можно extend
свойство и присвоить ему временное имя для использования в запросе, в этом случае — os. os будет использоваться в summarize
и count()
, как показано в предыдущем примере.
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| extend os = properties.storageProfile.osDisk.osType
| summarize count() by tostring(os)
az graph query -q "Resources | where type =~ 'Microsoft.Compute/virtualMachines' | extend os = properties.storageProfile.osDisk.osType | summarize count() by tostring(os)"
Примечание.
Имейте в виду, что, хотя =~
позволяет сопоставление без учета регистра, использование свойств (таких как properties.storageProfile.osDisk.osType) в запросе требует соблюдения регистра. Если свойство указано в неправильном регистре, возвращается значение NULL или неверное значение. Группирование или сведение данных будет выполняться неправильно.
Отображение ресурсов, которые содержит хранилище
Вместо явного определения типа, соответствующего этому примеру, запрос находит любой ресурс Azure, который contains
используется в хранилище слов.
Resources
| where type contains 'storage' | distinct type
az graph query -q "Resources | where type contains 'storage' | distinct type"
Вывод списка всех подсетей виртуальной сети Azure
Этот запрос возвращает список виртуальных сетей Azure, включая имена подсетей и префиксы адресов. Благодарим Саула Долгина за вклад.
Resources
| where type == 'microsoft.network/virtualnetworks'
| extend subnets = properties.subnets
| mv-expand subnets
| project name, subnets.name, subnets.properties.addressPrefix, location, resourceGroup, subscriptionId
az graph query -q "Resources | where type == 'microsoft.network/virtualnetworks' | extend subnets = properties.subnets | mv-expand subnets | project name, subnets.name, subnets.properties.addressPrefix, location, resourceGroup, subscriptionId"
Вывод списка общедоступных IP-адресов
Аналогично предыдущему примеру этот запрос ищет все ресурсы, тип которых содержит слово publicIPAddresses.
Этот запрос расширяет данный шаблон, чтобы можно было включить в результаты только ресурсы с properties.ipAddressisnotempty
, возвращать только properties.ipAddress и limit
только 100 лучших результатов. В зависимости от выбранной оболочки может потребоваться выйти за пределы цитат.
Resources
| where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress)
| project properties.ipAddress
| limit 100
az graph query -q "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | project properties.ipAddress | limit 100"
Подсчет ресурсов с IP-адресами, настроенными посредством подписки
Используя предыдущий пример запроса и добавив summarize
и count()
, мы можем получить список ресурсов с настроенными IP-адресами для подписки.
Resources
| where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress)
| summarize count () by subscriptionId
az graph query -q "Resources | where type contains 'publicIPAddresses' and isnotempty(properties.ipAddress) | summarize count () by subscriptionId"
Вывод списка ресурсов с определенным значением тега
Мы можем ограничить результаты не только по типу ресурса Azure, а, например, по тегу. В этом примере мы применяем фильтр для получения ресурсов Azure с тегом Environment со значением Internal.
Resources
| where tags.environment=~'internal'
| project name
az graph query -q "Resources | where tags.environment=~'internal' | project name"
Чтобы указать теги ресурсов и их значения, добавьте свойство tags для ключевого слова project
.
Resources
| where tags.environment=~'internal'
| project name, tags
az graph query -q "Resources | where tags.environment=~'internal' | project name, tags"
Вывод списка всех учетных записей хранения с определенным значением тега
Объедините функции фильтра в предыдущем примере и фильтрацию по типу ресурса Azure с помощью свойства type. Этот запрос также ограничивает поиск определенных типов ресурсов Azure за счет использования конкретного имени и значения тега.
Resources
| where type =~ 'Microsoft.Storage/storageAccounts'
| where tags['tag with a space']=='Custom value'
az graph query -q "Resources | where type =~ 'Microsoft.Storage/storageAccounts' | where tags['tag with a space']=='Custom value'"
Примечание.
В этом примере для сопоставления используется условный оператор ==
вместо =~
. При использовании ==
учитывается регистр.
Вывод всех тегов и их значений
В этом запросе приведены теги для групп управления, подписок и ресурсов, а также их значения.
Сначала запрос ограничивается ресурсами с тегами isnotempty()
, затем ограничивается включаемыми полями, в том числе тегами в project
, а затем — mvexpand
и extend
для получения связанных данных из контейнера свойств. Затем он использует union
для объединения результатов из контейнеров ресурсов, чтобы получить результаты из ресурсов, предоставляя полные сведения о том, какие теги получены. Наконец, он ограничивается результатами для сопоставленных данных distinct
и исключает скрытые системой теги.
ResourceContainers
| where isnotempty(tags)
| project tags
| mvexpand tags
| extend tagKey = tostring(bag_keys(tags)[0])
| extend tagValue = tostring(tags[tagKey])
| union (
resources
| where isnotempty(tags)
| project tags
| mvexpand tags
| extend tagKey = tostring(bag_keys(tags)[0])
| extend tagValue = tostring(tags[tagKey])
)
| distinct tagKey, tagValue
| where tagKey !startswith "hidden-"
az graph query -q "ResourceContainers | where isnotempty(tags) | project tags | mvexpand tags | extend tagKey = tostring(bag_keys(tags)[0]) | extend tagValue = tostring(tags[tagKey]) | union (resources | where notempty(tags) | project tags | mvexpand tags | extend tagKey = tostring(bag_keys(tags)[0]) | extend tagValue = tostring(tags[tagKey]) ) | distinct tagKey, tagValue | where tagKey !startswith "hidden-""
Отображение несвязанных групп безопасности сети
Этот запрос возвращает группы безопасности сети (NSG), которые не связаны с сетевым интерфейсом или подсетью.
Resources
| where type =~ "microsoft.network/networksecuritygroups" and isnull(properties.networkInterfaces) and isnull(properties.subnets)
| project name, resourceGroup
| sort by name asc
az graph query -q "Resources | where type =~ 'microsoft.network/networksecuritygroups' and isnull(properties.networkInterfaces) and isnull(properties.subnets) | project name, resourceGroup | sort by name asc"
Перечисление оповещений Azure Monitor, упорядоченных по серьезности
alertsmanagementresources
| where type =~ 'microsoft.alertsmanagement/alerts'
| where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now()
| project Severity = tostring(properties.essentials.severity)
| summarize AlertsCount = count() by Severity
Вывод списка оповещений Azure Monitor, упорядоченных по уровню серьезности и состоянию оповещения
alertsmanagementresources
| where type =~ 'microsoft.alertsmanagement/alerts'
| where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now()
| project Severity = tostring(properties.essentials.severity),
AlertState= tostring(properties.essentials.alertState)
| summarize AlertsCount = count() by Severity, AlertState
Вывод списка оповещений Azure Monitor, упорядоченных по серьезности, мониторингу службы и типу целевого ресурса
alertsmanagementresources
| where type =~ 'microsoft.alertsmanagement/alerts'
| where todatetime(properties.essentials.startDateTime) >= ago(2h) and todatetime(properties.essentials.startDateTime) < now()
| project Severity = tostring(properties.essentials.severity),
MonitorCondition = tostring(properties.essentials.monitorCondition),
ObjectState = tostring(properties.essentials.alertState),
MonitorService = tostring(properties.essentials.monitorService),
AlertRuleId = tostring(properties.essentials.alertRule),
SignalType = tostring(properties.essentials.signalType),
TargetResource = tostring(properties.essentials.targetResourceName),
TargetResourceType = tostring(properties.essentials.targetResourceName), id
| summarize AlertsCount = count() by Severity, MonitorService , TargetResourceType
Следующие шаги
- Узнайте больше о языке запросов.
- Узнайте больше о том, как изучать ресурсы.
- Ознакомьтесь с примерами усложненных запросов.