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

如何复用Loki提取的日志值提升Grafana分位数查询效率

LogQL多分位数查询性能优化方案
  • 优先用Loki记录规则预提取公共数据集
    你现在查询慢、长跨度执行失败的核心原因,是每次查询都要重复扫描原始日志、做字符串过滤、pattern正则解析、字段unwrap,这部分是整个查询最重的IO和计算环节。可以在Loki的Ruler组件配置记录规则,提前把你需要的build_time_seconds相关字段按固定短窗口(比如1m/5m)预提取、结构化存储为时序指标,后续查分位数时直接查询预生成的结构化指标,不需要再扫原始日志,查询速度可以提升10倍以上,跨月查询也不会超时。
    记录规则示例:
    groups:
    - name: build_time_common_metrics
      interval: 1m
      rules:
      - record: extracted_build_time_seconds
        expr: |
          {app="my-awesome-app"} |= "build_time_seconds" |= "MacBook"
          | pattern "<_>} <metric_value>\\<_>"
          | unwrap metric_value
    
    后续分位数查询直接基于预生成的extracted_build_time_seconds指标编写即可,不需要再重复写过滤、解析逻辑。
  • 单条LogQL语句一次性计算多个分位数
    如果你暂时没法配置记录规则,不要拆成三个独立查询分别算0.5/0.95/0.99分位。2.7及以上版本的Loki原生支持quantile_over_time传入多个分位参数,一次查询即可返回所有分位结果,查询引擎会自动复用公共的日志扫描、解析逻辑,不会重复执行三次提取计算。示例语句:
    quantile_over_time(
      0.5, 0.95, 0.99,
      {app="my-awesome-app"} |= "build_time_seconds" |= "MacBook"
      | pattern "<_>} <metric_value>\\<_>"
      | unwrap metric_value [1d]
    )
    
    返回结果会自动携带quantile标签区分不同分位值,在Grafana里可以直接按这个标签拆分成三条线展示。
  • 用Grafana表达式功能复用查询结果
    你要的前置查询结果引用能力不需要把仪表板配置为数据源,直接用Grafana内置的Expression功能即可实现:
    1. 在面板的查询栏新建第一个Loki查询,命名为A,只写公共的日志过滤、解析、unwrap逻辑,返回原始提取到的指标值,把这个查询的可见性设为隐藏
    2. 新建3个Reduce类型的表达式查询,分别选择输入数据源为$A,计算函数选分位数,参数分别填0.5、0.95、0.99,窗口对齐你需要的1d粒度
    3. 这三个分位数计算会完全复用查询A返回的缓存结果,只会向Loki发起一次日志提取请求,不会重复计算。

注意:如果你的Loki版本低于2.7不支持多参数quantile_over_time,用Grafana表达式复用的方案兼容性最好,不需要升级Loki就能拿到性能提升。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:24:37