使用Azure CLI运行Azure Monitor日志分析查询时遇报错
问题解决与正确实现
1. 修正CLI命令语法错误
你执行的命令存在语法错误,az monitor log-analytics的子命令是query,而非-query,多余的短横线导致命令无法被系统识别。正确的基础命令格式:
az monitor log-analytics query -w <工作区ID> --analytics-query "<Kusto查询语句>"
2. 优化Kusto查询以获取已用磁盘空间
要获取所有订阅中VM的已用磁盘空间(非分配空间),需要调整Kusto查询,筛选对应性能计数器并关联VM的订阅、名称等关键信息:
Perf | where ObjectName == "LogicalDisk" and CounterName in ("% Used Space", "Used Space") | where InstanceName != "_Total" // 排除磁盘总统计项 | extend VMName = tostring(parse_json(Tags)["vmName"]), SubscriptionId = tostring(parse_json(Tags)["subscriptionId"]) | project SubscriptionId, VMName, DiskName = InstanceName, UsedSpacePercent = iff(CounterName == "% Used Space", CounterValue, ""), UsedSpaceBytes = iff(CounterName == "Used Space", CounterValue * 1024 * 1024, "") // 转换为字节单位,可根据实际计数器单位调整 | summarize arg_max(TimeGenerated, *) by SubscriptionId, VMName, DiskName
3. 完整执行命令示例
将<工作区ID>替换为你的实际工作区ID后执行:
az monitor log-analytics query -w xxxxxx --analytics-query "Perf | where ObjectName == 'LogicalDisk' and CounterName in ('% Used Space', 'Used Space') | where InstanceName != '_Total' | extend VMName = tostring(parse_json(Tags)['vmName']), SubscriptionId = tostring(parse_json(Tags)['subscriptionId']) | project SubscriptionId, VMName, DiskName = InstanceName, UsedSpacePercent = iff(CounterName == '% Used Space', CounterValue, ''), UsedSpaceBytes = iff(CounterName == 'Used Space', CounterValue * 1024 * 1024, '') | summarize arg_max(TimeGenerated, *) by SubscriptionId, VMName, DiskName"
补充说明
- 确保你的Log Analytics工作区已为所有目标VM启用性能计数器收集,且包含
LogicalDisk类别的% Used Space和Used Space计数器。 - 若部分VM的Tags中未包含
vmName或subscriptionId,可改用Computer字段关联VM信息,或检查VM诊断设置是否正确传递了这些元数据。
内容的提问来源于stack exchange,提问作者HandyMan
相关产品推荐
相关产品推荐

