如何从Azure API Management导出API使用数据?优先API自动持续导出
嘿,刚好我之前处理过类似的Azure APIM数据导出需求,给你整理了两种方案,优先满足你要的API持续导出需求,也附上手动导出的步骤:
如果只是偶尔需要导出数据,手动操作最直接高效:
- 登录Azure门户,进入你的APIM服务实例
- 导航到Admin > Activity板块
- 设置好筛选条件:调整日期范围、指定目标用户、API名称等,确保页面显示的是你需要的数据
- 找到页面上的「导出」按钮(一般是个向下箭头图标,在数据表格上方或页面工具栏里)
- 选择导出格式(比如CSV),点击后即可将数据下载到本地
要实现持续自动导出,推荐用Azure Monitor的REST API来查询并获取这些Activity数据,方便你集成到自动化脚本或系统中:
1. 准备必要权限
首先确保你的账号或服务主体拥有Monitoring Reader或Contributor角色(针对你的APIM资源或所属订阅),这样才能有权限调用Monitor的API。
2. 构造API查询请求
你需要调用Azure Monitor的Activity Log查询API,示例请求如下:
GET https://management.azure.com/subscriptions/{订阅ID}/providers/Microsoft.Insights/eventtypes/management/values?api-version=2015-04-01&$filter=eventTimestamp ge '{开始时间}' and eventTimestamp le '{结束时间}' and resourceGroupName eq '{资源组名称}' and resourceProvider eq 'Microsoft.ApiManagement' and resourceType eq 'service' and resourceName eq '{APIM服务名称}'
替换掉所有占位符,时间格式需遵循yyyy-MM-ddTHH:mm:ssZ(例如2024-05-01T00:00:00Z)。
3. 完成请求认证
调用Azure REST API需要携带访问令牌,你可以用Azure CLI快速获取测试令牌:
az account get-access-token --resource https://management.azure.com/
然后在请求头中添加认证信息:
Authorization: Bearer {你的访问令牌}
4. 处理响应与自动化
API返回的是JSON格式数据,你可以解析后提取需要的字段(比如用户ID、API名称、调用次数等),然后保存到Blob存储、数据库或其他业务系统中。如果要实现持续导出,你可以把这个请求封装成定时脚本(比如用Azure Functions、PowerShell定时任务),定期执行并同步数据。
补充:针对API调用统计的优化方案
如果你需要的是用户调用API的详细次数统计(而非管理操作日志),更适合用Log Analytics的API。比如用Kusto查询语句精准筛选数据:
ApiManagementGatewayLogs | where Resource == "{APIM服务名称}" | where OperationName == "ApiRequest" | where UserId == "{目标用户ID}" | where ApiName == "{目标API名称}" | where TimeGenerated between (startofday(ago(7d))..endofday(now())) | summarize CallCount = count() by bin(TimeGenerated, 1d), UserId, ApiName
通过Log Analytics的REST API执行这个查询,就能获取更精准的调用统计数据,同样可以集成到自动化流程中。
内容的提问来源于stack exchange,提问作者Maxim Alexeyev

