如何统计对比正则匹配数量 实现Sumo Logic下API调用频次统计
Sumo Logic API调用频次统计优化方案
问题原因
你当前的查询是将每个API单独解析为独立字段,按多字段分组统计后自然会生成多列表格,API数量越多表格越宽。
优化方案
方案1:统一解析API路径(推荐)
用单个正则匹配所有API路径,统一存入同个字段后分组统计,最终只会生成两列表格:
_sourceCategory="my_category" // 匹配所有API路径前缀,剥离尾部的数字参数 | parse regex "GET.+443 (?<api_path>/user/v1(?:/userNumber)?)\d+" // 路径映射为业务层面的API名称,新增API只需在此添加映射规则 | case( api_path = "/user/v1/", "getUserByUserId", api_path = "/user/v1/userNumber", "getUserByUserNumber", "未匹配API" ) as api_name // 按API名称分组统计调用次数 | count by api_name // 可选:按调用次数降序排列 | sort _count desc
方案2:已有解析逻辑不变,用unpivot转列成行
如果已经写了大量独立parse语句不想修改,可以用unpivot操作把多列结果转为行格式:
_sourceCategory="my_category" | parse regex "GET.+443 (?<getUserByUserId>/user/v1/)\d+" nodrop | parse regex "GET.+443 (?<getUserByUserNumber>/user/v1/userNumber)\d+" | count by getUserByUserId, getUserByUserNumber // 多列转成行 | unpivot api_name, api_value for getUserByUserId, getUserByUserNumber // 过滤空值 | where !isEmpty(api_value) | sum(_count) as 调用次数 by api_name
效果说明
两种方案最终输出都只有API名称和调用次数两列,后续新增统计API也不会增加列数,可读性更高。
内容的提问来源于stack exchange,提问作者Pekka
相关产品推荐
相关产品推荐

