Úvodní ukázky dotazů Resource Graphu

Prvním krokem k porozumění dotazům s Azure Resource Graph jsou základní znalosti dotazovacího jazyka. Pokud ještě neznáte dotazovací jazyk Kusto (KQL), doporučujeme si projít kurz KQL, abyste pochopili, jak vytvářet žádosti o prostředky, které hledáte.

Tento článek používá následující úvodní dotazy:

Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

Podpora jazyků

Azure PowerShell (prostřednictvím modulu) a Azure CLI (prostřednictvím rozšíření) podporují Azure Resource Graph. Před spuštěním jakéhokoli z následujících dotazů zkontrolujte, že je vaše prostředí připravené. Zobrazte Azure CLI a Azure PowerShell pro pokyny k instalaci a ověření vašeho výběru prostředí.

Počet prostředků Azure

Tento dotaz vrátí počet prostředků Azure, které existují v předplatných, ke kterým máte přístup. Tento dotaz je také vhodný k ověření, že vaše vybrané prostředí má nainstalované a funkční odpovídající komponenty služby Azure Resource Graph.

Resources
| summarize count()

Azure CLI ve výchozím nastavení dotazuje všechna přístupná předplatná, ale můžete zadat --subscriptions parametr pro dotazování konkrétních předplatných.

az graph query -q "Resources | summarize count()"

Tento příklad používá proměnnou pro ID předplatného.

subid=$(az account show --query id --output tsv)
az graph query -q "Resources | summarize count()" --subscriptions $subid

Můžete se také dotazovat podle rozsahů pro skupinu pro správu a tenanta. Nahraďte <managementGroupId> hodnoty a <tenantId> nahraďte je.

az graph query -q "Resources | summarize count()" --management-groups '<managementGroupId>'
az graph query -q "Resources | summarize count()" --management-groups '<tenantId>'

Pro ID tenanta můžete také použít proměnnou.

tenantid=$(az account show --query tenantId --output tsv)
az graph query -q "Resources | summarize count()" --management-groups $tenantid

Počet prostředků služby Key Vault

Tento dotaz místo countsummarize počítání vrácených záznamů. Počet zahrnuje pouze trezory klíčů.

Resources
| where type =~ 'microsoft.keyvault/vaults'
| count
az graph query -q "Resources | where type =~ 'microsoft.keyvault/vaults' | count"

Výpis prostředků seřazených podle názvu

Tento dotaz vrátí jakýkoli typ prostředku, ale pouze vlastnosti name (Název), type (Typ) a location (Umístění). Pomocí klauzule order by seřadí vlastnosti podle vlastnosti name (Název) ve vzestupném pořadí (asc).

Resources
| project name, type, location
| order by name asc
az graph query -q "Resources | project name, type, location | order by name asc"

Zobrazení všech virtuálních počítačů, které jsou seřazené podle názvu v sestupném pořadí

Když chceme vypsat pouze virtuální počítače (typ Microsoft.Compute/virtualMachines), můžeme ve výsledcích porovnat shodu vlastnosti type (Typ). Podobně jako v předchozím dotazu musí být změny descorder by být řazeny sestupně. =~ ve shodě typu říká Azure Resource Graphu aby nerozlišoval malá a velká písmena.

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"

Zobrazení prvních pěti virtuálních počítačů podle názvu a jejich typu operačního systému

Tento dotaz používá top pouze k načtení pěti odpovídajících záznamů, které jsou seřazené podle názvu. Typ prostředku Azure je Microsoft.Compute/virtualMachines. project říká Azure Resource Graph, které vlastnosti použít.

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"

Počet virtuálních počítačů podle typu operačního systému

Vycházíme z předchozího dotazu a stále omezujeme prostředky Azure na typ Microsoft.Compute/virtualMachines, ale už neomezujeme počet vrácených záznamů. Místo toho jsme použili summarize a count() k definování, jak seskupit a agregovat hodnoty podle vlastností, což je v tomto příkladu properties.storageProfile.osDisk.osType. Příklad toho, jak tento řetězec vypadá v úplném objektu, najdete v části zjišťování prostředků – objevování virtuálních počítačů.

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)"

Jiný způsob, jak napsat stejný dotaz, je na extend vlastnost a dát mu dočasný název pro použití v rámci dotazu, v tomto případě os. Operační systém se pak použije summarize a count() použije jako v předchozím příkladu.

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)"

Poznámka:

Uvědomte si, že zatímco =~ umožňuje nerozlišovat malá a velká písmena, použití vlastností (jako například properties.storageProfile.osDisk.osType) v dotazu vyžaduje rozlišování malých a velkých písmen. Pokud je vlastnost nesprávným případem, vrátí se hodnota null nebo nesprávná hodnota a seskupení nebo sumarizace by byla nesprávná.

Zobrazení prostředků, které obsahují úložiště

Místo explicitního definování typu, který se má shodovat, tento ukázkový dotaz najde jakýkoli prostředek Azure, který contains word storage obsahuje.

Resources
| where type contains 'storage' | distinct type
az graph query -q "Resources | where type contains 'storage' | distinct type"

Výpis všech podsítí virtuální sítě Azure

Tento dotaz vrátí seznam virtuálních sítí Azure včetně názvů podsítí a předpon adres.

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"

Seznam všech veřejných IP adres

Podobně jako v předchozím dotazu se vyhledají všechny záznamy, jejichž typ obsahuje slovo publicIPAddresses. Tento dotaz rozšiřuje tento vzor tak, aby zahrnoval pouze výsledky, ve kterých properties.ipAddress, aby vracelisnotempty pouze vlastnosti.ipAddress a výsledky limit podle prvních 100. V závislosti na zvoleném prostředí možná budete muset uvozovky uvozovky uvozovek utéct.

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"

Počet prostředků, které mají IP adresy nakonfigurované podle předplatného

Pomocí předchozího ilustračního dotazu a přidáním summarize a count(), získáme seznam podle předplatného prostředků s nakonfigurovanými IP adresami.

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"

Seznam prostředků s konkrétní hodnotou značky

Rozsah výsledků můžeme omezit podle vlastností jiných než typ prostředku Azure, jako je například značka. V tomto příkladu vyfiltrujeme prostředky Azure s názvem značky Environment (Prostředí) s hodnotou Internal (Interní).

Resources
| where tags.environment=~'internal'
| project name
az graph query -q "Resources | where tags.environment=~'internal' | project name"

Pokud chcete vrátit také značky prostředku a jejich hodnoty, přidejte ke klíčovému slovu project vlastnost tags (Značky).

Resources
| where tags.environment=~'internal'
| project name, tags
az graph query -q "Resources | where tags.environment=~'internal' | project name, tags"

Seznam všech účtů úložiště s konkrétní hodnotou značky

Zkombinujte funkci filtrování z předchozího příkladu a vyfiltrujte typ prostředku Azure podle vlastnosti type (Typ). Tento dotaz naše hledání omezuje také na konkrétní typy prostředků Azure s konkrétním názvem a hodnotou značky.

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'"

Poznámka:

Tento příklad používá == pro shodu místo podmínky =~. == je shoda rozlišující velikost písmen.

Výpis všech značek a jejich hodnot

Tento dotaz uvádí značky skupin pro správu, předplatných a prostředků spolu s jejich hodnotami. Dotaz nejprve omezuje zdroje, kde značky isnotempty(), omezuje zahrnutá pole pouze zahrnutím značek do projecta mvexpandextend získat spárovaná data z kontejneru vlastností. Potom se použije union ke kombinování výsledků z ResourceContainers do stejných výsledků z prostředků a poskytuje široké pokrytí, ke kterým značek se načítají. Nakonec omezí výsledky na distinct spárovaná data a vyloučí značky skryté systémem.

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-""

Zobrazení nepřidružených skupin zabezpečení sítě

Tento dotaz vrátí skupiny zabezpečení sítě (NSG), které nejsou přidružené k síťovému rozhraní nebo podsíti.

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"

Výpis upozornění služby Azure Monitor seřazená podle závažnosti

Tento dotaz používá alertsmanagementresources tabulku k vrácení výstrah služby Azure Monitor seřazených podle závažnosti.

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
az graph query -q "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"

Výpis upozornění služby Azure Monitor seřazené podle závažnosti a stavu upozornění

Tento dotaz používá alertsmanagementresources tabulku k vrácení výstrah služby Azure Monitor seřazených podle závažnosti a stavu upozornění.

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
az graph query -q "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"

Výpis upozornění služby Azure Monitor seřazené podle závažnosti, monitorování služby a typu cílového prostředku

Tento dotaz pomocí alertsmanagementresources tabulky vrátí výstrahy služby Azure Monitor seřazené podle závažnosti, služby monitorování a typu cílového prostředku.

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
az graph query -q "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"

Další kroky

  • Přečtěte si další informace o dotazovacím jazyce.
  • Přečtěte si další informace o tom, jak prozkoumat prostředky.
  • Podívejte se na ukázky pokročilých dotazů.