programing

내 구독의 파란색 저장소 계정에 사용된 공간 확인

batch 2023. 4. 21. 20:24
반응형

내 구독의 파란색 저장소 계정에 사용된 공간 확인

서브스크립션 리소스 그룹의 각 azure 스토리지 계정에서 사용한 공간을 확인하려면 어떻게 해야 합니까?

PowerShell, CLI, 포털을 통해 Azure 스토리지 계정에서 사용되는 공간을 확인할 수 없습니다.

Azure 스토리지 크기는 모두 4개의 서비스(Blob, Queue, File, Table)로 구성됩니다.제가 아는 한, 현재로선 모든 서비스의 총 크기를 계산할 방법이 없습니다.

그러나 Azure 메트릭을 사용하면 Portal에서 사용되는 blob 공간을 얻을 수 있습니다.[ Monitor ]-> [ Metrics ]를 선택합니다.

여기에 이미지 설명 입력

Azure 포털에서 스토리지 계정을 모니터하는 방법에 대한 자세한 내용은 이 링크를 참조하십시오.

또한 PowerShell을 사용하여 BLOB 사용을 가져올 수도 있습니다.사용할 수 있는 좋은 스크립트가 있습니다.

Azure Storage Explorer에는 '디렉토리 통계' 버튼이 있습니다.

폴더로 이동

여기에 이미지 설명 입력

단추를 클릭하십시오.

여기에 이미지 설명 입력

합계가 액티비티 패널에 표시됩니다.

여기에 이미지 설명 입력

많은 검색 결과 이 기사가 매우 적절하다는 것을 알게 되었습니다.

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

Azure Monitor를 사용하여 스토리지 계정의 용량을 확인합니다.순서:

  • Azure 모니터로 이동합니다.
  • 스토리지 계정을 클릭합니다.
  • [ Capacity ]을 클릭합니다.모든 계정과 사용된 용량을 나란히 볼 수 있습니다.

여기에 이미지 설명 입력

여기 a가 있습니다..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);
        }
    }
}

그러면 모든 구독의 각 리소스 그룹에 스토리지 계정 용량이 제공됩니다.

$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"
}
}
}

산출량

다음 페이지로 이동합니다.홈 > {storage account} > {container} > 속성 아래에 컨테이너 크기를 계산합니다.

클라우드 셸을 사용하는 것은 지금까지의 솔루션 중 가장 좋은 것 중 하나입니다.

  • Cloud Shell에 powershell 파일 추가(아래 코드 확인)
  • 스토리지 계정 및 리소스 그룹 이름으로 PS 명령 실행

산출량

코드

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

이를 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    
}

모든 구독에서 사용된 스토리지를 계산하는 python 스크립트를 만들었습니다.글쎄, 빠르진 않아.

  • 제공된 권한을 통해 모든 구독을 요청해야 합니다.
  • 목록/서브스크립션/리소스 그룹/스토리지 계정을 수신하도록 Azure 리소스 그래프 요청
  • 구독 목록 생성(스토리지 계정이 있는 경우
  • 모든 /subscription/resourcegroup/스토리지 계정에 대해 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']:
        resource_ids.append(element['id'])
    
    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개의 스토리지 계정 스크립트가 약 600초 동안 작동합니다.

1개의 서브스크립션으로 훨씬 고속화 :)

Portal Storage Browser에 저장된 총 데이터가 표시됩니다.

Portal Storage Browser(포털 스토리지 브라우저)에 저장된 총 데이터가 표시됩니다.

  1. Azure에 로그인합니다.

  2. 스토리지 계정으로 이동합니다.

  3. 왼쪽의 Storage Browser(스토리지 브라우저)를 클릭합니다.

언급URL : https://stackoverflow.com/questions/43629557/check-space-used-in-azure-storage-accounts-in-my-subscription

반응형