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

使用Get-AzMetric查询数据磁盘指标返回BadRequest错误的解决问询

解决Get-AzMetric通过磁盘ResourceId获取指标报BadRequest的问题

问题根源

你使用的指标名称Data Disk Read Bytes/Sec和Data Disk Write Bytes/Sec是虚拟机资源专属指标,并非托管磁盘自身的指标。托管磁盘对应的读写指标名称为Disk Read Bytes/Sec和Disk Write Bytes/Sec,错误的指标名称直接导致请求被拒绝,返回BadRequest。

解决方案步骤

1. 确认磁盘支持的指标

先执行以下命令查看目标磁盘的所有可用指标,验证正确的指标名称:

$resourceId = "/subscriptions/XXXXX/resourceGroups/rg-xxxxx/providers/Microsoft.Compute/disks/disk-xxxx-01"
Get-AzMetricDefinition -ResourceId $resourceId | Select-Object Name, Unit

输出结果中会明确显示磁盘支持的指标列表,其中包含Disk Read Bytes/Sec和Disk Write Bytes/Sec。

2. 修正单磁盘指标获取代码

替换指标名称为磁盘专属名称,调整后的可运行代码:

# 磁盘对应的正确指标名称
$readMetricName = "Disk Read Bytes/Sec"
$writeMetricName = "Disk Write Bytes/Sec"

$endTime = Get-Date
$startTime = $endTime.AddDays(-30)
$resourceId = "/subscriptions/XXXXX/resourceGroups/rg-xxxxx/providers/Microsoft.Compute/disks/disk-xxxx-01"

# 获取读吞吐量最大值(建议用1小时粒度,避免30天内小粒度数据超出查询限制)
$readMaxMetric = Get-AzMetric -ResourceId $resourceId `
    -StartTime $startTime -EndTime $endTime `
    -TimeGrain 01:00:00 `
    -MetricName $readMetricName `
    -AggregationType Maximum

# 获取写吞吐量最大值
$writeMaxMetric = Get-AzMetric -ResourceId $resourceId `
    -StartTime $startTime -EndTime $endTime `
    -TimeGrain 01:00:00 `
    -MetricName $writeMetricName `
    -AggregationType Maximum

# 输出结果
Write-Host "磁盘 $resourceId 30天内读吞吐量最大值: $($readMaxMetric.Data.Maximum) Bytes/Sec"
Write-Host "磁盘 $resourceId 30天内写吞吐量最大值: $($writeMaxMetric.Data.Maximum) Bytes/Sec"

如果必须使用1分钟粒度,建议拆分时间范围分批查询(如按天查询),避免单次请求数据点过多触发Azure Monitor的查询限制。

3. 批量获取订阅内所有Premium SSD数据磁盘的指标

实现自动化遍历订阅内所有Premium SSD数据磁盘,批量获取指标最大值:

# 定义核心参数
$readMetricName = "Disk Read Bytes/Sec"
$writeMetricName = "Disk Write Bytes/Sec"
$endTime = Get-Date
$startTime = $endTime.AddDays(-30)
$timeGrain = "01:00:00"

# 筛选订阅内所有Premium SSD数据磁盘(排除OS磁盘)
$premiumDataDisks = Get-AzDisk | Where-Object {
    $_.Sku.Name -eq "Premium_LRS" -and $_.OsType -eq $null
}

# 遍历磁盘处理指标
foreach ($disk in $premiumDataDisks) {
    Write-Host "正在处理磁盘: $($disk.Name)" -ForegroundColor Cyan
    try {
        # 获取读最大值
        $readMax = Get-AzMetric -ResourceId $disk.Id `
            -StartTime $startTime -EndTime $endTime `
            -TimeGrain $timeGrain `
            -MetricName $readMetricName `
            -AggregationType Maximum
        
        # 获取写最大值
        $writeMax = Get-AzMetric -ResourceId $disk.Id `
            -StartTime $startTime -EndTime $endTime `
            -TimeGrain $timeGrain `
            -MetricName $writeMetricName `
            -AggregationType Maximum
        
        # 整理并输出结果
        [PSCustomObject]@{
            DiskName = $disk.Name
            ResourceId = $disk.Id
            MaxReadBytesPerSec = if ($readMax.Data) { $readMax.Data.Maximum } else { "无数据" }
            MaxWriteBytesPerSec = if ($writeMax.Data) { $writeMax.Data.Maximum } else { "无数据" }
        } | Format-Table -AutoSize
    }
    catch {
        Write-Host "处理磁盘 $($disk.Name) 失败: $($_.Exception.Message)" -ForegroundColor Red
    }
}

额外注意事项

  • 确保当前账户拥有Microsoft.Insights/metrics/read权限(Monitoring Reader或Contributor角色默认包含该权限)。
  • 若磁盘在30天内无IO操作,会返回"无数据",属于正常情况。
  • 若需更细粒度的历史数据,可将30天拆分为多个小时间段(如每天查询一次),避免触发查询限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:25:16