如何通过Azure Log Analytics计算Azure Linux虚拟机各挂载磁盘的总容量
实现方案
步骤1:补充采集分区与磁盘类型的映射数据
- 首先在Linux VM上配置Azure Monitor Agent采集映射关系,核心需要采集的字段包括:VM名称、分区挂载路径(对应你现有数据的
Partition name字段)、磁盘类型(OS盘/数据盘)、磁盘LUN ID(用于区分多块数据盘) - 你可以通过采集
lsblk -o NAME,MOUNTPOINT,TYPE,SIZE命令的输出来获取映射关系,Linux环境下默认挂载在/根目录的分区属于OS盘,/mnt路径对应Azure临时盘(非持久化),其余非临时盘挂载点均对应数据盘分区。
步骤2:计算分区总容量并关联映射表统计磁盘容量
你可以直接使用以下KQL查询实现需求,先关联同一分区的使用率和可用空间指标计算分区总容量,再关联映射表聚合到磁盘级别:
// 请将下方的CustomMetricTable替换为你实际存储指标的表名 let metric_data = CustomMetricTable | extend UsedPercent = case(['Metric Name'] == "% Used Space", ['Metric Value'], real(null)), FreeMB = case(['Metric Name'] == "Free Megabytes", ['Metric Value'], real(null)) | summarize UsedPercent = max(UsedPercent), FreeMB = max(FreeMB) by Timestamp, ['VM name'], ['Partition name'], bin(Timestamp, 5m); // 下方DiskMapping为你提前采集的分区磁盘映射表,如果你暂时没采集可先删除这段关联,用下方临时判断规则 let disk_mapping = DiskMapping | project ['VM name'], ['Partition name'], DiskType, DiskLUN, DiskName; metric_data // 过滤无效数据避免除0错误 | where UsedPercent < 100 and UsedPercent > 0 and isnotempty(FreeMB) | extend PartitionTotalMB = (FreeMB / (100 - UsedPercent)) * 100 // 如果你暂时没有采集DiskMapping表,可注释掉下一行join,增加下一行的case判断做临时分类 | join kind=inner disk_mapping on ['VM name'], ['Partition name'] // | extend DiskType = case(['Partition name'] == "/", "OS盘", ['Partition name'] == "/mnt", "临时盘", "数据盘") // 单磁盘多分区场景下按磁盘维度聚合求和得到单盘总容量 | summarize TotalDiskSizeMB = sum(PartitionTotalMB) by ['VM name'], DiskType, DiskLUN, DiskName, bin(Timestamp, 1h) | where Timestamp > ago(24h)
注意事项
- 如果你暂时没有采集映射表,可以注释掉查询中的join关联语句,放开查询中内置的挂载路径临时判断逻辑,即可快速实现OS盘和数据盘的分类统计
- 若单块数据盘划分了多个分区,聚合时必须按磁盘的唯一标识(如LUN ID、磁盘名称)分组求和,避免同一磁盘被重复统计
内容的提问来源于stack exchange,提问作者KrishnaChaitanya67
相关产品推荐
相关产品推荐

