如何通过API获取Azure APIM指标及使用C#开发相关查询程序
Azure APIM 信息及指标获取方案说明
需求可行性确认
完全可以通过调用API的方式实现C#程序获取Azure APIM下的API信息及运行指标,Azure官方提供了完整的REST API及C#封装SDK,无需手动解析页面数据。
实现APIM API基础信息获取
- 首选官方C# SDK方式,先安装两个NuGet包:
Azure.Identity(负责Azure身份认证)、Azure.ResourceManager.ApiManagement(最新版APIM管理SDK) - 身份认证推荐用
DefaultAzureCredential类,自动适配本地开发环境的VS/VS Code/Azure CLI身份,以及部署后的托管身份,无需硬编码密钥。 - 核心调用代码示例:
using Azure.Identity; using Azure.ResourceManager; using Azure.ResourceManager.ApiManagement; // 初始化ARM客户端 ArmClient armClient = new ArmClient(new DefaultAzureCredential()); // 构造APIM服务资源ID string apimServiceId = "/subscriptions/你的订阅ID/resourceGroups/你的资源组名/providers/Microsoft.ApiManagement/service/你的APIM服务名"; ApiManagementServiceResource apimService = armClient.GetApiManagementServiceResource(new ResourceIdentifier(apimServiceId)); // 拉取该APIM下所有API列表 await foreach (ApiManagementApiResource api in apimService.GetApiManagementApis().GetAllAsync()) { // 可获取API的名称、路径、后端配置、策略、版本等所有配置信息 Console.WriteLine($"API名称:{api.Data.Name}, API路径:{api.Data.Path}"); }
- 若不想依赖SDK,可直接调用ARM REST API,请求格式为
GET https://management.azure.com/subscriptions/{订阅ID}/resourceGroups/{资源组名}/providers/Microsoft.ApiManagement/service/{APIM服务名}/apis?api-version=2023-03-01-preview,请求头携带Azure AD颁发的Bearer令牌即可。
实现APIM运行指标获取
APIM的所有运行指标统一存储在Azure Monitor中,你可以通过Monitor的API拉取:
- 安装NuGet包
Azure.Monitor.Query用于指标查询 - 支持拉取的常用指标包括:总请求数、平均响应延迟、4xx错误数、5xx错误数、缓存命中率、入站/出站带宽等
- 核心查询代码示例:
using Azure.Identity; using Azure.Monitor.Query; using Azure.Monitor.Query.Models; MetricsQueryClient metricsClient = new MetricsQueryClient(new DefaultAzureCredential()); // 查询最近7天、每小时粒度的核心指标 Response<MetricsQueryResult> result = await metricsClient.QueryResourceAsync( apimServiceId, new[] { "TotalRequests", "AverageDuration", "4xxErrors", "5xxErrors" }, new MetricsQueryOptions { TimeRange = new QueryTimeRange(TimeSpan.FromDays(7)), Granularity = TimeSpan.FromHours(1) } ); // 遍历指标结果 foreach (MetricResult metric in result.Value.Metrics) { Console.WriteLine($"指标:{metric.Name}"); foreach (MetricTimeSeriesElement point in metric.TimeSeries) { foreach (MetricValue value in point.Values) { Console.WriteLine($"时间:{value.TimeStamp}, 值:{value.Average ?? value.Count}"); } } }
注意:你用于认证的身份需要有对应APIM资源的读取权限以及Monitor数据读取权限,否则会触发鉴权失败。
内容的提问来源于stack exchange,提问作者Jhon Hernández
相关产品推荐
相关产品推荐

