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:
- Her kaynak türü için API sürümünü göster
- Sanal makine ölçek kümesi kapasitesini ve boyutunu alma
- Sonuçlardan sütunları kaldırma
- Tüm etiket adlarını listeleme
- Normal ifade tarafından eşleştirilen sanal makineler
- Azure Cosmos DB'nin belirli yazma konumlarını listeleme
- Abonelik adıyla anahtar kasaları
- SQL Veritabanı ve elastik havuzlarını listeleme
- Sanal makineleri ağ arabirimi ve genel IP ile listeleme
- Sanal makinede yüklü tüm uzantıları listeleme
- Kaynak grubunda belirli bir etikete sahip depolama hesaplarını bulma
- İki sorgudan elde edilen sonuçları tek bir sonuçta birleştirme
- Ağ arabirimlerinin sanal ağlarını ve alt ağlarını alma
- Sanal makineyi güç durumlarının genişletilmiş özelliğine göre özetleme
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.
Her kaynak türü için API sürümünü göster
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 olan karmaşı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 join
zaten 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 leftouter 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 join
kullanırız. summarize
daha 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 iç 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 parse
yerine 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
- Bkz. Başlangıç sorguları örnekleri.
- Sorgu dili hakkında daha fazla bilgi edinin.
- Kaynakları keşfetme hakkında daha fazla bilgi edinin.