了解 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.IoTSecurity 和 Microsoft.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.Compute 和 Microsoft.HybridCompute 「相關」的資源。 |
PatchInstallationResources | Yes | 包含與 Azure 虛擬機器修補程式安裝 Microsoft.Compute 和 Microsoft.HybridCompute 「相關」的資源。 |
PolicyResources | Yes | 包含與 Microsoft.PolicyInsights 「相關」的資源。 |
RecoveryServicesResources | Yes | 包含與 Microsoft.DataProtection 和 Microsoft.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
資料表時,除非使用 join
或 union
,否則不需要提供資料表名稱。 但建議的做法是在查詢中一律包含初始資料表。
若要探索每個資料表中可用的資源類型,請使用入口網站中的 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 | 金鑰保存庫與訂用帳戶名稱 | 支援的聯結類別:innerunique、inner、leftouter 和 fullouter。 單一查詢中限制三個 join ,其中一個可能是交叉資料表 join 。 如果所有交叉資料表 join 使用都是在 Resource 與 ResourceContainers 之間,則允許三個交叉資料表 join 。 不允許自訂聯結策略 (例如廣播聯結)。 如需哪些資料表可以使用 join ,請移至 Resource Graph 資料表。 |
limit | 列出所有公用 IP 位址 | take 的同義字。 不要與 Skip 搭配使用。 |
mvexpand | 舊版運算子,請改用 mv-expand 。 RowLimit 的上限為 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 支線資料表的模糊解析。 可以在單一資料表內或在 Resources 和 ResourceContainers 資料表之間使用。 |
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
參數會接受 PolicyResources
和 AuthorizationResources
資料表的下列值:
- 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
下一步
- Azure Resource Graph 查詢語言入門查詢和進階查詢。
- 深入了解如何探索 Azure 資源。