如何在我的订阅资源组中检查我在每个azure存储帐户中使用的空间大小。
我无法通过PowerShell,CLI,门户网站找到检查azure存储帐户中使用的空间的方法......
答案 0 :(得分:11)
Azure存储大小包括所有4种服务(Blob,队列,文件,表)。根据我的知识,目前还没有办法计算所有服务的总大小。
但是,您可以使用Azure指标获取Portal上使用的blob空间。请选择监控 - >指标
有关在Azure门户中监控存储帐户的详细信息,请参阅此link。
此外,您可以使用PowerShell来获取blob。你可以使用一个很好的script。
答案 1 :(得分:6)
经过大量搜索,我发现这篇文章非常相关:
使用 Azure Monitor 检查存储帐户的容量。 步骤:
答案 2 :(得分:2)
答案 3 :(得分:1)
$sub = Get-AzSubscription | select Name
$sub | foreach {
Set-AzContext -Subscription $_.Name
$currentSub = $_.Name
$RGs = Get-AzResourceGroup | select ResourceGroupName
$RGs | foreach {
$CurrentRG = $_.ResourceGroupName
$StorageAccounts = Get-AzStorageAccount -ResourceGroupName $CurrentRG | select StorageAccountName
$StorageAccounts | foreach {
$StorageAccount = $_.StorageAccountName
$CurrentSAID = (Get-AzStorageAccount -ResourceGroupName $CurrentRG -AccountName $StorageAccount).Id
$usedCapacity = (Get-AzMetric -ResourceId $CurrentSAID -MetricName "UsedCapacity").Data
$usedCapacityInMB = $usedCapacity.Average / 1024 / 1024
"$StorageAccount,$usedCapacityInMB,$CurrentRG,$currentSub" >> ".\storageAccountsUsedCapacity.csv"
}
}
}
答案 4 :(得分:0)
这是一个.net core
脚本,我使用它来使用最近一小时的平均指标值列出存储帐户的使用情况。
using System;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using Microsoft.Azure.Management.CosmosDB.Fluent.Models;
using Microsoft.Azure.Management.Fluent;
using Microsoft.Azure.Management.Monitor;
using Microsoft.Azure.Management.Monitor.Models;
using Microsoft.Rest.Azure.Authentication;
namespace storagelist
{
class Program
{
static async System.Threading.Tasks.Task Main(string[] args)
{
// to generate my.azureauth file run the follow command:
// az ad sp create-for-rbac --sdk-auth > my.azureauth
var azure = Azure.Authenticate("my.azureauth").WithDefaultSubscription();
var accounts = azure.StorageAccounts.List();
// can get values from my.azureauth
var tenantId = "";
var clientId = "";
var clientSecret = "";
var serviceCreds = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
MonitorManagementClient readOnlyClient = new MonitorManagementClient(serviceCreds);
var oneHour = System.TimeSpan.FromHours(1);
var startDate = DateTime.Now.AddHours(-oneHour.Hours).ToUniversalTime().ToString("o");
string endDate = DateTime.Now.ToUniversalTime().ToString("o");
string timeSpan = startDate + "/" + endDate;
List<string> fileContents = new List<string>();
foreach (var storage in accounts)
{
var response = await readOnlyClient.Metrics.ListAsync(
resourceUri: storage.Id,
timespan: timeSpan,
interval: oneHour,
metricnames: "UsedCapacity",
aggregation: "Average",
resultType: ResultType.Data,
cancellationToken: CancellationToken.None);
foreach (var metric in response.Value)
{
foreach (var series in metric.Timeseries)
{
foreach (var point in series.Data)
{
if (point.Average.HasValue)
{
fileContents.Add($"{storage.Id}, {point.Average.Value}");
break;
}
}
break;
}
break;
}
}
await File.WriteAllLinesAsync("./storage.csv", fileContents);
}
}
}
答案 5 :(得分:0)
要在Powershell中获得此功能,这有点麻烦,但可能对其他人有用(例如清除旧备份): 这是我想出的,它至少应与AzureRM模块6.13.0一起使用:
$azstorcontext = New-AzureStorageContext -StorageAccountName storageaccounthere -StorageAccountKey storageaccountkeyhere
$sizesOverall = @()
$containers = Get-AzureStorageContainer -Context $azstorcontext
foreach ($container in $containers)
{
Write-Output $container.Name
$contblobs = get-azurestorageblob -container $container.name -Context $azstorcontext
Write-Output " Blobs: $($contblobs.count)"
$containersize = ($contblobs | Measure-Object -Sum Length).Sum
Write-Output " Container Size: $containersize) (bytes)"
$sizesOverall
}
答案 6 :(得分:0)
我创建了python脚本来计算所有订阅中的已用存储空间。
好吧,这不是很快:
-需要通过提供的权限请求所有订阅
-请求Azure资源图接收列表 / subscription / resourcegroup / storageaccount
-生成存在存储帐户的订阅列表
-请求每个/ subscription / resourcegroup / storageaccount的Azure Monitor接收UsedCapacity
from azure.mgmt.monitor import MonitorManagementClient
from azure.mgmt.subscription import SubscriptionClient
from msrestazure.azure_active_directory import ServicePrincipalCredentials
from azure.mgmt.resourcegraph import ResourceGraphClient
from azure.mgmt.resourcegraph.models import QueryRequest
credentials = ServicePrincipalCredentials(client_id, secret, tenant=tenant_id)
sub_object = SubscriptionClient(credentials)
rgraph_object = ResourceGraphClient(credentials)
storageaccount_pattern = "resources | where type == 'microsoft.storage/storageaccounts' | project id"
subs = [sub.as_dict() for sub in sub_object.subscriptions.list()]
subs_list = []
for sub in subs:
subs_list.append(sub.get('subscription_id'))
request_storageaccount = QueryRequest(subscriptions=subs_list, query=storageaccount_pattern)
rgraph_storageaccount = rgraph_object.resources(request_storageaccount).as_dict()
resource_ids = []
for element in rgraph_storageaccount['data']['rows']:
resource_ids.append(element[0])
count_used_storage = 0
for resource_id in resource_ids:
sub = (resource_id.split('/'))[2]
monitor_object = MonitorManagementClient(credentials, subscription_id=sub)
metrics_data = monitor_object.metrics.list(resource_id)
for item in metrics_data.value:
for timeserie in item.timeseries:
for data in timeserie.data:
try:
count_used_storage = count_used_storage + data.average
except:
pass
print(count_used_storage)
对于约400个订阅,约1100个storageaccounts脚本的工作时间约为600秒。
对于一个订阅,它要快得多:)
答案 7 :(得分:0)
使用 Cloud Shell 是目前最好的解决方案之一:
代码
param($resourceGroup, $storageAccountName)
# usage
# Get-StorageAccountSize -resourceGroup <resource-group> -storageAccountName <storage-account-name>
# Connect to Azure
Connect-AzureRmAccount
# Get a reference to the storage account and the context
$storageAccount = Get-AzureRmStorageAccount `
-ResourceGroupName $resourceGroup `
-Name $storageAccountName
$ctx = $storageAccount.Context
# Get All Blob Containers
$AllContainers = Get-AzureStorageContainer -Context $ctx
$AllContainersCount = $AllContainers.Count
Write-Host "We found '$($AllContainersCount)' containers. Processing size for each one"
# Zero counters
$TotalLength = 0
$TotalContainers = 0
# Loop to go over each container and calculate size
Foreach ($Container in $AllContainers){
$TotalContainers = $TotalContainers + 1
Write-Host "Processing Container '$($TotalContainers)'/'$($AllContainersCount)'"
$listOfBLobs = Get-AzureStorageBlob -Container $Container.Name -Context $ctx
# zero out our total
$length = 0
# this loops through the list of blobs and retrieves the length for each blob and adds it to the total
$listOfBlobs | ForEach-Object {$length = $length + $_.Length}
$TotalLength = $TotalLength + $length
}
# end container loop
#Convert length to GB
$TotalLengthGB = $TotalLength /1024 /1024 /1024
# Result output
Write-Host "Total Length = " $TotallengthGB "GB"
https://gist.github.com/iamsunny/8718fb29146363af11da95e5eb82f245
答案 8 :(得分:0)
您可以前往: 首页 > {storage account} > {container} > 属性 在属性下,您将计算大小 Container Size