共用方式為


了解 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/managementGroups)、訂用帳戶 (Microsoft.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 資料表時,除非使用 joinunion,否則不需要提供資料表名稱。 但建議的做法是在查詢中一律包含初始資料表。

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

下列查詢顯示簡單的 join。 查詢結果會將這些資料行結合在一起,而聯結資料表中任何重複的資料行名稱 (此範例中的 ResourceContainers) 都會附加 1。 當 ResourceContainers 資料表同時具有訂用帳戶和資源群組的類型,這兩種類型都可能用來從 Resources 資料表聯結至資源。

Resources
| join ResourceContainers on subscriptionId
| limit 1

下列查詢顯示 join 的更複雜用法。 首先,查詢會使用 project,從 Azure Key Vault 保存庫資源類型的 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

注意

當使用 project 來限制 join 結果時,join 用來使兩個資料表相關的屬性 (上述範例中的 subscriptionId) 必須包含在 project 中。

擴充屬性

做為「預覽」功能,除了 Azure Resource Manager 所提供的屬性之外,Resource Graph 中的某些資源類型還具有查詢可用的其他類型相關屬性。 這個值集合稱為「擴充屬性」,其存在於 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 範例查詢 備註
計數 計算金鑰保存庫數目
distinct 顯示包含儲存體的資源
extend 依作業系統類型計算的虛擬機器計數
join 金鑰保存庫與訂用帳戶名稱 支援的聯結類別:inneruniqueinnerleftouterfullouter。 單一查詢中限制三個 join,其中一個可能是交叉資料表 join。 如果所有交叉資料表 join 使用都是在 ResourceResourceContainers 之間,則允許三個交叉資料表 join。 不允許自訂聯結策略 (例如廣播聯結)。 如需哪些資料表可以使用 join,請移至 Resource Graph 資料表
limit 列出所有公用 IP 位址 take 的同義字。 不要與 Skip 搭配使用。
mvexpand 舊版運算子,請改用 mv-expandRowLimit 的上限為 2,000。 預設值為 128。
mv-expand 列出具有特定寫入位置的 Azure Cosmos DB RowLimit 的上限為 2,000。 預設值為 128。 單一查詢中的限制為 3 mv-expand
order 列出依名稱排序的資源 sort 的同義字
parse 取得網路介面的虛擬網路和子網路 如果屬性存在,最好直接存取這些屬性,而不是使用 parse
project 列出依名稱排序的資源
project-away 移除結果中的資料行
sort 列出依名稱排序的資源 order 的同義字
summarize 計算的 Azure 資源計數 僅限簡化的第一頁
take 列出所有公用 IP 位址 limit 的同義字。 不要與 Skip 搭配使用。
top 依名稱顯示前五個虛擬機器及其作業系統類型
union 將兩個查詢的結果合併成單一結果 允許的單一資料表:| union [kind= inner|outer] [withsource=ColumnName] Table。 單一查詢中限制三個 union 支線。 不允許 union 支線資料表的模糊解析。 可以在單一資料表內或在 ResourcesResourceContainers 資料表之間使用。
where 顯示包含儲存體的資源

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

為了支援「開放式查詢」入口網站體驗,Azure Resource Graph Explorer 的全域限制高於 Resource Graph SDK。

注意

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

查詢範圍

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

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

範例:查詢管理群組階層內的所有資源,該管理群組的名稱為 My Management Group,其 ID 為 myMG

  • 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 參數會接受 PolicyResourcesAuthorizationResources 資料表的下列值:

  • 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
      

下一步