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

Loki的LogQL查询nginx日志时sum和avg返回结果一致是什么原因?

问题核心原因

1. unwrap的字段被过滤后所有值完全相同

你已经在LogQL管道中添加了| status=200的过滤条件,所有参与后续计算的日志行的status值都是200。后续unwrap status拿到的所有样本值全为200,此时avg_over_time计算指定时间窗口内的平均值,结果必然固定为200,和窗口内的日志数量没有任何关系。

2. sum和avg返回结果一致的原因

当你按upstream分组聚合时:

  • 你的场景中每个upstream对应的唯一日志流(由$label_name、job、instance、upstream这些标签共同确定)只有1个,sum(单个200)和avg(单个200)的结果都是200,所以二者返回值完全相同。
  • 你所说的“返回了值的总和”是对指标含义的误解:当前语句的返回值完全不能代表200请求的数量,仅和upstream对应的流数量有关。

3. 语句不符合统计200请求量的需求

如果你是要统计每个upstream的200状态码请求数/请求速率,应该用count_over_time统计时间窗口内的日志行数,不需要unwrap status字段,正确写法参考:

sum(count_over_time({$label_name=~"$label_value", job=~"$job", instance=~"$instance"} | json | status=200 | __error__="" [$__interval])) by (upstream)

只有当你需要统计数值类型字段(如请求延迟、响应大小)的聚合值时,才需要用unwrap取出对应字段做计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:45:04