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. Beberapa tabel dapat digunakan dengan operator join atau union untuk mendapatkan properti dari jenis sumber daya terkait. Berikut adalah daftar tabel yang tersedia di Resource Graph:

Tabel Resource Graph Bisakah join tabel lainnya? Deskripsi
Sumber Ya Tabel default jika tidak ada yang ditentukan dalam kueri. Sebagian besar jenis sumber daya dan properti Resource Manager ada di sini.
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).
AdvisorResources Yes (pratinjau) Mencakup sumber daya terkait dengan Microsoft.Advisor.
AlertsManagementResources Yes (pratinjau) Mencakup sumber daya terkait dengan Microsoft.AlertsManagement.
DesktopVirtualizationResources Ya Mencakup sumber daya terkait dengan Microsoft.DesktopVirtualization.
ExtendedLocationResources Tidak Mencakup sumber daya terkait dengan Microsoft.ExtendedLocation.
GuestConfigurationResources Tidak Mencakup sumber daya terkait dengan Microsoft.GuestConfiguration.
HealthResources Yes (pratinjau) Mencakup sumber daya terkait dengan Microsoft.ResourceHealth/availabilitystatuses.
IoTSecurityResources Tidak Mencakup sumber daya terkait dengan Microsoft.IoTSecurity.
KubernetesConfigurationResources Tidak Mencakup sumber daya terkait dengan Microsoft.KubernetesConfiguration.
MaintenanceResources Sebagian, bergabung ke saja. (pratinjau) Mencakup sumber daya terkait dengan Microsoft.Maintenance.
PatchAssessmentResources Tidak Mencakup sumber daya terkait dengan penilaian patch Azure Virtual Machines.
PatchInstallationResources Tidak Mencakup sumber daya terkait dengan penginstalan patch Azure Virtual Machines.
PolicyResources Ya Mencakup sumber daya terkait dengan Microsoft.PolicyInsights.
RecoveryServicesResources Sebagian, bergabung ke saja. (pratinjau) Mencakup sumber daya terkait dengan Microsoft.DataProtection dan Microsoft.RecoveryServices.
SecurityResources Yes (pratinjau) Mencakup sumber daya terkait dengan Microsoft.Security.
ServiceHealthResources Tidak (pratinjau) Mencakup sumber daya terkait dengan Microsoft.ResourceHealth/events.
WorkloadMonitorResources Tidak Mencakup sumber daya terkait dengan Microsoft.WorkloadMonitor.

Untuk daftar lengkap, termasuk jenis sumber daya, lihat Referensi: Tabel dan jenis sumber daya yang didukung.

Catatan

Sumber daya adalah tabel default. Saat mengkueri tabel Sumber Daya, nama tabel tidak perlu diberikan kecuali join atau union digunakan. Namun, praktik yang disarankan adalah selalu menyertakan tabel awal dalam kueri.

Gunakan Penjelajah Resource Graph di portal untuk menemukan jenis sumber daya apa yang tersedia di setiap tabel. 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, kedua jenis tersebut dapat digunakan untuk bergabung ke sumber daya dari tabel Sumber Daya.

Resources
| join ResourceContainers on subscriptionId
| limit 1

Kueri berikut menunjukkan penggunaan join yang lebih kompleks. Pertama, kueri menggunakan project untuk mendapatkan bidang dari Sumber Daya untuk jenis sumber daya brankas 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. Penggantian nama bidang menghindari join menambahkannya sebagai nama1 karena properti sudah diproyeksikan dari Sumber Daya. 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 melihat jenis sumber daya mana yang memiliki 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
hitung Hitungan brankas kunci
distinct Menampilkan sumber daya yang berisi penyimpanan
perpanjang Menghitung komputer virtual berdasarkan jenis OS
gabung Key vault dengan nama langganan Gabung versi yang didukung: innerunique, inner, leftouter. Batas 3 join dalam satu kueri, 1 di antaranya dapat berupa tabel silang join. Jika semua penggunaan join tabel silang antara Sumber Daya dan ResourceContainers, maka 3 tabel silang join diperbolehkan. Strategi bergabung khusus, seperti bergabung dengan siaran, tidak diizinkan. Untuk tabel mana yang dapat menggunakan join, lihat 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 penulisan 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 Hitung sumber daya Azure Hanya halaman pertama yang disederhanakan
ambil Mencantumkan semua alamat IP publik Sinonim dari limit. Tidak berfungsi dengan Lewati.
teratas Tampilkan lima komputer virtual pertama berdasarkan nama dan jenis OS-nya
union Menggabungkan hasil dari dua kueri menjadi satu hasil Tabel tunggal diizinkan: T| union [kind=inner|outer] [withsource=ColumnName] Tabel. Batas 3 union kaki dalam satu kueri. Resolusi fuzzy dari union tabel kaki tidak diizinkan. Dapat digunakan dalam satu tabel atau di antara tabel Sumber Daya dan ResourceContainers.
di mana Menampilkan sumber daya yang berisi penyimpanan

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

Untuk mendukung pengalaman portal "Buka Kueri", Penjelajah Azure Resource Graph 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, yang mencakup 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: Kueri semua sumber daya dalam hierarki grup manajemen bernama My Management Group dengan ID myMG.

  • URI REST API

    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 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 tugas untuk cakupan yang diberikan, 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.

  • . - Bungkus nama properti seperti: ['propertyname.withaperiod']

    Contoh kueri yang membungkus properti odata.type:

    where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']
    
  • $ - Escape karakter dalam nama properti. Karakter escape yang digunakan tergantung pada shell yang berjalan Resource Graph.

    • bash - \

      Contoh kueri yang keluar dari properti $type di Bash:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
      
    • cmd - Jangan meng-escape karakter $.

    • PowerShell - `

      Contoh kueri yang keluar dari properti $type di PowerShell:

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

Langkah berikutnya