Azure Application Insights查询问题:按解析URL关联表并聚合均值
解决Azure Application Insights中requests与customMetrics表按解析后URL关联的问题
看起来你遇到的问题主要出在硬编码的URL解析逻辑以及缺失的表关联步骤上。原代码里用固定的substring(stringUrl,157)来截取URL,这在URL前缀长度变化时会直接失效,而且没有完成和requests表的关联操作。
下面是修正后的完整KQL查询,我会一步步解释关键改进点:
修正后的完整查询
// 定义通用的URL路径解析函数,避免硬编码长度 let parseUrlPath = (url:string) { // 使用parse_url函数提取路径部分,自动处理域名、查询参数 let urlParts = parse_url(url); // 去掉路径末尾可能的斜杠,保证关联一致性 strcat_array(split(urlParts.Path, "?"), "") }; // 处理customMetrics表,解析出统一的URL路径并计算指标平均值 let metricsData = customMetrics | where name == "Api.GetData" | extend urlURI = tostring(customDimensions.RequestedUri) | extend parsedUrl = parseUrlPath(urlURI) | summarize avgRequestMetric = avg(value) by parsedUrl; // 处理requests表,解析出相同的URL路径并计算平均持续时间 let requestsData = requests | extend parsedUrl = parseUrlPath(url) | summarize avgDuration = avg(duration) by parsedUrl; // 关联两个表,输出共同的解析URL、平均持续时间和指标平均值 requestsData | join kind=inner metricsData on parsedUrl | project parsedUrl, avgDuration, avgRequestMetric
关键改进说明
- 通用URL解析:用KQL内置的
parse_url函数替代硬编码的substring,它能自动拆分URL的各个部分(域名、路径、查询参数等),提取路径后再去掉查询参数,保证解析逻辑的通用性。 - 拆分处理表:先分别对
requests和customMetrics做数据聚合,再做关联,这样比直接关联后聚合性能更好,尤其是数据量较大时。 - 内连接关联:使用
kind=inner只保留两个表中都存在的解析URL,确保结果是两者的交集。
可选优化:如果不需要自定义函数
你也可以直接在extend里处理URL,省略自定义函数,让查询更简洁:
let metricsData = customMetrics | where name == "Api.GetData" | extend urlURI = tostring(customDimensions.RequestedUri) | extend parsedUrl = strcat_array(split(parse_url(urlURI).Path, "?"), "") | summarize avgRequestMetric = avg(value) by parsedUrl; let requestsData = requests | extend parsedUrl = strcat_array(split(parse_url(url).Path, "?"), "") | summarize avgDuration = avg(duration) by parsedUrl; requestsData | join kind=inner metricsData on parsedUrl | project parsedUrl, avgDuration, avgRequestMetric
这样应该就能正常运行,得到你需要的共同解析URL、requests平均持续时间以及customMetrics请求平均值了。
内容的提问来源于stack exchange,提问作者RaShe
相关产品推荐
相关产品推荐

