Gelişmiş Kaynak Grafı sorgu örnekleri

Azure Kaynak Grafiği ile sorguları anlamanın il adımı, Sorgu Dili’nin temel bir anlayışıdır. Azure Veri Gezgini’ne önceden aşina değilseniz, aradığınız kaynaklar için isteklerin nasıl oluşturulacağını anlamak üzere temelleri gözden geçirmeniz önerilir.

Aşağıdaki gelişmiş sorguları inceleyeceğiz:

Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

Dil desteği

Azure CLI (bir uzantı yoluyla) ve Azure PowerShell (bir modül yoluyla), Azure Kaynak Grafiği’ni destekler. Aşağıdaki sorgulardan herhangi birini çalıştırmadan önce ortamınızın hazır olduğundan emin olun. Seçtiğiniz kabuk ortamını yükleme ve doğrulama adımları için, bkz. Azure CLI ve Azure PowerShell.

Kaynak türlerini ve API sürümlerini gösterme

Kaynak Grafı bir güncelleştirme sırasında kaynak özellikleri için GET öncelikle Kaynak Sağlayıcısı API'sinin en son önizleme dışı sürümünü kullanır. Bazı durumlarda, sonuçlarda daha güncel veya yaygın olarak kullanılan özellikleri sağlamak için kullanılan API sürümü geçersiz kılınmıştır. Aşağıdaki sorgu, her kaynak türündeki özellikleri toplamak için kullanılan API sürümünün ayrıntılarını içerir:

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"

Sanal makine ölçek kümesi kapasitesini ve boyutunu alma

Bu sorgu, sanal makine ölçek kümesi kaynaklarını arar ve sanal makine boyutu ve ölçek kümesinin kapasitesini içeren çeşitli ayrıntıları alır. Sorgu, sıralanabilmesi için ve kapasiteyi bir sayıya dönüştürmek amacıyla toint() işlevini kullanır. Son olarak sütunlar, özel olarak adlandırılmış özellikler kullanılarak yeniden adlandırılır.

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"

Sonuçlardan sütunları kaldırma

Aşağıdaki sorgu, kaynakları aboneliğe göre saymak, join ResourceContainers tablosundaki abonelik ayrıntılarıyla birleştirmek ve ardından project-away sütunlardan bazılarını kaldırmak için kullanırsummarize.

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"

Tüm etiket adlarını listeleme

Bu sorgu etiketle başlar ve tüm benzersiz etiket adlarını ve bunlara karşılık gelen türleri listeleyen bir JSON nesnesi oluşturur.

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

Normal ifade tarafından eşleştirilen sanal makineler

Bu sorgu, normal ifadeyle (regex olarak bilinir) eşleşen sanal makineleri arar. regex @ ile eşleşir, eşleşmesi gereken regex değerini tanımlamamıza olanak tanır.^Contoso(.*)[0-9]+$ Bu normal ifade tanımı şöyle açıklanmıştır:

  • ^ - Eşleşme dizenin başında başlamalıdır.
  • Contoso - Büyük/küçük harfe duyarlı dize.
  • (.*) - Alt ifade eşleşmesi:
    • . - Herhangi bir tek karakterle eşleşir (yeni bir satır hariç).
    • * - Önceki öğeyle sıfır veya daha fazla kez eşleşir.
  • [0-9] - 0’dan 9’a kadar olan sayılar için karakter grubu eşleşmesi.
  • + - Önceki öğeyle bir veya daha fazla kez eşleşir.
  • $ - Önceki öğenin eşleşmesi dizenin sonunda gerçekleşmelidir.

Ada göre eşleşmeden sonra sorgu, adı ve siparişleri ada göre artan şekilde yansıtır.

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"

Azure Cosmos DB'nin belirli yazma konumlarını listeleme

Aşağıdaki sorgu Azure Cosmos DB kaynaklarıyla mv-expand sınırlandırılarak properties.writeLocations için özellik paketini genişletir, ardından belirli alanları yansıtıp sonuçları 'Doğu ABD' veya 'Batı ABD' ile eşleşen properties.writeLocations.locationName değerleriyle sınırlandırmaktadır.

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"

Abonelik adıyla anahtar kasaları

Aşağıdaki sorguda, türü leftouter olarak olankarmaşık kullanımı join gösterilmektedir. Sorgu, birleştirilen tabloyu abonelik kaynaklarıyla project ve yalnızca özgün subscriptionId alanını ve SubName olarak yeniden adlandırılan ad alanını içerecek şekilde sınırlar. Alan kaynaklarda joinzaten var olduğundan, alan yeniden adlandırma ad1 olarak eklenmesini önler. Özgün tablo ile where filtrelenmiştir ve aşağıdakiler project her iki tablodaki sütunları içerir. Sorgu sonucu, türü, anahtar kasasının adı ve içinde bulunduğu aboneliğin adını görüntüleyen tüm anahtar kasalarıdır.

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 Veritabanı ve elastik havuzlarını listeleme

Aşağıdaki sorgu, varsa SQL Veritabanı kaynakları ve ilgili elastik havuzlarını bir araya getirmek için sol çıkarıcıyıjoin kullanır.

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"

Sanal makineleri ağ arabirimi ve genel IP ile listeleme

Bu sorgu Resource Manager dağıtım modeliyle oluşturulan sanal makineleri, ilgili ağ arabirimlerini ve bu ağ arabirimleriyle ilgili tüm genel IP adreslerini bir araya getirmek için iki sol çıktıjoin komutu kullanır.

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"

Sanal makinede yüklü tüm uzantıları listeleme

İlk olarak, bu sorgu kimliği büyük harfle (toupper()) almak, işletim sistemi adını ve türünü almak ve sanal makine boyutunu almak için sanal makine kaynak türünü kullanırextend. Kaynak kimliğini büyük harfle almak, başka bir özelliğe katılmaya hazırlanmak için iyi bir yoldur. Ardından sorgujoin, uzantı kimliğinin büyük harflerinden substring birini eşleştirerek sanal makine uzantılarını almak için leftouter olarak tür kullanır. Kimliğin "/extensions/<ExtensionName>" dosyasından önceki bölümü sanal makine kimliğiyle aynı biçimdedir, bu nedenle için bu özelliği joinkullanırız. summarizedaha sonra id, OSName, OSType ve VMSize'ın aynı olduğu her uzantının adını tek bir dizi özelliğinde birleştirmek için sanal makine uzantısının adında ile make_list birlikte kullanılır. Son olarak, asc ile küçük harfli OSName değerini kullandıkorder by. Varsayılan olarak azalan order by değerdir.

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"

Kaynak grubunda belirli bir etikete sahip depolama hesaplarını bulma

Aşağıdaki sorgu, depolama hesaplarını belirtilen büyük/küçük harfe duyarlı etiket adına ve etiket değerine sahip kaynak gruplarına bağlamak için bir join kullanır.

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"

Büyük/küçük harfe duyarsız bir etiket adı ve etiket değeri aramak gerekiyorsa bagexpansion parametresiyle kullanın.mv-expand Bu sorgu önceki sorgudan daha fazla kota kullandığından, yalnızca gerekirse kullanın mv-expand .

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"

İki sorgudan elde edilen sonuçları tek bir sonuçta birleştirme

Aşağıdaki sorgu ResourceContainers tablosundan sonuç almak ve bunları Kaynaklar tablosundan sonuçlara eklemek için kullanırunion.

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

Ağ arabirimlerinin sanal ağlarını ve alt ağlarını alma

Kaynak kimliği özelliğinden sanal ağ ve alt ağ adlarını almak için normal bir ifade parse kullanın. Karmaşık bir alandan veri almayı etkinleştirirken parse , kullanmak parseyerine varsa doğrudan özelliklere erişmek en uygunudur.

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"

Sanal makineyi güç durumlarının genişletilmiş özelliğine göre özetleme

Bu sorgu, güç durumlarına göre özetlemek için sanal makinelerdeki genişletilmiş özellikleri kullanır.

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

Sonraki adımlar