如何监控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的警报规则实现主动预警:
- 在存储账户的监控面板创建新警报规则
- 选择Throttling Errors指标,设置阈值(比如大于0),触发后可通过邮件、短信或逻辑应用发送通知
- 也可以给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
相关产品推荐
相关产品推荐

