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

如何监控Azure存储账户的IOPS并判断是否被限流?

监控Azure存储账户IOPS及限流状态的实用方法

我很理解你在调试性能问题时需要追踪存储账户IOPS和限流情况的痛点——不管是应用、VM还是ASR复制场景,这都是定位瓶颈的关键。下面分享几种实用的方法,涵盖实时查看、长期监控以及脚本化的方案:

一、实时监控与限流判断(Azure门户)

  • 直接进入你的存储账户,找到监控 > 指标面板
  • 重点关注这几个核心指标:
    • Total Requests:总请求数,结合时间维度快速感知负载波动
    • Success Server Latency:成功请求的服务器端延迟,如果延迟突然飙升,大概率是触发了限流
    • Throttling Errors:最直接的限流指标——只要数值大于0,就说明当前有请求被限流
    • IOPS:拆分查看Read IOPS和Write IOPS,对比账户默认的20000上限,就能判断是否接近或达到阈值

二、长期监控方案(Azure Monitor)

  • 利用Azure Monitor的警报规则实现主动预警:
    1. 在存储账户的监控面板创建新警报规则
    2. 选择Throttling Errors指标,设置阈值(比如大于0),触发后可通过邮件、短信或逻辑应用发送通知
    3. 也可以给IOPS设置预警阈值,比如当总IOPS达到上限的80%时触发提醒,提前避免限流
  • 另外,创建**工作簿(Workbooks)**可以可视化IOPS和限流指标的历史趋势,方便后续复盘性能问题

三、PowerShell/API脚本化方案

如果需要自定义定期收集数据,以下是实用的PowerShell示例:

获取实时IOPS和限流数据

# 替换为你的存储账户名称和资源组
$storageAccountName = "your-storage-account"
$resourceGroupName = "your-resource-group"
$subscriptionId = "your-subscription-id"

# 获取过去1小时的读写IOPS数据(每分钟粒度)
Get-AzMetric -ResourceId "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Storage/storageAccounts/$storageAccountName" `
  -MetricName "ReadIOPS", "WriteIOPS" `
  -TimeGrain 00:01:00 `
  -StartTime (Get-Date).AddHours(-1)

# 获取过去1小时的限流错误数
Get-AzMetric -ResourceId "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Storage/storageAccounts/$storageAccountName" `
  -MetricName "ThrottlingErrors" `
  -TimeGrain 00:01:00 `
  -StartTime (Get-Date).AddHours(-1)

定期保存数据到本地文件

你可以把逻辑封装成脚本,用Windows任务计划或Azure自动化账户定期执行,将数据导出到CSV:

$outputPath = "C:\storage-iops-logs.csv"
$currentTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$resourceId = "/subscriptions/your-subscription-id/resourceGroups/your-resource-group/providers/Microsoft.Storage/storageAccounts/your-storage-account"

# 获取最近1分钟的读写IOPS平均值
$readIops = (Get-AzMetric -ResourceId $resourceId -MetricName "ReadIOPS" -TimeGrain 00:01:00 -StartTime (Get-Date).AddMinutes(-1)).Data.Average
$writeIops = (Get-AzMetric -ResourceId $resourceId -MetricName "WriteIOPS" -TimeGrain 00:01:00 -StartTime (Get-Date).AddMinutes(-1)).Data.Average

# 获取最近1分钟的限流错误总数
$throttlingErrors = (Get-AzMetric -ResourceId $resourceId -MetricName "ThrottlingErrors" -TimeGrain 00:01:00 -StartTime (Get-Date).AddMinutes(-1)).Data.Total

# 写入CSV文件(首次执行可先写入表头)
"$currentTime,$readIops,$writeIops,$throttlingErrors" | Out-File -FilePath $outputPath -Append -Encoding utf8

补充提示

  • 存储账户的IOPS上限是账户级别的,要监控总读写IOPS之和
  • 高级存储账户的IOPS上限更高,需对应调整监控阈值
  • 应用日志中如果出现HTTP 429(Too Many Requests)状态码,也明确表示请求被限流了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:57:18