如何通过Resource Graph Explorer正确获取虚拟机CPU与RAM资源数据
修正后的Azure Resource Graph查询
原查询存在两个核心问题:
- 正则提取CPU逻辑错误:原正则表达式匹配规则不符合Azure VM规格的命名格式,导致无法正确提取CPU核心数。
- RAM数据获取错误:误将OS磁盘大小当作VM内存,VM的实际内存是其规格对应的固定值,与磁盘容量无关。
推荐修正方案(关联VM规格资源获取准确数据)
这种方式通过关联microsoft.compute/virtualmachinesizes资源,直接获取对应VM规格的官方CPU和内存数据,避免正则匹配的局限性,且能适配所有Azure VM规格:
resources | where type == 'microsoft.compute/virtualmachines' | extend VmSize = properties.hardwareProfile.vmSize | extend Location = location // 关联同区域的VM规格资源,提取CPU和内存数据 | join kind=leftouter ( resources | where type == 'microsoft.compute/virtualmachinesizes' | project VmSize = name, Location = location, Cpus = properties.numberOfCores, RamGB = toreal(properties.memoryInMB) / 1024 ) on VmSize, Location | project VMName = name, VmSize, Cpus, RamGB | where Cpus > 1
备选方案(仅用正则提取CPU,不推荐)
如果暂时无法关联VM规格资源,可修正正则表达式提取CPU(但无法获取RAM,仅作临时过渡):
resources | where type == 'microsoft.compute/virtualmachines' | extend VmSize = tostring(properties.hardwareProfile.vmSize) // 修正正则:提取规格名称中的数字部分(适配大部分VM规格命名) | extend Cpus = toint(extract(@'(\d+)', 1, VmSize)) | project VMName = name, VmSize, Cpus | where Cpus > 1
关键说明
- 关联VM规格资源的方案是最优选择:Azure的VM规格会持续更新,正则匹配无法覆盖所有新规格,而关联官方资源能保证数据的准确性和时效性。
memoryInMB字段需要转换为GB:VM规格资源中内存以MB为单位,除以1024得到GB值。
内容的提问来源于stack exchange,提问作者Khushboo Chandak
相关产品推荐
相关产品推荐

