如何通过REST API获取Azure API Management用户API访问统计数据
Azure APIM 获取用户API访问统计的实现方案
Azure API Management 提供原生管理REST API可直接实现用户维度的API调用统计,无需依赖log-to-eventhub功能。
核心可用接口
- 聚合统计优先使用
Reports - List By Request接口
这是APIM内置的报表类接口,支持直接按筛选条件返回聚合后的统计结果,不需要拉取全量请求明细做二次计算,查询性能更高。你可以通过请求参数直接指定统计规则:- 筛选规则:通过
$filter参数指定目标用户ID、统计时间范围,过滤出指定用户的所有请求记录 - 聚合规则:通过
$apply参数指定按API ID分组,同时聚合计算三个核心指标:总调用次数、响应码200-399区间的成功请求数、响应码400及以上的失败请求数
- 筛选规则:通过
- 单条访问明细拉取使用
Diagnostics - List By Service接口
如果你需要逐笔请求的访问明细(比如排查具体失败请求的参数、报错信息),可以调用该诊断接口,单条请求记录包含调用用户标识、匹配的API信息、响应状态码、请求耗时、请求IP等全量字段,拉取后可自行做任意维度的统计计算。
调用注意事项
- 两个接口均属于APIM管理平面接口,认证支持Azure AD令牌、服务主体认证,调用前需要给调用身份授予APIM实例的
API Management Service Reader及以上权限 - 接口可查询的数据留存周期和APIM定价层匹配,开发者、基础、标准、高级层默认留存90天的网关日志,超期数据无法通过该接口查询,如需长周期统计建议按天拉取数据存入自有存储
- 成功/失败请求的判定逻辑可以直接写在聚合参数里,不需要拉取数据后自行判断:成功请求判定条件为
responseCode ge 200 and responseCode lt 400,失败请求判定条件为responseCode ge 400
调用示例
以下是统计指定用户2024年1月各API调用情况的请求模板:
GET https://management.azure.com/subscriptions/{你的订阅ID}/resourceGroups/{资源组名称}/providers/Microsoft.ApiManagement/service/{APIM服务名称}/reports/byRequest?api-version=2022-08-01 &$filter=userId eq '/users/{目标用户ID}' and timestamp ge datetime'2024-01-01' and timestamp le datetime'2024-01-31' &$apply=groupby((apiId), aggregate($count as totalCalls, responseCode ge 200 and responseCode lt 400 with sum as successCount, responseCode ge 400 with sum as failCount))
请求返回的结果中,每个条目对应用户调用过的一个API,直接包含你需要的总调用次数、成功数、失败数三个核心指标。
内容的提问来源于stack exchange,提问作者iluv_dev
相关产品推荐
相关产品推荐

