检查订阅中azure存储帐户中使用的空间

时间:2017-04-26 09:01:16

标签: azure local-storage azure-storage azure-storage-blobs

如何在我的订阅资源组中检查我在每个azure存储帐户中使用的空间大小。

我无法通过PowerShell,CLI,门户网站找到检查azure存储帐户中使用的空间的方法......

9 个答案:

答案 0 :(得分:11)

Azure存储大小包括所有4种服务(Blob,队列,文件,表)。根据我的知识,目前还没有办法计算所有服务的总大小。

但是,您可以使用Azure指标获取Portal上使用的blob空间。请选择监控 - >指标

enter image description here

有关在Azure门户中监控存储帐户的详细信息,请参阅此link

此外,您可以使用PowerShell来获取blob。你可以使用一个很好的script

答案 1 :(得分:6)

经过大量搜索,我发现这篇文章非常相关:

https://techcommunity.microsoft.com/t5/azure-paas-blog/calculate-the-size-capacity-of-storage-account-and-it-services/ba-p/1064046

使用 Azure Monitor 检查存储帐户的容量。 步骤:

  • 导航到 Azure Monitor
  • 点击存储帐户
  • 点击容量。您可以在此处并排查看所有帐户和已用容量。

enter image description here

答案 2 :(得分:2)

Azure Storage Explorer具有“目录统计信息”按钮。

导航到文件夹

enter image description here

点击按钮

enter image description here

总数显示在活动面板中

enter image description here

答案 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"
}
}
}

Output

答案 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 是目前最好的解决方案之一:

  • 在 Cloud Shell 中添加一个 powershell 文件(查看下面的代码)
  • 使用存储帐户和资源组名称运行 PS 命令

Output

代码

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