Ukázky dotazů Advanced 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 Azure Data Explorer, doporučujeme přečíst si základní informace, abyste pochopili, jak vytvářet požadavky na prostředky, které hledáte.
Projdeme následující rozšířené dotazy:
- Zobrazení verze rozhraní API pro každý typ prostředku
- Získání kapacity a velikosti škálovací sady virtuálních počítačů
- Odebrání sloupců z výsledků
- Vypsat všechny názvy značek
- Virtuální počítače odpovídající regulárnímu výrazu
- Výpis služby Azure Cosmos DB s konkrétními umístěními zápisu
- Trezory klíčů s názvem předplatného
- Výpis databází SQL a jejich elastických fondů
- Výpis virtuálních počítačů se síťovým rozhraním a veřejnou IP adresou
- Zobrazení seznamu všech rozšíření nainstalovaných na virtuálním počítači
- Vyhledání účtů úložiště s konkrétní značkou ve skupině prostředků
- Sloučení výsledků ze dvou dotazů do jednoho výsledku
- Získání virtuálních sítí a podsítí síťových rozhraní
- Shrnutí virtuálního počítače rozšířenými stavy napájení
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í.
Zobrazení verze rozhraní API pro každý typ prostředku
Resource Graph primárně používá nejnovější verzi rozhraní API poskytovatele prostředků, která není ve verzi Preview, k GET
vlastnostem prostředků během aktualizace. V některých případech byla použitá verze rozhraní API přepsána, aby ve výsledcích poskytovala více aktuálních nebo široce používaných vlastností. Následující dotaz podrobně popisuje verzi rozhraní API použitou ke shromažďování vlastností pro jednotlivé typy prostředků:
Resources
| distinct type, apiVersion
| where isnotnull(apiVersion)
| order by type asc
az graph query -q "Resources | distinct type, apiVersion | where isnotnull(apiVersion) | order by type asc"
Získání kapacity a velikosti škálovací sady virtuálních počítačů
Tento dotaz hledá prostředky škálovací sady virtuálních počítačů a získá různé podrobnosti, včetně velikosti virtuálních počítačů a kapacity škálovací sady. Dotaz pomocí funkce toint()
přetypuje kapacitu na číslo, aby bylo možné ji řadit. Nakonec se sloupce přejmenují na vlastní pojmenované vlastnosti.
Resources
| where type=~ 'microsoft.compute/virtualmachinescalesets'
| where name contains 'contoso'
| project subscriptionId, name, location, resourceGroup, Capacity = toint(sku.capacity), Tier = sku.name
| order by Capacity desc
az graph query -q "Resources | where type=~ 'microsoft.compute/virtualmachinescalesets' | where name contains 'contoso' | project subscriptionId, name, location, resourceGroup, Capacity = toint(sku.capacity), Tier = sku.name | order by Capacity desc"
Odebrání sloupců z výsledků
Následující dotaz používá summarize
ke spočítání prostředků podle předplatného, join
ke kombinování s podrobnostmi o předplatném z tabulky ResourceContainers a následné project-away
odebrání některých sloupců.
Resources
| summarize resourceCount=count() by subscriptionId
| join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| project-away subscriptionId, subscriptionId1
az graph query -q "Resources | summarize resourceCount=count() by subscriptionId | join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId| project-away subscriptionId, subscriptionId1"
Vypsat všechny názvy značek
Tento dotaz spustí se značkou a vytvoří objekt JSON obsahující všechny jedinečné názvy značek a jejich odpovídající typy.
Resources
| project tags
| summarize buildschema(tags)
az graph query -q "Resources | project tags | summarize buildschema(tags)"
Virtuální počítače odpovídající regulárnímu výrazu
Tento dotaz vyhledá virtuální počítače, které odpovídají regulárnímu výrazu (označovanému jako regulární výraz). Odpovídá regulární výraz @ umožňuje definovat regulární výraz, který se má shodovat, což je ^Contoso(.*)[0-9]+$
.
Tato definice regulárního výrazu je vysvětlena jako:
^
– Porovnání musí začít na začátku řetězce.Contoso
– Řetězec s rozlišováním velkých a malých písmen.(.*)
- Shoda dílčího výrazu:.
– Odpovídá jakémukoli jednomu znaku (s výjimkou nového řádku).*
– Shoduje se s předchozím prvkem nulakrát nebo vícekrát.
[0-9]
– Shoda skupiny znaků pro čísla 0 až 9.+
– Shoduje se s předchozím prvkem jednou nebo vícekrát.$
– Shoda s předchozím prvkem se musí vyskytovat na konci řetězce.
Po porovnání podle názvu, dotaz promítne název a pořadí vzestupně podle názvu.
Resources
| where type =~ 'microsoft.compute/virtualmachines' and name matches regex @'^Contoso(.*)[0-9]+$'
| project name
| order by name asc
az graph query -q "Resources | where type =~ 'microsoft.compute/virtualmachines' and name matches regex @'^Contoso(.*)[0-9]+\$' | project name | order by name asc"
Výpis služby Azure Cosmos DB s konkrétními umístěními zápisu
Následující omezení dotazů na prostředky Služby Azure Cosmos DB používá mv-expand
k rozbalení tašky vlastností pro properties.writeLocations, pak pro konkrétní pole projektu a omezení výsledků dále na properties.writeLocations.locationName hodnoty odpovídající hodnotám USA – východ nebo USA – západ.
Resources
| where type =~ 'microsoft.documentdb/databaseaccounts'
| project id, name, writeLocations = (properties.writeLocations)
| mv-expand writeLocations
| project id, name, writeLocation = tostring(writeLocations.locationName)
| where writeLocation in ('East US', 'West US')
| summarize by id, name
az graph query -q "Resources | where type =~ 'microsoft.documentdb/databaseaccounts' | project id, name, writeLocations = (properties.writeLocations) | mv-expand writeLocations | project id, name, writeLocation = tostring(writeLocations.locationName) | where writeLocation in ('East US', 'West US') | summarize by id, name"
Trezory klíčů s názvem předplatného
Následující dotaz ukazuje složité použití join
typu leftouter. Dotaz omezuje připojenou tabulku na prostředky předplatných a s project
tím, aby zahrnovala pouze původní id předplatného pole a pole názvu přejmenované na SubName. Přejmenování join
pole zabrání jeho přidání jako názvu1, protože pole již v prostředcích existuje. Původní tabulka se filtruje where
a následující project
tabulka obsahuje sloupce z obou tabulek. Výsledkem dotazu jsou všechny trezory klíčů, které zobrazují typ, název trezoru klíčů a název předplatného, ve kterém se nachází.
Resources
| join kind=leftouter (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| where type == 'microsoft.keyvault/vaults'
| project type, name, SubName
az graph query -q "Resources | join kind=leftouter (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId | where type == 'microsoft.keyvault/vaults' | project type, name, SubName"
Výpis databází SQL a jejich elastických fondů
Následující dotaz používá leftouter join
k propojení prostředků služby SQL Database a souvisejících elastických fondů, pokud nějaké mají.
Resources
| where type =~ 'microsoft.sql/servers/databases'
| project databaseId = id, databaseName = name, elasticPoolId = tolower(tostring(properties.elasticPoolId))
| join kind=leftouter (
Resources
| where type =~ 'microsoft.sql/servers/elasticpools'
| project elasticPoolId = tolower(id), elasticPoolName = name, elasticPoolState = properties.state)
on elasticPoolId
| project-away elasticPoolId1
az graph query -q "Resources | where type =~ 'microsoft.sql/servers/databases' | project databaseId = id, databaseName = name, elasticPoolId = tolower(tostring(properties.elasticPoolId)) | join kind=leftouter ( Resources | where type =~ 'microsoft.sql/servers/elasticpools' | project elasticPoolId = tolower(id), elasticPoolName = name, elasticPoolState = properties.state) on elasticPoolId | project-away elasticPoolId1"
Výpis virtuálních počítačů se síťovým rozhraním a veřejnou IP adresou
Tento dotaz používá dva levé join
příkazy k propojení virtuálních počítačů vytvořených pomocí modelu nasazení Resource Manager, souvisejících síťových rozhraní a všech veřejných IP adres souvisejících s těmito síťovými rozhraními.
Resources
| where type =~ 'microsoft.compute/virtualmachines'
| extend nics=array_length(properties.networkProfile.networkInterfaces)
| mv-expand nic=properties.networkProfile.networkInterfaces
| where nics == 1 or nic.properties.primary =~ 'true' or isempty(nic)
| project vmId = id, vmName = name, vmSize=tostring(properties.hardwareProfile.vmSize), nicId = tostring(nic.id)
| join kind=leftouter (
Resources
| where type =~ 'microsoft.network/networkinterfaces'
| extend ipConfigsCount=array_length(properties.ipConfigurations)
| mv-expand ipconfig=properties.ipConfigurations
| where ipConfigsCount == 1 or ipconfig.properties.primary =~ 'true'
| project nicId = id, publicIpId = tostring(ipconfig.properties.publicIPAddress.id))
on nicId
| project-away nicId1
| summarize by vmId, vmName, vmSize, nicId, publicIpId
| join kind=leftouter (
Resources
| where type =~ 'microsoft.network/publicipaddresses'
| project publicIpId = id, publicIpAddress = properties.ipAddress)
on publicIpId
| project-away publicIpId1
az graph query -q "Resources | where type =~ 'microsoft.compute/virtualmachines' | extend nics=array_length(properties.networkProfile.networkInterfaces) | mv-expand nic=properties.networkProfile.networkInterfaces | where nics == 1 or nic.properties.primary =~ 'true' or isempty(nic) | project vmId = id, vmName = name, vmSize=tostring(properties.hardwareProfile.vmSize), nicId = tostring(nic.id) | join kind=leftouter ( Resources | where type =~ 'microsoft.network/networkinterfaces' | extend ipConfigsCount=array_length(properties.ipConfigurations) | mv-expand ipconfig=properties.ipConfigurations | where ipConfigsCount == 1 or ipconfig.properties.primary =~ 'true' | project nicId = id, publicIpId = tostring(ipconfig.properties.publicIPAddress.id)) on nicId | project-away nicId1 | summarize by vmId, vmName, vmSize, nicId, publicIpId | join kind=leftouter ( Resources | where type =~ 'microsoft.network/publicipaddresses' | project publicIpId = id, publicIpAddress = properties.ipAddress) on publicIpId | project-away publicIpId1"
Zobrazení seznamu všech rozšíření nainstalovaných na virtuálním počítači
Nejprve tento dotaz používá extend
typ prostředku virtuálních počítačů k získání ID velkými písmeny (toupper()
), získání názvu a typu operačního systému a získání velikosti virtuálního počítače.
Získání ID prostředku je dobrým způsobem, jak se připravit na připojení k jiné vlastnosti. Potom dotaz použije join
druh jako levý k získání rozšíření virtuálních počítačů tak, že se shoduje s velkými písmeny substring
ID rozšíření. Část ID před "/extensions/<ExtensionName>" je stejný formát jako ID virtuálních počítačů, takže tuto vlastnost použijeme pro join
. summarize
se pak použije s make_list
názvem rozšíření virtuálního počítače ke kombinování názvu každého rozšíření, kde id, OSName, OSType a VMSize jsou stejné do jedné vlastnosti pole. Nakonec jsme order by
malé písmeno OSName s asc. Ve výchozím nastavení order by
je sestupné.
Resources
| where type == 'microsoft.compute/virtualmachines'
| extend
JoinID = toupper(id),
OSName = tostring(properties.osProfile.computerName),
OSType = tostring(properties.storageProfile.osDisk.osType),
VMSize = tostring(properties.hardwareProfile.vmSize)
| join kind=leftouter(
Resources
| where type == 'microsoft.compute/virtualmachines/extensions'
| extend
VMId = toupper(substring(id, 0, indexof(id, '/extensions'))),
ExtensionName = name
) on $left.JoinID == $right.VMId
| summarize Extensions = make_list(ExtensionName) by id, OSName, OSType, VMSize
| order by tolower(OSName) asc
az graph query -q "Resources | where type == 'microsoft.compute/virtualmachines' | extend JoinID = toupper(id), OSName = tostring(properties.osProfile.computerName), OSType = tostring(properties.storageProfile.osDisk.osType), VMSize = tostring(properties.hardwareProfile.vmSize) | join kind=leftouter( Resources | where type == 'microsoft.compute/virtualmachines/extensions' | extend VMId = toupper(substring(id, 0, indexof(id, '/extensions'))), ExtensionName = name ) on \$left.JoinID == \$right.VMId | summarize Extensions = make_list(ExtensionName) by id, OSName, OSType, VMSize | order by tolower(OSName) asc"
Vyhledání účtů úložiště s konkrétní značkou ve skupině prostředků
Následující dotaz používá vnitřní join
propojení účtů úložiště se skupinami prostředků, které mají zadaný název značky a hodnotu značky rozlišující malá a velká písmena.
Resources
| where type =~ 'microsoft.storage/storageaccounts'
| join kind=inner (
ResourceContainers
| where type =~ 'microsoft.resources/subscriptions/resourcegroups'
| where tags['Key1'] =~ 'Value1'
| project subscriptionId, resourceGroup)
on subscriptionId, resourceGroup
| project-away subscriptionId1, resourceGroup1
az graph query -q "Resources | where type =~ 'microsoft.storage/storageaccounts' | join kind=inner ( ResourceContainers | where type =~ 'microsoft.resources/subscriptions/resourcegroups' | where tags['Key1'] =~ 'Value1' | project subscriptionId, resourceGroup) on subscriptionId, resourceGroup | project-away subscriptionId1, resourceGroup1"
Pokud je nutné vyhledat název a hodnotu značky nerozlišující malá a velká písmena, použijte mv-expand
s parametrem bagexpansion . Tento dotaz používá více kvót než předchozí dotaz, takže použijte mv-expand
pouze v případě potřeby.
Resources
| where type =~ 'microsoft.storage/storageaccounts'
| join kind=inner (
ResourceContainers
| where type =~ 'microsoft.resources/subscriptions/resourcegroups'
| mv-expand bagexpansion=array tags
| where isnotempty(tags)
| where tags[0] =~ 'key1' and tags[1] =~ 'value1'
| project subscriptionId, resourceGroup)
on subscriptionId, resourceGroup
| project-away subscriptionId1, resourceGroup1
az graph query -q "Resources | where type =~ 'microsoft.storage/storageaccounts' | join kind=inner ( ResourceContainers | where type =~ 'microsoft.resources/subscriptions/resourcegroups' | mv-expand bagexpansion=array tags | where isnotempty(tags) | where tags[0] =~ 'key1' and tags[1] =~ 'value1' | project subscriptionId, resourceGroup) on subscriptionId, resourceGroup | project-away subscriptionId1, resourceGroup1"
Sloučení výsledků ze dvou dotazů do jednoho výsledku
Následující dotaz používá union
k získání výsledků z tabulky ResourceContainers a jejich přidání do výsledků z tabulky Resources .
ResourceContainers
| where type=='microsoft.resources/subscriptions/resourcegroups' | project name, type | limit 5
| union (Resources | project name, type | limit 5)
az graph query -q "ResourceContainers | where type=='microsoft.resources/subscriptions/resourcegroups' | project name, type | limit 5 | union (Resources | project name, type | limit 5)"
Získání virtuálních sítí a podsítí síťových rozhraní
Regulární výraz parse
slouží k získání názvů virtuální sítě a podsítí z vlastnosti ID prostředku. I když parse
umožňuje získat data ze složitého pole, je optimální přistupovat k vlastnostem přímo, pokud existují místo použití parse
.
Resources
| where type =~ 'microsoft.network/networkinterfaces'
| project id, ipConfigurations = properties.ipConfigurations
| mvexpand ipConfigurations
| project id, subnetId = tostring(ipConfigurations.properties.subnet.id)
| parse kind=regex subnetId with '/virtualNetworks/' virtualNetwork '/subnets/' subnet
| project id, virtualNetwork, subnet
az graph query -q "Resources | where type =~ 'microsoft.network/networkinterfaces' | project id, ipConfigurations = properties.ipConfigurations | mvexpand ipConfigurations | project id, subnetId = tostring(ipConfigurations.properties.subnet.id) | parse kind=regex subnetId with '/virtualNetworks/' virtualNetwork '/subnets/' subnet | project id, virtualNetwork, subnet"
Shrnutí virtuálního počítače rozšířenými stavy napájení
Tento dotaz používá rozšířené vlastnosti virtuálních počítačů ke shrnutí podle stavů napájení.
Resources
| where type == 'microsoft.compute/virtualmachines'
| summarize count() by tostring(properties.extended.instanceView.powerState.code)
az graph query -q "Resources | where type == 'microsoft.compute/virtualmachines' | summarize count() by tostring(properties.extended.instanceView.powerState.code)"
Další kroky
- Podívejte se na ukázky úvodních dotazů.
- Přečtěte si další informace o dotazovacím jazyce.
- Přečtěte si další informace o tom, jak prozkoumat prostředky.