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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:34:51