Azure磁盘IOPS及读写延迟获取:Log Analytics报错与PowerShell方案问询
嘿,我来帮你梳理几个可行的方案——不用依赖PerfMon计数器或者纠结Log Analytics的报错,直接通过PowerShell就能拿到Azure VM磁盘的IOPS和读写延迟数据,和Azure门户展示的是同一数据源哦。
直接用PowerShell获取Azure磁盘性能数据
Azure Monitor提供了原生的指标API,我们可以用Get-AzMetric cmdlet直接拉取磁盘的核心性能指标,完全绕开PerfMon计数器。
1. 查询单个磁盘的IOPS与读写延迟
先给你一个可直接复用的脚本,替换成你的资源信息就能运行:
# 替换成你的订阅、资源组和磁盘名称 $subscriptionId = "你的订阅ID" $resourceGroupName = "你的资源组名" $diskName = "目标磁盘名称" # 设置Azure上下文 Set-AzContext -Subscription $subscriptionId # 获取磁盘的资源ID $disk = Get-AzDisk -ResourceGroupName $resourceGroupName -Name $diskName $diskResourceId = $disk.Id # 拉取过去24小时的核心指标(5分钟粒度) $metrics = Get-AzMetric -ResourceId $diskResourceId ` -MetricName "DiskReadOperationsPerSecond", "DiskWriteOperationsPerSecond", "DiskReadLatency", "DiskWriteLatency" ` -TimeGrain 00:05:00 ` -StartTime (Get-Date).AddHours(-24) ` -EndTime (Get-Date) # 格式化输出结果 foreach ($metric in $metrics) { Write-Host "`n=== $($metric.Name.LocalizedValue) ===" $metric.Data | Select-Object TimeStamp, Average | Format-Table -AutoSize }
这里的指标对应关系:
DiskReadOperationsPerSecond:每秒磁盘读取操作数(读IOPS)DiskWriteOperationsPerSecond:每秒磁盘写入操作数(写IOPS)DiskReadLatency:平均磁盘读取延迟(单位:毫秒)DiskWriteLatency:平均磁盘写入延迟(单位:毫秒)
2. 批量查询VM关联的所有磁盘
如果想一次性拿到某台VM的所有磁盘数据,可以先获取VM的磁盘列表,再批量查询:
$vmName = "目标VM名称" $vm = Get-AzVM -ResourceGroupName $resourceGroupName -Name $vmName # 遍历系统盘+数据盘 foreach ($disk in $vm.StorageProfile.DataDisks + $vm.StorageProfile.OsDisk) { $diskResourceId = (Get-AzDisk -ResourceGroupName $resourceGroupName -Name $disk.Name).Id Write-Host "`n--- 磁盘: $($disk.Name) ---" $metrics = Get-AzMetric -ResourceId $diskResourceId ` -MetricName "DiskReadOperationsPerSecond", "DiskWriteOperationsPerSecond", "DiskReadLatency", "DiskWriteLatency" ` -TimeGrain 00:05:00 ` -StartTime (Get-Date).AddHours(-24) $metrics.Data | Select-Object @{Name="指标"; Expression={$_.MetricName}}, TimeStamp, Average | Format-Table -AutoSize }
(可选)Log Analytics查询报错的小提示
如果你之后还是想搞定Log Analytics的查询,常见报错原因一般是这两个:
- 没有给VM配置诊断设置,把
LogicalDisk(*)\Avg. Disk sec/Write这类PerfMon计数器推送到Log Analytics工作区 - 查询语法有误,正确的Kusto查询示例应该是:
Perf | where ObjectName == "LogicalDisk" and CounterName in ("Avg. Disk sec/Write", "Avg. Disk sec/Read") | where Computer == "你的VM名称" | summarize avg(CounterValue) by CounterName, bin(TimeGenerated, 5m) | render timechart
不过既然你想绕开PerfMon,前面的PowerShell方法肯定更直接。
内容的提问来源于stack exchange,提问作者Norrin Rad
相关产品推荐
相关产品推荐

