Speciális Resource Graph lekérdezésminták

Az Azure Resource Graph-fal végzett lekérdezések megértéséhez először a lekérdezés nyelvét kell alapszinten megismernie. Ha még nem ismeri az Azure Data Explorert, javasoljuk, hogy tekintse át az alapokat a keresett erőforrásokra vonatkozó kérések összeállításának megértéséhez.

A következő speciális lekérdezéseken vezetjük végig:

Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.

Nyelvi támogatás

Az Azure Resource Graph-ot az Azure CLI (bővítményen keresztül) és az Azure PowerShell (modulon keresztül) támogatja. Mielőtt a következő lekérdezések bármelyikét végrehajtaná, ellenőrizze, hogy a környezet készen áll-e. A kiválasztott parancshéj környezet telepítéséhez és ellenőrzéséhez lásd: Azure CLI és Azure PowerShell.

Erőforrástípusok és API-verziók megjelenítése

Resource Graph elsősorban az erőforrás-szolgáltatói API legújabb, nem előzetes verziójú verzióját használja az erőforrás-tulajdonságokhoz GET a frissítés során. Bizonyos esetekben a használt API-verzió felül lett bírálva, hogy aktuálisabb vagy szélesebb körben használt tulajdonságokat biztosítson az eredményekben. Az alábbi lekérdezés az egyes erőforrástípusok tulajdonságainak gyűjtéséhez használt API-verziót részletezi:

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"

Virtuálisgép-méretezési csoport kapacitásának és méretének lekérése

Ez a lekérdezés a virtuálisgép-méretezési csoportok erőforrásait keresi meg, és különböző adatokat kér le, többet között a méretezési csoport virtuálisgép-méretét és kapacitását. Ez a lekérdezés a toint() függvénnyel képezi le a kapacitást egy számmá, amely így rendezhető lesz. Végül a rendszer egyéni elnevezett tulajdonságokká nevezi át az oszlopokat.

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"

Oszlopok eltávolítása az eredményekből

Az alábbi lekérdezés az erőforrások előfizetésenkénti megszámlálására, join az előfizetés részleteinek a ResourceContainers táblából való kombinálására, majd project-away néhány oszlop eltávolítására használatossummarize.

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"

Összes címkenév listázása

Ez a lekérdezés a címkével kezdi, majd felépít egy JSON-objektumot, amely listázza az összes egyedi címkét és annak típusát.

Resources
| project tags
| summarize buildschema(tags)
az graph query -q "Resources | project tags | summarize buildschema(tags)"

Reguláris kifejezésekkel egyező virtuális gépek

Ez a lekérdezés olyan virtuális gépeket keres, amelyek egyeznek egy reguláris kifejezéssel (más néven regex-szel). A regex @ egyezések lehetővé teszik számunkra, hogy meghatározzuk a megfeleltetendő regexet, azaz .^Contoso(.*)[0-9]+$ A reguláris kifejezés definíciójának magyarázata:

  • ^ – Az egyezésnek a sztring elején kell kezdődnie.
  • Contoso – A kis- és nagybetűket megkülönböztető sztring.
  • (.*) – Egy alkifejezés egyezése:
    • . – Egyezik bármely egyetlen karakterrel (az új sor kivételével).
    • * – Az előző elemmel nullaszor vagy többször egyezik.
  • [0-9] – Karaktercsoport-egyezés a 0 és 9 közötti számokhoz.
  • + – Az előző elemmel egyszer vagy többször egyezik.
  • $ – Az előző elemmel történő egyezésnek a sztring végén kell lennie.

A név alapján történő egyezéseket követően a lekérdezés levetíti és ábécé sorrendbe rendezi a neveket.

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"

Az Azure Cosmos DB listázása adott írási helyekkel

Az azure Cosmos DB-erőforrásokra vonatkozó alábbi lekérdezési korlátok a properties.writeLocations tulajdonságcsomagjának kibontására, mv-expand majd adott mezők kivetítésére és az eredmények további korlátozására vonatkoznak a properties.writeLocations.locationName értékekre, amelyek megfelelnek az USA keleti régiójának vagy az USA nyugati régiójának.

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"

Kulcstartók előfizetés nevével

Az alábbi lekérdezés a kind és a joinleftouter összetett használatát mutatja be. A lekérdezés az összekapcsolt táblát előfizetési erőforrásokra korlátozza, és project csak az eredeti mező subscriptionId azonosítóját és az Alnévre átnevezett névmezőt tartalmazza. A mező átnevezése join nem adja hozzá név1-ként , mivel a mező már létezik az erőforrásokban. Az eredeti táblázat szűrése a következővel where történik, és az alábbiak project mindkét tábla oszlopait tartalmazzák. A lekérdezés eredménye az összes olyan kulcstartó, amely a típust, a kulcstartó nevét és az előfizetés nevét jeleníti meg.

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"

SQL-adatbázisok és rugalmas készleteik listázása

Az alábbi lekérdezés a leftouterjoin használatával egyesíti SQL Database erőforrásokat és a kapcsolódó rugalmas készleteiket, ha vannak ilyenek.

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"

Virtuális gépek listázása azok hálózati adapterével és nyilvános IP-címével

Ez a lekérdezés két bal oldalijoin parancsot használ a Resource Manager üzemi modellel létrehozott virtuális gépek, azok kapcsolódó hálózati adapterei és az ezekhez a hálózati adapterekhez kapcsolódó nyilvános IP-címek összekapcsolásához.

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"

A virtuális gépre telepített összes bővítmény listázása

Először is ez a lekérdezés a virtuális gépek erőforrástípusán használja extend az azonosító nagybetűs lekéréséhez (toupper()) az azonosítót, lekérheti az operációs rendszer nevét és típusát, valamint lekérheti a virtuális gép méretét. Az erőforrás-azonosító nagybetűs lekérése jó módja annak, hogy felkészüljön egy másik tulajdonsághoz való csatlakozásra. Ezután a lekérdezés a kind (típus) és a leftouter (maradék) használatával join kéri le a virtuálisgép-bővítményeket a bővítmény azonosítójának nagybetűs substring megadásával. Az azonosító "/extensions/<ExtensionName>" előtti része ugyanaz a formátum, mint a virtuális gépek azonosítója, ezért ezt a tulajdonságot használjuk a joinkövetkezőhöz: . summarize ezután a virtuálisgép-bővítmény nevében a paranccsal make_list kombinálja az egyes bővítmények nevét, ahol az azonosító, az OSName, az OSType és a VMSize egyetlen tömbtulajdonságban megegyezik. Végül a order by kisbetűs OSName az asc. Alapértelmezés szerint order by a csökkenő érték.

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"

Adott címkével rendelkező tárfiókok keresése az erőforráscsoportban

Az alábbi lekérdezés egy belsőjoin használatával csatlakoztatja a tárfiókokat egy megadott, kis- és nagybetűkre érzékeny címkenévvel és címkeértékkel rendelkező erőforráscsoportokkal.

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"

Ha a kis- és nagybetűket nem megkülönböztető címkenevet és címkeértéket kell keresnie, használja mv-expand a bagexpansion paraméterrel. Ez a lekérdezés több kvótát használ, mint az előző lekérdezés, ezért csak akkor használja mv-expand , ha szükséges.

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"

Két lekérdezés eredményeinek egyesítése egyetlen eredményben

Az alábbi lekérdezés a ResourceContainers táblából származó eredmények lekérésére és az erőforrások táblából származó eredményekhez való hozzáadására használjaunion.

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

Virtuális hálózatok és hálózati adapterek alhálózatainak lekérése

Használjon reguláris kifejezést parse a virtuális hálózat és az alhálózatok nevének lekéréséhez az erőforrás-azonosító tulajdonságból. Bár parse lehetővé teszi az adatok beolvasását egy összetett mezőből, optimális, ha a tulajdonságokat közvetlenül éri el, ha léteznek a használata parsehelyett.

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"

Virtuális gép összegzése a bővített energiaállapot-tulajdonság alapján

Ez a lekérdezés a virtuális gépek kiterjesztett tulajdonságait használja az energiaállapotok szerinti összegzéshez.

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

Következő lépések