了解 Azure Resource Graph 查詢語言

Azure Resource Graph 的查詢語言支援許多運算元和函式。 每個工作和運作都以 Kusto 查詢語言 (KQL) 為基礎。 若要了解 Resource Graph 所使用的查詢語言,請從 KQL 的教學課程開始。

本文涵蓋 Resource Graph 支援的語言元件:

Resource Graph 數據表

Resource Graph 會針對儲存 Azure Resource Manager 資源類型及其屬性的數據提供數個數據表。 Resource Graph 數據表可以搭配 join 運算符使用,以從相關的資源類型取得屬性。

Resource Graph 資料表支持 join 類別:

Resource Graph 數據表 其他數據表可以嗎 join 描述
AdvisorResources Yes 包含與Microsoft.Advisor相關的資源
AlertsManagementResources Yes 包含與Microsoft.AlertsManagement相關的資源
AppServiceResources Yes 包含與Microsoft.Web相關的資源
AuthorizationResources Yes 包含與Microsoft.Authorization相關的資源
AWSResources Yes 包含與Microsoft.AwsConnector相關的資源
AzureBusinessContinuityResources Yes 包含與Microsoft.AzureBusinessContinuity相關的資源
ChaosResources Yes 包含與Microsoft.Chaos相關的資源
CommunityGalleryResources Yes 包含與Microsoft.Compute相關的資源
ComputeResources Yes 包含與 Microsoft.Compute 虛擬機器擴展集相關的資源。
DesktopVirtualizationResources Yes 包含與Microsoft.DesktopVirtualization相關的資源
DnsResources Yes 包含與Microsoft.Network相關的資源
EdgeOrderResources Yes 包含與Microsoft.EdgeOrder相關的資源
ElasticsanResources Yes 包含與Microsoft.ElasticSan相關的資源
ExtendedLocationResources Yes 包含與Microsoft.ExtendedLocation相關的資源
FeatureResources Yes 包含與Microsoft.Features相關的資源
GuestConfigurationResources Yes 包含與Microsoft.GuestConfiguration相關的資源
HealthResourceChanges Yes 包含與Microsoft.Resources相關的資源
HealthResources Yes 包含與Microsoft.ResourceHealth相關的資源
InsightsResources Yes 包含與Microsoft.Insights相關的資源
IoTSecurityResources Yes 包含與 Microsoft.IoTSecurityMicrosoft.IoTFirmwareDefense相關的資源
KubernetesConfigurationResources Yes 包含與Microsoft.KubernetesConfiguration相關的資源
KustoResources Yes 包含與Microsoft.Kusto相關的資源
MaintenanceResources Yes 包含與Microsoft.Maintenance相關的資源
ManagedServicesResources Yes 包含與Microsoft.ManagedServices相關的資源
MigrateResources Yes 包含與Microsoft.OffAzure相關的資源
NetworkResources Yes 包含與Microsoft.Network相關的資源
OrbitalResources Yes 包含與Microsoft.Orbital相關的資源
PatchAssessmentResources Yes 包含與 Azure 虛擬機器 修補程式評定Microsoft.ComputeMicrosoft.HybridCompute相關的資源
PatchInstallationResources Yes 包含與 Azure 虛擬機器 修補程式安裝和 Microsoft.ComputeMicrosoft.HybridCompute相關的資源
PolicyResources Yes 包含與Microsoft.PolicyInsights相關的資源
RecoveryServicesResources Yes 包含與 Microsoft.DataProtectionMicrosoft.RecoveryServices相關的資源
ResourceChanges Yes 包含與Microsoft.Resources相關的資源
ResourceContainerChanges Yes 包含與Microsoft.Resources相關的資源
ResourceContainers Yes 包含管理群組 ()、訂用帳戶 (Microsoft.Management/managementGroupsMicrosoft.Resources/subscriptions) 和資源群組 (Microsoft.Resources/subscriptions/resourcegroups) 資源類型和數據。
資源 Yes 如果查詢中未定義數據表,則為預設數據表。 大部分的 Resource Manager 資源類型和屬性都在這裡。
SecurityResources Yes 包含與Microsoft.Security相關的資源
ServiceFabricResources Yes 包含與Microsoft.ServiceFabric相關的資源
ServiceHealthResources Yes 包含與Microsoft.ResourceHealth/events相關的資源
SpotResources Yes 包含與Microsoft.Compute相關的資源
SupportResources Yes 包含與Microsoft.Support相關的資源
TagsResources Yes 包含與Microsoft.Resources/tagnamespaces相關的資源

如需包含資源類型的數據表清單,請移至 Azure Resource Graph 資料表和資源類型參考

注意

Resources 是預設數據表。 查詢Resources資料表時,除非使用 或 union ,否則join不需要提供數據表名稱。 但建議的做法是一律在查詢中包含初始數據表。

若要探索每個數據表中可用的資源類型,請在入口網站中使用 Resource Graph 總管。 或者,使用這類 <tableName> | distinct type 查詢來取得指定 Resource Graph 資料表所支援的資源類型清單,這些資源類型存在於您的環境中。

下列查詢顯示簡單的 join。 查詢結果會將數據行混合在一起,而聯結數據表 中任何重複的數據行名稱 ResourceContainers 會附加 1。 由於 ResourceContainers 數據表同時具有訂用帳戶和資源群組的類型,因此任一類型都可以用來從 Resources 數據表聯結至資源。

Resources
| join ResourceContainers on subscriptionId
| limit 1

下列查詢顯示 更複雜的用法 join。 首先,查詢會使用 project 取得 Azure 金鑰保存庫 保存庫資源類型的欄位Resources。 下一個步驟會使用 join 將結果與 ResourceContainers 合併,其中類型是位於第一個數據表 和聯結數據表 project 之 屬性上的project用帳戶。 欄位重新命名會join避免將它新增為 name1,因為屬性已經從 投影。Resources 查詢結果為單一金鑰保存庫,其中顯示金鑰保存庫的名稱、位置和資源群組,以及其所在的訂用帳戶名稱。

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

注意

使用 來限制join結果時,所使用的 join 屬性必須包含project上述範例中的subscriptionId這兩個數據表project

擴充屬性

作為預覽功能,Resource Graph 中的某些資源類型具有更多類型相關屬性,可供查詢超出 Azure Resource Manager 所提供的屬性。 這個稱為 擴充屬性的值集存在於 中 properties.extended支持的資源類型上。 若要顯示具有 擴充屬性的資源類型,請使用下列查詢:

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

範例:依 instanceView.powerState.code取得虛擬機的計數:

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

Resource Graph 自定義語言專案

共用查詢語法 (預覽)

作為預覽功能, 共用查詢 可以直接在 Resource Graph 查詢中存取。 此案例可讓您將標準查詢建立為共用查詢,並重複使用它們。 若要在 Resource Graph 查詢內呼叫共用查詢,請使用 {{shared-query-uri}} 語法。 共用查詢的 URI 是該查詢 設定 頁面上共用查詢的資源識別碼。 在這裡範例中,我們的共享查詢 URI 是 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/SharedQueries/providers/Microsoft.ResourceGraph/queries/Count VMs by OS。 此 URI 會指向我們想要在另一個查詢中參考之共用查詢的訂用帳戶、資源群組和完整名稱。 此查詢與教學課程:建立和共用查詢中所 建立的查詢相同。

注意

您無法將參考共用查詢的查詢儲存為共享查詢。

範例 1:只使用共享查詢:

此 Resource Graph 查詢的結果與儲存在共用查詢中的查詢相同。

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

範例 2:在較大的查詢中包含共用查詢:

此查詢會先使用共用查詢,然後使用 limit 來進一步限制結果。

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

支援的 KQL 語言元素

Resource Graph 支援 KQL 資料類型純量函式、純量運算子和聚合函數的子集。 Resource Graph 支援特定的 表格式運算符 ,其中有些有不同的行為。

支援的表格式/最上層運算符

以下是 Resource Graph 使用特定範例支援的 KQL 表格式運算符清單:

KQL Resource Graph 範例查詢 備註
計數 計算金鑰保存庫
不同 顯示包含記憶體的資源
extend 依 OS 類型計算虛擬機
join 具有訂用帳戶名稱的金鑰保存庫 支持的聯結類別: inneruniqueinnerleftouterfullouter。 單一查詢中的三 join 個限制,其中一個可能是跨數據表 join。 如果所有跨數據表使用都在 Resource 和 ResourceContainers 之間,則允許三個跨數據表joinjoin 不允許自定義聯結策略,例如廣播聯結。 針對可使用 join的數據表,請移至 Resource Graph 數據表
limit 列出所有公用IP位址 take同義字。 不適用於 Skip
mvexpand 舊版運算子,請改用 mv-expandRowLimit 最大值為 400。 預設值為 128。
mv-expand 列出具有特定寫入位置的 Azure Cosmos DB RowLimit 最大值為 400。 預設值為 128。 單一查詢中的限制為 2 mv-expand
order 列出依名稱排序的資源 的同義字 sort
parse 取得網路介面的虛擬網路和子網 如果屬性存在,而不是使用 parse,最好直接存取屬性。
專案 列出依名稱排序的資源
project-away 從結果中移除數據行
sort 列出依名稱排序的資源 的同義字 order
總結 計算 Azure 資源計數 僅限簡化的第一頁
take 列出所有公用IP位址 limit同義字。 不適用於 Skip
top 依名稱顯示前五部虛擬機及其操作系統類型
union 將兩個查詢的結果合併成單一結果 允許單一數據表: | union [kind= inner|outer] [withsource=ColumnName] Table。 單一查詢中三 union 個腿的限制。 不允許腿表模糊解析 union 。 可以在單一數據表內或 ResourcesContainers 數據表之間使用。
where 顯示包含記憶體的資源

單一 Resource Graph SDK 查詢中有三 join 個和三 mv-expand 個運算子的預設限制。 您可以透過 說明 + 支援要求增加租使用者的這些限制。

為了支持 開放式查詢 入口網站體驗,Azure Resource Graph 總管的全域限制高於 Resource Graph SDK。

注意

您無法將數據表當做正確的數據表多次參考,超過1的限制。 如果您這樣做,您會收到錯誤碼 DisallowedMaxNumberOfRemoteTables。

查詢範圍

查詢從中傳回資源的訂用帳戶或 管理群組 範圍,預設會根據授權使用者的內容,將訂用帳戶清單設為訂用帳戶清單。 如果未定義管理群組或訂用帳戶清單,則查詢範圍是所有資源,並包含 Azure Lighthouse 委派的資源。

您可以手動定義要查詢的訂用帳戶或管理群組清單,以變更結果的範圍。 例如,REST API managementGroups 屬性會採用管理群組標識碼,這與管理群組的名稱不同。 指定 時 managementGroups ,會包含來自指定管理群組階層中或下前 10,000 個訂用帳戶的資源。 managementGroups 無法同時與 subscriptions一起使用。

範例:使用標識碼myMG查詢管理My Management Group群組階層內的所有資源。

  • REST API URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-03-01
    
  • 要求本文

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

參數AuthorizationScopeFilter可讓您在繼承自上層範圍的數據表中AuthorizationResources列出 Azure 原則 指派和 Azure 角色型存取控制 (Azure RBAC) 角色指派。 參數AuthorizationScopeFilter會接受 和 AuthorizationResources 資料表的PolicyResources下列值:

  • AtScopeAndBelow (如果未指定則為預設值):傳回指定範圍和所有子範圍的指派。
  • AtScopeAndAbove:傳回指定範圍和所有父範圍,但不是子範圍的指派。
  • AtScopeAboveAndBelow:傳回指定範圍、所有父範圍和所有子範圍的工作分派。
  • AtScopeExact:只傳回指定範圍的指派;不包含父範圍或子範圍。

注意

若要使用 AuthorizationScopeFilter 參數,請務必 在要求中使用 2021-06-01-preview 或更新版本的 API 版本。

範例:取得 myMG 管理群組和租使用者根目錄 (父系) 範圍的所有原則指派

  • REST API URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • 要求本文範例

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

範例:取得 mySubscriptionId 訂用帳戶、管理群組和租使用者根範圍的所有原則指派

  • REST API URI

    POST https://management.azure.com/providers/Microsoft.ResourceGraph/resources?api-version=2021-06-01-preview
    
  • 要求本文範例

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

逸出字元

某些屬性名稱,例如包含 .$的屬性名稱,必須在查詢中包裝或逸出,否則屬性名稱解譯不正確,而且不會提供預期的結果。

  • 點 (.):使用方括弧包裝屬性名稱 ['propertyname.withaperiod']

    包裝 odata.type 屬性的範例查詢:

    where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.['odata.type']
    
  • 貨幣符號 ($): 逸出屬性名稱中的字元。 使用的逸出字元取決於執行 Resource Graph 的殼層。

    • Bash:使用反斜杠 (\) 作為逸出字元。

      在Bash中逸出屬性 $type 的範例查詢:

      where type=~'Microsoft.Insights/alertRules' | project name, properties.condition.\$type
      
    • cmd:不要逸出貨幣符號 ($) 字元。

    • PowerShell:使用反引號 (`) 作為逸出字元。

      在 PowerShell 中逸出屬性 $type 的範例查詢:

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

下一步