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

请教:查询Azure磁盘可用空间(GB)及占比的KQL语句是否正确?

你的KQL查询分析与优化

你的这条查询核心逻辑是正确的,能获取Azure磁盘的可用空间(GB)和可用百分比,但存在几个可优化点和潜在问题:

现存问题说明

  • Inner Join可能导致数据丢失:如果某个磁盘仅上报了FreeSpaceMB或FreeSpacePercentage其中一个指标,inner join会直接过滤掉该磁盘数据,导致信息缺失。
  • bin(FreePercent = Val, 1.1)步长不合理:百分比分组用1.1无实际业务意义,通常会选1或0.1来取整。
  • 时间戳不一致:两个子查询的TimeGenerated可能不是同一时间点,最终展示的是FreeSpaceMB对应的时间,无法保证是最新的统一时间数据。
  • 查询效率待提升:两次扫描InsightsMetrics表并执行join,相比合并查询的方式开销更大。

优化后的查询语句

InsightsMetrics
| where Name in ('FreeSpaceMB', 'FreeSpacePercentage')
| summarize arg_max(TimeGenerated, *) by Tags, Computer, Name
| extend Drive = tostring(parse_json(Tags)["vm.azm.ms/mountId"])
| extend 
    SizeGB = iif(Name == 'FreeSpaceMB', bin(toreal(parse_json(Tags)["vm.azm.ms/diskSizeMB"]) / 1024, 0.1), double(null)),
    FreeGB = iif(Name == 'FreeSpaceMB', bin(Val / 1024, 1), double(null)),
    FreePercent = iif(Name == 'FreeSpacePercentage', bin(Val, 1), double(null))
| summarize 
    LatestTime = max(TimeGenerated),
    SizeGB = max(SizeGB),
    FreeGB = max(FreeGB),
    FreePercent = max(FreePercent)
    by Computer, Drive
| project LatestTime, Computer, Drive, SizeGB, FreeGB, FreePercent
| order by Computer asc

优化点说明

  • 合并表扫描:通过where Name in (...)一次扫描表,减少查询开销。
  • 避免数据丢失:用summarize+max聚合同一磁盘的两个指标,即便其中一个指标缺失,也能保留已存在的数据。
  • 统一时间戳:取两个指标的最新时间作为LatestTime,确保展示的是最新有效数据。
  • 合理的取整步长:百分比用bin(Val,1)取整到整数,符合常规需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:55:38