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

基于正则的LOKI查询中能否使用提取的推断值做分组统计?

核心问题解答

可以使用通过提取得到的推断值。只要通过解析算子(比如regexp、logfmt、json等)从日志行中提取为标签后,不管原始日志是否显式包含这些字段,都可以直接用于过滤、分组、统计操作。


之前查询的错误原因

  1. 聚合算子用法错误:count、sum这类聚合算子必须作用于范围向量,直接传入日志查询的即时向量不符合语法要求。
  2. 过滤条件写法错误:标签过滤需要放在管道流程中,不能直接写在聚合的参数里。
  3. 缺少分组维度:你需要的是msg_id+type两个维度的组合计数,之前的查询只按msg_id分组,无法满足统计要求。

正确查询语句

统计过去10分钟内,每个msg_id和type组合的出现次数,直接使用如下LogQL即可:

sum by (msg_id, type) (
  count_over_time(
    {build="runtimeidentifier"} 
    |= "Trace_MSG_" 
    | regexp "(?P<type>(CR|IN)): (?P<msg_id>[a-z0-9.-]{36})"
    [10m]
  )
)

如果需要单独统计某类type的计数,比如只统计CR类型的数量,增加过滤条件即可:

sum by (msg_id) (
  count_over_time(
    {build="runtimeidentifier"} 
    |= "Trace_MSG_" 
    | regexp "(?P<type>(CR|IN)): (?P<msg_id>[a-z0-9.-]{36})"
    | type == "CR"
    [10m]
  )
)

查询逻辑说明

  • 内层先通过日志选择器和关键字过滤缩小查询范围,再通过regexp提取出type和msg_id两个自定义标签
  • 用[10m]将即时日志向量转换为10分钟跨度的范围向量,满足聚合算子的参数要求
  • count_over_time会统计每个唯一标签组合在时间范围内的日志行数
  • 外层sum by (msg_id, type)会忽略其他无关标签的干扰,仅按你需要的两个维度聚合计数,返回的结果完全匹配预期格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 00:15:07