了解 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
資料表時,除非使用 或 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 | 具有訂用帳戶名稱的金鑰保存庫 | 支持的聯結類別: innerunique、 inner、 leftouter 和 fullouter。 單一查詢中的三 join 個限制,其中一個可能是跨數據表 join 。 如果所有跨數據表使用都在 Resource 和 ResourceContainers 之間,則允許三個跨數據表join join 。 不允許自定義聯結策略,例如廣播聯結。 針對可使用 join 的數據表,請移至 Resource Graph 數據表。 |
limit | 列出所有公用IP位址 | 的 take 同義字。 不適用於 Skip。 |
mvexpand | 舊版運算子,請改用 mv-expand 。 RowLimit 最大值為 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
下一步
- Azure Resource Graph 查詢語言 入門查詢 和 進階查詢。
- 深入瞭解如何 探索 Azure 資源。