App Insights需求:编写模块化查询按请求参数统计请求数与性能指标
模块化Kusto查询:按请求参数分组统计性能指标
针对你提到的三类请求URL,这里提供一个模块化的Kusto查询,可按请求参数(键+值)分组展示请求数、响应时长相关指标,同时支持多层级汇总统计:
// 1. 定义时间范围模块 let timeRange = { let start = datetime("2023-07-31T23:59:59.000Z"); let end = datetime("2023-08-01T23:59:59.000Z"); start .. end }; // 2. 基础数据集过滤模块 let baseDataset = requests | where timestamp in (timeRange) | where client_Type != "Browser" | where url has "<base-url>" // 筛选目标系统的请求 | extend urlParts = parse_url(url) // 解析URL结构 | extend queryString = urlParts.Query; // 提取URL中的查询字符串 // 3. 提取请求参数与分类模块 let datasetWithParams = baseDataset | extend paramKey = case( url contains "/recent?" or url contains "/all?", extract(@"(param1|param2)=[^&]+", 1, queryString), url contains "?param3=", "param3", "Unknown" ) | extend paramValue = case( paramKey == "param1", extract(@"param1=([^&]+)", 1, queryString), paramKey == "param2", extract(@"param2=([^&]+)", 1, queryString), paramKey == "param3", extract(@"param3=([^&]+)", 1, queryString), "Unknown" ) | extend requestCategory = case( url contains "/recent", "Recent", url contains "/all", "All", url starts_with "<base-url>?param3", "Root", "Uncategorized" ); // 4. 按参数键+值的细粒度统计 let statsByParamValue = datasetWithParams | summarize 请求数 = sum(itemCount), 平均响应时长 = avg(duration), P50响应时长 = percentile(duration, 50), P95响应时长 = percentile(duration, 95), P99响应时长 = percentile(duration, 99) by requestCategory, paramKey, paramValue; // 5. 按参数键的汇总统计(忽略具体值) let statsByParamKey = datasetWithParams | summarize 请求数 = sum(itemCount), 平均响应时长 = avg(duration), P50响应时长 = percentile(duration, 50), P95响应时长 = percentile(duration, 95), P99响应时长 = percentile(duration, 99) by requestCategory, paramKey | extend paramValue = "所有值"; // 6. 全量请求的整体统计 let overallStats = datasetWithParams | summarize 请求数 = sum(itemCount), 平均响应时长 = avg(duration), P50响应时长 = percentile(duration, 50), P95响应时长 = percentile(duration, 95), P99响应时长 = percentile(duration, 99) | extend requestCategory = "整体", paramKey = "所有参数", paramValue = "所有值"; // 合并所有统计结果并排序 union statsByParamValue, statsByParamKey, overallStats | sort by requestCategory, paramKey, paramValue
关键说明:
- 模块化结构:每个
let块负责单一职责,后续调整时间范围、过滤规则或统计指标时,只需修改对应模块即可 - 参数适配:针对三类URL的参数格式,通过
case和正则提取精准匹配param1/param2/param3的键与值,同时保留Unknown兜底处理未匹配的请求 - 多层级统计:同时输出细粒度(参数键+值)、中粒度(参数键)、整体维度的统计数据,满足不同分析需求
- 可扩展性:如果需要新增参数类型,只需在
paramKey和paramValue的case逻辑中添加对应规则即可
内容的提问来源于stack exchange,提问作者Insolent Goof
相关产品推荐
相关产品推荐

