You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure Resource Graph Kusto查询中体现订阅的管理组层级?

问题:在Azure Monitor工作簿中实现带管理组层级的订阅参数

我想要创建一个Azure Monitor工作簿,其中包含可选择订阅的下拉参数。我知晓"subscription picker"参数类型的存在,但希望在参数中包含订阅所属的管理组名称。

当前我使用以下Kusto查询:

resourcecontainers
| where type == "microsoft.resources/subscriptions"
| extend mgs = properties.managementGroupAncestorsChain
| project name, mgs

该查询返回的结果如下:

namemgs
Sub1[{"displayName": "Test and Prod Development Group","name": "testprod" }, {"displayName": "Root Group","name": "b266655a-542b-4ab8-8d8f-6ce387638820"}]
Sub2[{"displayName":"Sandbox","name":"sandbox"},{"displayName":"Root Group","name":"b266655a-542b-4ab8-8d8f-6ce387638820"}]

由于无法构建树形参数,我希望将层级格式化为如下形式:

nameparent
Sub1Root Group -> Test and Prod Development Group
Sub2Root Group -> Sandbox

我尝试使用mv-apply运算符,但多次尝试后发现该运算符不被Azure Resource Graph查询支持,请问有哪些可用的替代方案或运算符?


解决方案

可以利用Azure Resource Graph支持的数组处理函数来实现需求,无需使用mv-apply。以下是修改后的查询:

resourcecontainers
| where type == "microsoft.resources/subscriptions"
| extend mgs = properties.managementGroupAncestorsChain
// 反转管理组链数组,让根管理组排在最前面
| extend reversedMgs = array_reverse(mgs)
// 从反转后的数组中提取所有管理组的displayName字段,组成新数组
| extend mgDisplayNames = array_extract_all(reversedMgs, "displayName")
// 将数组中的displayName用" -> "连接成字符串
| extend parent = strcat_array(mgDisplayNames, " -> ")
// 保留需要的字段
| project name, parent

关键步骤说明:

  • array_reverse:原mgs数组的顺序是从最接近订阅的子管理组到根管理组,反转后让根组在前,符合"Root Group -> 子组"的展示顺序。
  • array_extract_all:从数组的每个对象中提取displayName属性,生成仅包含管理组名称的数组。
  • strcat_array:将数组中的元素用指定的分隔符(->)拼接成单个字符串,得到期望的层级格式。

这个查询完全基于Azure Resource Graph支持的运算符和函数,可以直接用于工作簿的参数配置中,生成包含管理组层级的订阅选项。


内容的提问来源于stack exchange,提问作者Peter Bons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 08:13:13