如何用Azure Graph一次性查询所有Azure虚拟机的VM Agent状态?
解决方案
可以通过Azure Resource Graph(ARG)单次查询获取所有虚拟机的VM Agent状态,核心是显式指定提取properties.extended.instanceView.vmAgent路径下的嵌套属性,以下是可行的查询语句:
Resources | where type == 'microsoft.compute/virtualmachines' | project VMName = name, ResourceGroup = resourceGroup, VMAgent运行状态 = properties.extended.instanceView.vmAgent.statuses[0].displayStatus, VMAgent版本 = properties.extended.instanceView.vmAgent.vmAgentVersion, 最后心跳时间 = properties.extended.instanceView.vmAgent.lastHeartbeatTimestamp | order by ResourceGroup, VMName
关键说明
- Azure Resource Graph默认不会返回深层嵌套属性,必须通过
project关键字明确指定要提取的VM Agent相关字段 statuses[0].displayStatus对应VM Agent的核心运行状态,通常返回Ready表示Agent正常运行;若VM未启用Agent,该字段会返回null- 可添加
| where isnotnull(VMAgent运行状态)过滤掉未启用Agent的虚拟机
关联扩展状态的进阶查询
如果需要同时查看VM Agent托管的扩展状态,验证Agent工作是否正常,可以使用关联查询:
let 虚拟机列表 = Resources | where type == 'microsoft.compute/virtualmachines' | project 虚拟机ID = id, VM名称 = name, 资源组 = resourceGroup, VMAgent状态 = properties.extended.instanceView.vmAgent.statuses[0].displayStatus; let 扩展列表 = Resources | where type == 'microsoft.compute/virtualmachines/extensions' | project 关联虚拟机ID = split(id, '/virtualMachines/')[0], 扩展名称 = name, 扩展状态 = properties.statuses[0].displayStatus; 虚拟机列表 | join kind=leftouter 扩展列表 on $left.虚拟机ID == $right.关联虚拟机ID | project VM名称, 资源组, VMAgent状态, 扩展名称, 扩展状态
这个查询会将每台虚拟机的Agent状态与安装的扩展状态关联展示,便于排查Agent是否能正常管理扩展。
内容的提问来源于stack exchange,提问作者Alfredo Fernandez
相关产品推荐
相关产品推荐

