如何在Azure中跨目录和订阅查询多个Application Insights?
跨订阅/目录Application Insights请求占比统计方案
核心思路
要合并不同订阅、目录下的Application Insights数据,需用KQL的union操作符整合多个实例的requests表,再统一计算总请求数与各端点占比。
完整查询语句
// 合并两个App Insights的请求数据,保留API标识 union app('ApplInsights1').requests, // 替换为你的第一个App Insights名称/资源ID app('ApplInsights2').requests // 替换为你的第二个App Insights名称/资源ID | where cloud_RoleName in ("WebAPI1", "WebAPI2") // 过滤目标API // 统计每个端点的总调用次数 | summarize total_calls = count() by operation_Name // 计算所有请求的总次数(两个API的总和) | extend total_all_requests = toscalar( union app('ApplInsights1').requests, app('ApplInsights2').requests | where cloud_RoleName in ("WebAPI1", "WebAPI2") | count ) // 计算占比,保留两位小数 | extend percentage = round(100.0 * total_calls / total_all_requests, 2) // 输出结果并按占比降序排序 | project operation_Name, total_calls, percentage | order by percentage desc
关键说明
- 跨资源引用:
app('资源名称')是引用不同订阅/目录下App Insights的标准方式,也可以用资源ID(比如app('/subscriptions/xxx/resourceGroups/xxx/providers/microsoft.insights/components/ApplInsights1')),确保你对两个资源都有读取权限。 - 权限与资源选择:如果在Azure Monitor查询窗口中看不到多个订阅的资源,需在顶部的资源选择器中手动添加两个App Insights资源(即使它们属于不同订阅/目录,只要有权限就能添加)。
- 占比逻辑:这里的总请求数是两个API的请求总和,完全符合你要求的"某端点调用10次、总请求200次则占比5%"的逻辑。
扩展优化(可选)
如果需要同时区分每个端点所属的API,可以修改查询,按API和端点分组统计:
union app('ApplInsights1').requests, app('ApplInsights2').requests | where cloud_RoleName in ("WebAPI1", "WebAPI2") | summarize total_calls = count() by cloud_RoleName, operation_Name | extend total_all_requests = toscalar( union app('ApplInsights1').requests, app('ApplInsights2').requests | where cloud_RoleName in ("WebAPI1", "WebAPI2") | count ) | extend percentage = round(100.0 * total_calls / total_all_requests, 2) | project API_Name = cloud_RoleName, Endpoint = operation_Name, total_calls, percentage | order by percentage desc
内容的提问来源于stack exchange,提问作者Vivek Nuna
相关产品推荐
相关产品推荐

