Memahami bahasa kueri Azure Resource Graph

Bahasa kueri untuk Azure Resource Graph mendukung banyak operator dan fungsi. Masing-masing bekerja dan beroperasi berdasarkan Kusto Query Language (KQL). Untuk mempelajari tentang bahasa kueri yang digunakan oleh Resource Graph, mulailah dengan tutorial untuk KQL.

Artikel ini mencakup komponen bahasa yang didukung oleh Resource Graph:

Tabel Resource Graph

Grafik Sumber Daya menyediakan beberapa tabel untuk data yang disimpannya tentang jenis sumber daya Azure Resource Manager dan propertinya. Tabel Resource Graph dapat digunakan dengan join operator untuk mendapatkan properti dari jenis sumber daya terkait.

Tabel Resource Graph mendukung join ragam:

Tabel Resource Graph Bisakah join tabel lainnya? Deskripsi
AdvisorResources Ya Mencakup sumber daya terkait dengan Microsoft.Advisor.
AlertsManagementResources Ya Mencakup sumber daya terkait dengan Microsoft.AlertsManagement.
AppServiceResources Ya Mencakup sumber daya terkait dengan Microsoft.Web.
AuthorizationResources Ya Mencakup sumber daya terkait dengan Microsoft.Authorization.
AWSResources Ya Mencakup sumber daya terkait dengan Microsoft.AwsConnector.
AzureBusinessContinuityResources Ya Mencakup sumber daya terkait dengan Microsoft.AzureBusinessContinuity.
ChaosResources Ya Mencakup sumber daya terkait dengan Microsoft.Chaos.
CommunityGalleryResources Ya Mencakup sumber daya terkait dengan Microsoft.Compute.
ComputeResources Ya Mencakup sumber daya yang terkait dengan Microsoft.Compute Virtual Machine Scale Sets.
DesktopVirtualizationResources Ya Mencakup sumber daya terkait dengan Microsoft.DesktopVirtualization.
DnsResources Ya Mencakup sumber daya terkait dengan Microsoft.Network.
EdgeOrderResources Ya Mencakup sumber daya terkait dengan Microsoft.EdgeOrder.
ElasticsanResources Ya Mencakup sumber daya terkait dengan Microsoft.ElasticSan.
ExtendedLocationResources Ya Mencakup sumber daya terkait dengan Microsoft.ExtendedLocation.
FeatureResources Ya Mencakup sumber daya terkait dengan Microsoft.Features.
GuestConfigurationResources Ya Mencakup sumber daya terkait dengan Microsoft.GuestConfiguration.
HealthResourceChanges Ya Mencakup sumber daya terkait dengan Microsoft.Resources.
HealthResources Ya Mencakup sumber daya terkait dengan Microsoft.ResourceHealth.
InsightsResources Ya Mencakup sumber daya terkait dengan Microsoft.Insights.
IoTSecurityResources Ya Mencakup sumber daya terkait dengan Microsoft.IoTSecurity dan Microsoft.IoTFirmwareDefense.
KubernetesConfigurationResources Ya Mencakup sumber daya terkait dengan Microsoft.KubernetesConfiguration.
KustoResources Ya Mencakup sumber daya terkait dengan Microsoft.Kusto.
MaintenanceResources Ya Mencakup sumber daya terkait dengan Microsoft.Maintenance.
ManagedServicesResources Ya Mencakup sumber daya terkait dengan Microsoft.ManagedServices.
MigrateResources Ya Mencakup sumber daya terkait dengan Microsoft.OffAzure.
NetworkResources Ya Mencakup sumber daya terkait dengan Microsoft.Network.
OrbitalResources Ya Mencakup sumber daya terkait dengan Microsoft.Orbital.
PatchAssessmentResources Ya Termasuk sumber daya yang terkait dengan penilaian Microsoft.Compute patch Azure Virtual Machines dan Microsoft.HybridCompute.
PatchInstallationResources Ya Termasuk sumber daya yang terkait dengan penginstalan Microsoft.Compute patch Azure Virtual Machines dan Microsoft.HybridCompute.
PolicyResources Ya Mencakup sumber daya terkait dengan Microsoft.PolicyInsights.
RecoveryServicesResources Ya Mencakup sumber daya terkait dengan Microsoft.DataProtection dan Microsoft.RecoveryServices.
ResourceChanges Ya Mencakup sumber daya terkait dengan Microsoft.Resources.
ResourceContainerChanges Ya Mencakup sumber daya terkait dengan Microsoft.Resources.
ResourceContainers Ya Mencakup jenis dan data sumber daya grup manajemen (Microsoft.Management/managementGroups) langganan (Microsoft.Resources/subscriptions) dan grup sumber daya (Microsoft.Resources/subscriptions/resourcegroups).
Sumber Ya Tabel default jika tabel tidak ditentukan dalam kueri. Sebagian besar jenis sumber daya dan properti Resource Manager ada di sini.
SecurityResources Ya Mencakup sumber daya terkait dengan Microsoft.Security.
ServiceFabricResources Ya Mencakup sumber daya terkait dengan Microsoft.ServiceFabric.
ServiceHealthResources Ya Mencakup sumber daya terkait dengan Microsoft.ResourceHealth/events.
SpotResources Ya Mencakup sumber daya terkait dengan Microsoft.Compute.
SupportResources Ya Mencakup sumber daya terkait dengan Microsoft.Support.
TagsResources Ya Mencakup sumber daya terkait dengan Microsoft.Resources/tagnamespaces.

Untuk daftar tabel yang menyertakan jenis sumber daya, buka tabel Azure Resource Graph dan referensi jenis sumber daya.

Catatan

Resources adalah tabel default. Saat mengkueri Resources tabel, tidak diperlukan untuk memberikan nama tabel kecuali join atau union digunakan. Tetapi praktik yang direkomendasikan adalah selalu menyertakan tabel awal dalam kueri.

Untuk menemukan jenis sumber daya mana yang tersedia di setiap tabel, gunakan Resource Graph Explorer di portal. Sebagai alternatif, gunakan kueri seperti <tableName> | distinct type untuk mendapatkan daftar jenis sumber daya yang didukung oleh tabel Resource Graph yang ada di lingkungan Anda.

Kueri berikut menunjukkan join sederhana. Hasil kueri menyatukan kolom dan setiap nama kolom duplikat dari tabel yang digabungkan, ResourceContainers dalam contoh ini, ditambahkan dengan 1. Karena tabel ResourceContainers memiliki jenis untuk langganan dan grup sumber daya, salah satu jenis mungkin digunakan untuk bergabung ke sumber daya dari Resources tabel.

Resources
| join ResourceContainers on subscriptionId
| limit 1

Kueri berikut menunjukkan penggunaan join yang lebih kompleks. Pertama, kueri menggunakan project untuk mendapatkan bidang dari Resources untuk jenis sumber daya vault Azure Key Vault. Langkah berikutnya menggunakan join untuk menggabungkan hasil dengan ResourceContainers dengan jenis langganan pada properti yang ada di tabel pertama project dan tabel gabungan project. Ganti nama bidang menghindari penambahan sebagai nama1 karena properti sudah diproyeksikan dari Resources.join Hasil kueri adalah jenis tampilan kubah kunci tunggal, nama, lokasi, dan grup sumber daya brankas kunci, bersama dengan nama langganan tempat penyimpanannya.

Resources
| where type == 'microsoft.keyvault/vaults'
| project name, type, location, subscriptionId, resourceGroup
| join (ResourceContainers | where type=='microsoft.resources/subscriptions' | project SubName=name, subscriptionId) on subscriptionId
| project type, name, location, resourceGroup, SubName
| limit 1

Catatan

Saat membatasi hasil join dengan project, properti yang digunakan oleh join untuk menghubungkan dua tabel, subscriptionId dalam contoh di atas, harus disertakan dalam project.

Properti yang diperluas

Sebagai fitur pratinjau, beberapa jenis sumber daya di Resource Graph memiliki lebih banyak properti terkait jenis yang tersedia untuk kueri di luar properti yang disediakan oleh Azure Resource Manager. Kumpulan nilai ini, yang dikenal sebagai properti yang diperluas, ada pada jenis sumber daya yang didukung di properties.extended. Untuk memperlihatkan tipe sumber daya dengan properti yang diperluas, gunakan kueri berikut:

Resources
| where isnotnull(properties.extended)
| distinct type
| order by type asc

Contoh: Dapatkan hitungan komputer virtual dengan instanceView.powerState.code:

Resources
| where type == 'microsoft.compute/virtualmachines'
| summarize count() by tostring(properties.extended.instanceView.powerState.code)

Elemen bahasa khusus Resource Graph

Sintaksis kueri bersama (pratinjau)

Sebagai fitur pratinjau, kueri bersama dapat diakses langsung di kueri Resource Graph. Skenario ini memungkinkan untuk membuat kueri standar sebagai kueri bersama dan menggunakannya kembali. Untuk memanggil kueri bersama di dalam kueri Resource Graph, gunakan sintaksis {{shared-query-uri}}. URI kueri bersama adalah ID Sumber Daya kueri bersama pada halaman Pengaturan untuk kueri tersebut. Dalam contoh ini, URI kueri bersama kita adalah /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS. URI ini mengarah ke langganan, grup sumber daya, dan nama lengkap kueri bersama yang ingin kita rujuk di kueri lain. Kueri ini sama dengan yang dibuat di Tutorial: Buat dan bagikan kueri.

Catatan

Anda tidak dapat menyimpan kueri yang merujuk kueri bersama sebagai kueri bersama.

Contoh 1: Gunakan hanya kueri bersama:

Hasil kueri Resource Graph ini sama dengan kueri yang disimpan dalam kueri bersama.

{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}

Contoh 2: Sertakan kueri bersama sebagai bagian dari kueri yang lebih besar:

Kueri ini pertama-tama menggunakan kueri bersama, lalu menggunakan limit untuk lebih membatasi hasil.

{{/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS}}
| where properties_storageProfile_osDisk_osType =~ 'Windows'

Elemen bahasa KQL yang didukung

Resource Graph mendukung subset KQL jenis data, fungsi skalar, operator skalar, dan fungsi agregasi. Operator tabular tertentu didukung oleh Resource Graph, beberapa di antaranya memiliki perilaku yang berbeda.

Operator tabular/tingkat atas yang didukung

Berikut adalah daftar operator tabular KQL yang didukung oleh Resource Graph dengan sampel tertentu:

KQL Kueri sampel Resource Graph Catatan
count Hitungan brankas kunci
distinct Menampilkan sumber daya yang berisi penyimpanan
perpanjang Menghitung komputer virtual berdasarkan jenis OS
join Key vault dengan nama langganan Gabungkan rasa yang didukung: innerunique, inner, leftouter, dan fullouter. Batas tiga join dalam satu kueri, salah satunya mungkin berupa tabel joinsilang . Jika semua penggunaan lintas tabel join adalah antara Resource dan ResourceContainers, tiga tabel join silang diizinkan. Strategi bergabung khusus, seperti bergabung dengan siaran, tidak diizinkan. Untuk tabel mana yang dapat menggunakan join, buka tabel Resource Graph.
batas Mencantumkan semua alamat IP publik Sinonim dari take. Tidak berfungsi dengan Lewati.
mvexpand Operator lama, gunakan mv-expand sebagai gantinya. RowLimit maksimal 400. Defaultnya adalah 128.
mv-expand Mencantumkan Azure Cosmos DB dengan lokasi tulis tertentu RowLimit maksimal 400. Defaultnya adalah 128. Batas 2 mv-expand dalam satu kueri.
urutan Mencantumkan sumber daya yang diurutkan menurut nama Sinonim dari sort
Mengurai Mendapatkan jaringan virtual dan subnet antarmuka jaringan Sangat optimal untuk mengakses properti secara langsung jika ada daripada menggunakan parse.
Proyek Mencantumkan sumber daya yang diurutkan menurut nama
project-away Menghapus kolom dari hasil
urutkan Mencantumkan sumber daya yang diurutkan menurut nama Sinonim dari order
meringkas Menghitung sumber daya Azure Hanya halaman pertama yang disederhanakan
take Mencantumkan semua alamat IP publik Sinonim dari limit. Tidak berfungsi dengan Lewati.
top Tampilkan lima komputer virtual pertama berdasarkan nama dan jenis OS-nya
union Menggabungkan hasil dari dua kueri menjadi satu hasil Tabel tunggal diizinkan: | union [kind= inner|outer] [withsource=ColumnName] Table. Batas tiga union kaki dalam satu kueri. Resolusi fuzzy dari union tabel kaki tidak diizinkan. Mungkin digunakan dalam satu tabel atau antara tabel Sumber Daya dan ResourceContainers .
di mana Menampilkan sumber daya yang berisi penyimpanan

Ada batas default tiga join dan tiga mv-expand operator dalam satu kueri Resource Graph SDK. Anda dapat meminta peningkatan batas ini untuk penyewa Anda melalui Bantuan + dukungan.

Untuk mendukung pengalaman portal Open Query , Azure Resource Graph Explorer memiliki batas global yang lebih tinggi daripada Resource Graph SDK.

Cakupan kueri

Cakupan langganan atau grup manajemen dari mana sumber daya dikembalikan oleh default kueri ke daftar langganan berdasarkan konteks pengguna yang diotorisasi. Jika grup manajemen atau daftar langganan tidak ditentukan, cakupan kueri adalah semua sumber daya, dan menyertakan sumber daya yang didelegasikan Azure Lighthouse .

Daftar langganan atau grup manajemen yang diminta dapat didefinisikan secara manual untuk mengubah ruang lingkup hasil. Contoh, properti managementGroups REST API mengambil ID grup pengelolaan, yang berbeda dari nama grup pengelolaan. Ketika managementGroups ditentukan, sumber daya dari 10.000 langganan pertama di atau di bawah hierarki grup manajemen yang ditentukan disertakan. managementGroups tidak dapat digunakan bersamaan dengan subscriptions.

Contoh: Mengkueri semua sumber daya dalam hierarki grup manajemen bernama My Management Group dengan ID myMG.

  • REST API URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01
    
  • Isi Permintaan

    {
      "query": "Resources | summarize count()",
      "managementGroups": ["myMG"]
    }
    

Parameter memungkinkan AuthorizationScopeFilter Anda mencantumkan penetapan Azure Policy dan penetapan peran kontrol akses berbasis peran Azure (Azure RBAC) dalam AuthorizationResources tabel yang diwarisi dari cakupan atas. Parameter AuthorizationScopeFilter menerima nilai berikut untuk PolicyResources tabel dan AuthorizationResources :

  • AtScopeAndBelow (default jika tidak ditentukan): Mengembalikan penugasan untuk cakupan yang diberikan dan semua cakupan anak.
  • AtScopeAndAbove: Mengembalikan penugasan untuk cakupan yang diberikan dan semua cakupan induk, tetapi bukan cakupan anak.
  • AtScopeAboveAndBelow: Mengembalikan penugasan untuk cakupan tertentu, semua cakupan induk, dan semua cakupan anak.
  • AtScopeExact: Mengembalikan penugasan hanya untuk cakupan yang diberikan; tidak ada cakupan induk atau anak yang disertakan.

Catatan

Untuk menggunakan AuthorizationScopeFilter parameter , pastikan untuk menggunakan versi API 2021-06-01-preview atau yang lebih baru dalam permintaan Anda.

Contoh: Dapatkan semua penugasan kebijakan di grup manajemen myMG dan lingkup Akar Penyewa (atas).

  • REST API URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • Minta Sampel Isi

    {
      "options": {
        "authorizationScopeFilter": "AtScopeAndAbove"
      },
      "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'",
      "managementGroups": ["myMG"]
    }
    

Contoh: Dapatkan semua penugasan kebijakan di langganan mySubscriptionId, grup manajemen, dan lingkup Akar Penyewa.

  • REST API URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • Minta Sampel Isi

    {
      "options": {
        "authorizationScopeFilter": "AtScopeAndAbove"
      },
      "query": "PolicyResources | where type =~ 'Microsoft.Authorization/PolicyAssignments'",
      "subscriptions": ["mySubscriptionId"]
    }
    

Karakter escape

Beberapa nama properti, seperti yang menyertakan . atau $, harus dibungkus atau diescape dalam kueri atau nama properti diinterpretasikan secara salah dan tidak memberikan hasil yang diharapkan.

  • Titik (.): Bungkus nama ['propertyname.withaperiod'] properti menggunakan tanda kurung siku.

    Contoh kueri yang membungkus properti odata.type:

    where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']
    
  • Tanda dolar ($): Lolos dari karakter dalam nama properti. Karakter escape yang digunakan tergantung pada shell yang menjalankan Resource Graph.

    • Bash: Gunakan garis miring terbalik (\) sebagai karakter escape.

      Contoh kueri yang keluar dari properti $type di Bash:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
      
    • cmd: Jangan lolos dari karakter tanda dolar ($).

    • PowerShell: Gunakan backtick (`) sebagai karakter escape.

      Contoh kueri yang keluar dari properti $type di PowerShell:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.`$type
      

Langkah berikutnya