【Azure Developer】使用Azure Resource Graph的查询语法的示例
文章“【Azure Developer】在Azure Resource Graph Explorer中查看当前订阅下的所有资源信息列表并导出(如VM的名称,IP地址内网/公网,OS,区域等) ”的另一个示例。
问题描述
使用Azure Resource Graph查询:把这订阅(Subscription ID)下的VM虚拟机和相关磁盘信息拉取一下数据(VM名字,VM的tag,VM的资源ID,硬盘名字,硬盘大小,磁盘的资源ID)
问题答案
根据Azure Resource Graph Explorer中提供的Resources表来查看VM的相关信息。而磁盘相关的信息处于 properties.storageProfile.osDisk 以及 properties.storageProfile.dataDisks中。
示例查询语句为:
resources | where type =~ 'microsoft.compute/virtualmachines' | extend osDisk = properties.storageProfile.osDisk, disks = properties.storageProfile.dataDisks | project name, tags, id, osDisk.name, osDisk.diskSizeGB, osDisk.managedDisk.id, disks[0].name, disks[0].diskSizeGB, disks[1].managedDisk.id, disks[1].name, disks[1].diskSizeGB, disks[1].managedDisk.id, disks[2].name, disks[2].diskSizeGB,disks[2].managedDisk.id
查询结果示例:
附录一:新创建的VM如果时托管类的Disk,则Disk Size信息无法直接在Type == ‘microsoft.compute/virtualmachines’ 中获取到,需要在 type=='microsoft.compute/disks' 资源中关联出来。
参考示例
Resources | where type == "microsoft.compute/virtualmachines" | extend os = properties.storageProfile.imageReference.offer | extend sku = properties.storageProfile.imageReference.sku | extend hostName = properties.osProfile.computerName | extend vmSize = properties.hardwareProfile.vmSize | extend osDiskName = properties.storageProfile.osDisk.name | extend osDiskSize = properties.storageProfile.osDisk.diskSizeGB | extend dataDisks = properties.storageProfile.dataDisks | extend managedDiskId_0= tolower(tostring(dataDisks[0].managedDisk.id)) | extend managedDiskId_1 = tolower(tostring(dataDisks[1].managedDisk.id)) | join kind=leftouter ( Resources | where type == 'microsoft.compute/disks' | project managedDiskId_0 = tolower(id),dataDisk_0_Name=name,dataDisk_0_SizeGB=properties.diskSizeGB) on managedDiskId_0 | join kind=leftouter ( Resources | where type == 'microsoft.compute/disks' | project managedDiskId_1 = tolower(id),dataDisk_1_Name=name,dataDisk_1_SizeGB=properties.diskSizeGB) on managedDiskId_1 | project subscriptionId, vmName = name, resourceGroup, location, hostName, os, sku, osDiskName, osDiskSize, vmSize, dataDisks, managedDiskId_0, dataDisks[0].name, dataDisk_0_diskSizeGB=iif(isnull(dataDisks[0].diskSizeGB),dataDisk_0_SizeGB,dataDisks[0].diskSizeGB), managedDiskId_1, dataDisks[1].name, dataDisk_1_diskSizeGB=iif(isnull(dataDisks[1].diskSizeGB),dataDisk_1_SizeGB,dataDisks[1].diskSizeGB), properties
参考文档:
Azure Virtual Machines : https://docs.microsoft.com/en-us/azure/governance/resource-graph/samples/samples-by-category?tabs=azure-cli#azure-virtual-machines
Query operators : https://docs.microsoft.com/en-us/azure/data-explorer/kusto/query/queries
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?