如何使用.NET SDK获取Azure Postgres弹性服务器的已用存储?
获取Azure Postgres Flexible Server已用存储的.NET SDK解决方案
你遇到的问题很常见——Azure Resource Manager的资源数据对象(比如PostgreSqlFlexibleServerData)只包含服务器的配置属性(比如分配的存储大小),而实时的存储使用量属于监控指标,需要通过Azure Monitor的Metrics API来获取,这也是Azure门户显示存储使用率的底层逻辑。
下面是具体的实现步骤:
1. 安装必要的NuGet包
首先需要添加Azure Monitor查询的SDK包:
Install-Package Azure.Monitor.Query Install-Package Azure.Identity
(Azure.Identity用来处理身份验证,和你之前使用的ARM SDK保持一致的认证方式)
2. 编写代码查询已用存储指标
在原有代码的基础上,添加以下逻辑来获取存储使用量:
using Azure.Monitor.Query; using Azure.Identity; using System; using System.Threading.Tasks; // 原有获取服务器资源的代码保持不变 ResourceIdentifier resourceGroupResourceId = ResourceGroupResource.CreateResourceIdentifier(subscriptionId, resourceGroupName); ResourceGroupResource resourceGroupResource = client.GetResourceGroupResource(resourceGroupResourceId); PostgreSqlFlexibleServerCollection collection = resourceGroupResource.GetPostgreSqlFlexibleServers(); string resourceName = dbmap.RowKey; PostgreSqlFlexibleServerResource result = await collection.GetAsync(resourceName); // 初始化Metrics查询客户端 var metricsClient = new MetricsQueryClient(new DefaultAzureCredential()); // 定义查询参数:服务器的资源ID、指标名称、时间范围 string resourceId = result.Id; var response = await metricsClient.QueryResourceAsync( resourceId, new[] { "storage_used" }, // 存储已用的指标名称 new MetricsQueryOptions { TimeRange = new QueryTimeRange(TimeSpan.FromHours(1)), // 查询最近1小时的数据 Aggregations = new[] { MetricAggregationType.Average } // 取平均值,也可以用Total }); // 解析结果 foreach (var metric in response.Value.Metrics) { foreach (var timeSeries in metric.TimeSeries) { foreach (var dataPoint in timeSeries.Data) { // storage_used的单位是字节,转成GB double usedStorageGB = dataPoint.Average.Value / (1024 * 1024 * 1024); Console.WriteLine($"已用存储: {usedStorageGB:F2} GB"); Console.WriteLine($"分配存储: {result.Data.StorageSizeInGB} GB"); Console.WriteLine($"存储使用率: {usedStorageGB / result.Data.StorageSizeInGB * 100:F2}%"); } } }
关键说明
- 指标名称
storage_used是Azure Postgres Flexible Server官方定义的存储使用量指标,单位为字节。 - 时间范围可以根据需求调整,比如
TimeSpan.FromDays(1)查询最近一天的数据。 - 聚合方式选择
Average是因为存储使用量是随时间变化的数值,取最近一段时间的平均值可以反映当前的使用情况;如果需要某个时间点的精确值,可以调整时间范围为更小的粒度(比如5分钟)并取最新的数据点。 - 权限要求:你的认证账号需要拥有目标服务器的
Monitoring Reader或更高权限,才能读取监控指标。
内容的提问来源于stack exchange,提问作者acart
相关产品推荐
相关产品推荐

