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

如何在Grafana中基于Loki生成99分位响应时间时间序列

问题根因

查询只返回单个数据点是两个配置错误导致的:

  • 执行查询时默认使用了即时查询(Instant Query)模式,该模式仅返回查询触发时刻单个时间点的计算结果,不会生成时序序列
  • LogQL语句中的范围选择器未指定计算步长,Loki无法按固定时间窗口滚动计算每个时间片的聚合值。
调整步骤
  • 先在可视化工具(如Grafana)的查询配置栏,将查询类型从Instant切换为Range(范围查询)模式,同时将面板的查询时间范围设置为你需要观测的历史区间(如最近6小时、最近24小时)。
  • 修改查询语句中的unwrap范围语法,使用[窗口长度:计算步长]的格式替换原来的[1m],让Loki按固定步长滚动计算每个窗口的99分位值,调整后的完整语句如下:
quantile_over_time(0.99,{filename="/var/log/server.log"}
    | json
    | MessageTemplate=~".*HostingRequestFinishedLog:l.*"
    | unwrap Properties_ElapsedMilliseconds [1m:1m])
  by (Properties_Path)

语句中[1m:1m]的含义:

  • 前一个1m是分位计算的窗口大小:每个计算点取对应时刻往前1分钟内的所有请求日志计算99分位
  • 后一个1m是计算步长:每隔1分钟生成一个聚合点,和你每分钟都有请求的日志粒度完全匹配,即可渲染出连续的折线。
可选优化
  • 如果用Grafana做可视化,可以把步长替换为内置变量$__interval,即范围写为[1m:$__interval],系统会根据当前面板选择的时间跨度自动调整点密度,避免大时间范围下点量过大导致渲染卡顿。
  • 如果使用Loki 2.7及以上版本,出现个别时间点缺值断连的情况,可以在语句末尾追加|> fill(0),将无数据的时间点补为0,保证折线连续性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:45:56