如何通过Azure CLI或Bash脚本获取Azure存储账户的容量大小
Azure存储账户占用容量查询方案(Azure CLI/Bash实现)
你需要先安装Azure CLI,且已通过az login完成身份验证,持有对应存储账户的监控数据读取权限。
1. 单存储账户直接查询CLI命令
直接调用Azure监控指标接口的命令如下,把尖括号里的参数替换为你自己的实际值即可:
az monitor metrics list \ --resource /subscriptions/<你的订阅ID>/resourceGroups/<资源组名>/providers/Microsoft.Storage/storageAccounts/<存储账户名> \ --metric "UsedCapacity" \ --aggregation "Average" \ --offset 1h \ --query "value[0].timeseries[0].data[0].average"
- 返回结果的单位是字节,你可以自行除以1024³转换为GB单位。
- 其中
--offset 1h代表查询最近1小时的指标,存储容量指标存在约15分钟的上报延迟,查询时间范围过近可能返回空值。
2. 开箱即用的Bash脚本(支持自动单位转换+批量查询)
下面的脚本可以直接运行,会自动列出你当前订阅下所有存储账户的已用容量,自动转换为易读的MB/GB/TB单位:
#!/bin/bash # 先验证Azure登录状态 az account show > /dev/null 2>&1 if [ $? -ne 0 ]; then echo "请先运行az login登录Azure账户" exit 1 fi # 获取所有存储账户列表 storage_accounts=$(az storage account list --query "[].{id:id, name:name}" -o tsv) echo -e "存储账户名称\t已用容量" echo "----------------------------------------" while read -r id name; do # 查询已用容量 used_bytes=$(az monitor metrics list \ --resource "$id" \ --metric "UsedCapacity" \ --aggregation Average \ --offset 1h \ --query "value[0].timeseries[0].data[0].average" -o tsv) # 空值处理 if [ -z "$used_bytes" ] || [ "$used_bytes" = "None" ]; then used_human="未获取到数据" else # 自动单位转换 if (( used_bytes < 1024**2 )); then used_human=$(printf "%.2f KB" $(echo "$used_bytes / 1024" | bc -l)) elif (( used_bytes < 1024**3 )); then used_human=$(printf "%.2f MB" $(echo "$used_bytes / 1024^2" | bc -l)) elif (( used_bytes < 1024**4 )); then used_human=$(printf "%.2f GB" $(echo "$used_bytes / 1024^3" | bc -l)) else used_human=$(printf "%.2f TB" $(echo "$used_bytes / 1024^4" | bc -l)) fi fi echo -e "$name\t$used_human" done <<< "$storage_accounts"
- 脚本依赖
bc工具做数值计算,大部分Linux发行版默认预装,缺失的话可以用sudo apt install bc(Debian/Ubuntu)或sudo yum install bc(CentOS/RHEL)安装。 - 如果你只需要查询单个存储账户,直接把获取存储账户列表的部分替换成你指定的存储账户资源ID和名称即可。
注意事项
- 存储账户的UsedCapacity指标是所有Blob、File、Queue、Table服务的总占用容量,如果你需要查询单个服务的容量,可以把
--metric参数替换为对应服务的指标:Blob服务用BlobCapacity、文件服务用FileCapacity、队列服务用QueueCapacity、表服务用TableCapacity。 - 指标数据最多保留93天,你可以通过
--start-time和--end-time参数指定更长的时间范围查询历史容量。
内容的提问来源于stack exchange,提问作者Sashin Sahasra
相关产品推荐
相关产品推荐

