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

如何用LogQL获取Squid日志24小时末的Top10请求域名?

解决Loki + Grafana展示Squid日志24小时TOP10域名的问题

问题根源

你当前的查询返回所有曾进入TOP10的域名,是因为范围查询模式下,count_over_time会按时间步长返回每个窗口的统计结果,topk会保留每个时间点的TOP条目,最终累积出所有曾上榜的域名。而你需要的是整个24小时窗口的总请求数TOP10,对应Grafana的即时查询模式或正确的聚合写法。

解决方案

方案1:使用即时查询(推荐)

  1. 修改LogQL查询:
    如果你的connection标签已经正确提取到每个日志条目,且需要聚合不同实例的同一域名请求数,用以下查询:
    topk(10, sum by(connection) (count_over_time({container_name="squid"}[1d])))
    
    如果每个connection已经是独立的时间序列(无其他干扰标签),可以简化为:
    topk(10, count_over_time({container_name="squid"}[1d]))
    
  2. 切换Grafana查询模式:
    在面板编辑界面的查询选项中,将Query type从Range改为Instant。这样Loki会返回整个24小时窗口的聚合结果,而非逐时间点的序列,最终柱状图只会显示10个TOP域名。

方案2:范围查询下的聚合写法(兼容时间序列面板)

如果需要保留范围查询模式(比如后续要查看趋势),可以用aggregate_over_time将所有时间步长的统计结果聚合为总请求数:

topk(10, sum by(connection) (aggregate_over_time(count_over_time({container_name="squid"}[1m])[1d:1m], sum)))
  • count_over_time({...}[1m]):统计每分钟内每个域名的请求数
  • [1d:1m]:覆盖过去24小时,步长1分钟
  • aggregate_over_time(..., sum):将所有分钟的请求数求和,得到24小时总请求数
  • topk(10, ...):取总请求数最高的10个域名

验证方法

执行查询后,在Grafana的查询结果预览中,确认返回的是10条静态数据(即时查询)或单时间点的10条数据(范围查询聚合后),而非随时间变化的多条序列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:40:49