如何在 Azure CLI 或 Bash 脚本中获取天蓝色存储帐户的大小?

Posted

技术标签:

【中文标题】如何在 Azure CLI 或 Bash 脚本中获取天蓝色存储帐户的大小?【英文标题】:How to get the size of an azure storage account in Azure CLI or Bash Script? 【发布时间】:2021-12-12 08:49:45 【问题描述】:

我想在不使用门户的情况下检索 Azure 存储帐户的大小(指标)。如何通过 azure CLI 或 bash 脚本获取存储帐户的指标?有没有办法通过 azure CLI 或任何 bash 脚本做到这一点?

【问题讨论】:

【参考方案1】:

查看 AZ CLI 命令,我相信目前没有可用的命令可以直接为您提供此信息。

您需要做的是利用az rest 并调用Metrics - List REST API 并解析响应。

这是您要执行的命令:

az rest --uri https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>/providers/Microsoft.Insights/metrics?api-version=2018-01-01&metricnames=UsedCapacity&aggregation=Average

你会得到如下响应:


  "cost": 59,
  "interval": "PT1H",
  "namespace": "Microsoft.Storage/storageAccounts",
  "resourceregion": "resource-location",
  "timespan": "2021-10-27T05:12:06Z/2021-10-27T06:12:06Z",
  "value": [
    
      "displayDescription": "The amount of storage used by the storage account. For standard storage accounts, it's the sum of capacity used by blob, table, file, and queue. For premium storage accounts and Blob storage accounts, it is the same as BlobCapacity or FileCapacity.",
      "errorCode": "Success",
      "id": "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.Storage/storageAccounts/<storage-account-name>/providers/Microsoft.Insights/metrics/UsedCapacity",
      "name": 
        "localizedValue": "Used capacity",
        "value": "UsedCapacity"
      ,
      "resourceGroup": "cerebrata",
      "timeseries": [
        
          "data": [
            
              "average": 9078827149.0,//This is the value you would want to extract
              "timeStamp": "2021-10-27T05:12:00Z"
            
          ],
          "metadatavalues": []
        
      ],
      "type": "Microsoft.Insights/metrics",
      "unit": "Bytes"
    
  ]

【讨论】:

谢谢,@Gaurav Manthri。这是我所期待的答案。顺便说一句,您能解释一下参数聚合中“平均”的值是什么吗?还有哪些其他值可以用于参数聚合? @SashinSahasra 这意味着容量值是查询中为 1 小时的时间间隔内的平均值 - 因此您可以获得该一小时时间跨度使用的平均容量。其他可用的选项应该是MinMax,可能还有Sum(但这不太可能有用)。【参考方案2】:

要计算存储帐户的大小,您需要找到存储帐户中容器的大小,然后将大小相加得到存储帐户的大小。

使用 Azure CLI 获取容器长度的示例

#!/bin/bash
export AZURE_STORAGE_ACCOUNT=<storage-account-name>
export AZURE_STORAGE_ACCESS_KEY=<storage-account-key>

# Create a resource group
az group create --name myResourceGroup --location eastus

# Create a container
az storage container create --name mycontainer

# Create sample files to upload as blobs
for i in `seq 1 3`; do
    echo $RANDOM > container_size_sample_file_$i.txt
done

# Upload sample files to container
az storage blob upload-batch \
    --pattern "container_size_sample_file_*.txt" \
    --source . \
    --destination mycontainer

# Calculate total size of container. Use the --query parameter to display only
# blob contentLength and output it in TSV format so only the values are
# returned. Then pipe the results to the paste and bc utilities to total the
# size of the blobs in the container.
bytes=`az storage blob list \
    --container-name mycontainer \
    --query "[*].[properties.contentLength]" \
    --output tsv |
    paste --serial --delimiters=+ | bc`

# Display total bytes
echo "Total bytes in container: $bytes"

# Delete the sample files created by this script
rm container_size_sample_file_*.txt

更多详情请参考document:

使用 PowerShell 的示例

Get-AzureStorageBlob -Container "ContainerName" | % $_.Length  | measure -Sum

更多详情请参考SO Thread

【讨论】:

这种方法的几个问题:1) 它只会为您提供 blob 容器中活动 blob 的大小。它不会包含该容器中的 blob 快照或版本大小。 2) 您需要对存储帐户中的每个 blob 容器执行此操作,这很容易出错。 3)它不会给你一个存储帐户的总大小,因为它不包括文件、队列和表存储的大小。 如果您的帐户有数百万或数亿个 blob,这实际上是行不通的。

以上是关于如何在 Azure CLI 或 Bash 脚本中获取天蓝色存储帐户的大小?的主要内容,如果未能解决你的问题,请参考以下文章

使用 azure cli/bash 在 Azure VM 的“实时”数据磁盘上更新缓存设置

如何使用 cli 从 Azure 文件共享中删除文件夹

如何使用 powershell/Azure CLI 列出有权访问 Azure DevOps 项目存储库的用户?

静默安装Azure CLI

使用 bash、curl 访问 Azure blob 存储

我如何使用curl请求使用CLI通过yaml文件创建Azure管道?