You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Application Insights中KQL查询API请求占比报错,求正确写法

ASP.NET Web API端点调用占比KQL查询修复

我有一个ASP.NET Web API,想要在Azure门户中编写KQL查询,展示各API端点的使用占比,以此了解哪些端点调用频率高、哪些较低。编写的查询运行时出现错误:

原查询语句

requests
| summarize count() by operation_Name
| extend percentage = todouble(count_) * 100.0 / todouble(todynamic(summarize count()))
| project operation_Name, percentage
| order by percentage desc

错误信息

查询无法解析,错误位置为第3行第73个字符处的'summarize'
Token: summarize Line: 3 Position: 73 若问题持续,请提交支持工单。请求ID: 8727eeab-aa0a-4ef5-a7e4-58e699419cdd

问题原因

原查询第3行的写法不符合KQL语法规则:

  • KQL不允许在extend的表达式中嵌套summarize操作
  • todynamic用于将字符串转为动态类型,不适用于计算总调用数的场景

正确查询方案

方案一:使用窗口函数(简洁直观)

requests
| summarize endpoint_count = count() by operation_Name
| extend total_requests = sum(endpoint_count) over ()
| extend percentage = todouble(endpoint_count) * 100.0 / todouble(total_requests)
| project operation_Name, endpoint_count, percentage
| order by percentage desc

逻辑说明:

  1. 按operation_Name(API端点)分组,统计每个端点的调用次数,命名为endpoint_count
  2. 通过sum(endpoint_count) over ()计算全局总调用数(over()表示不做分组,计算所有数据的总和)
  3. 将端点调用数和总调用数转为double类型,计算占比(避免整数除法导致的精度丢失)
  4. 展示端点名称、调用次数、占比,并按占比降序排序

方案二:先计算总调用数再关联(大场景下性能更优)

let total_requests = toscalar(requests | summarize count());
requests
| summarize endpoint_count = count() by operation_Name
| extend percentage = todouble(endpoint_count) * 100.0 / total_requests
| project operation_Name, endpoint_count, percentage
| order by percentage desc

逻辑说明:

  1. 先用toscalar函数将所有请求的总次数转为标量值,存储到变量total_requests中
  2. 按端点分组统计调用次数
  3. 直接用预计算的总次数计算占比
  4. 展示并排序结果

内容的提问来源于stack exchange,提问作者Vivek Nuna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:35:19