Grafana+Nginx+Loki环境下按URL统计平均请求时间结果异常
Nginx + Loki 请求平均耗时查询错误修复
问题根源
你误用了聚合函数:avg_over_time是用来计算时间序列样本在指定时间窗口内的平均值,而你需要的是所有符合条件请求的request_time整体平均值。
当你使用avg_over_time时,Loki会把请求按指定的时间窗口(比如[$__interval])拆分,每个窗口生成一个平均值;后续的by (request_uri)会把相同URI的窗口平均值再聚合,这就导致时间范围扩大时,窗口数量同步增加,最终结果被错误放大——这就是你看到“时间范围翻倍,平均值几乎翻倍”的原因。
修正后的查询语句
avg({filename="$filename", host="$host"} | json | request_uri =~ "^/api.*" | __error__="" | unwrap request_time) by (request_uri) * 1000
关键说明
avg函数会直接对所有匹配的日志条目里的request_time求平均值,完全符合你“按URL分组展示平均请求时间”的需求。- 确保Nginx日志里的
request_time是数值类型(Nginx默认的$request_time是浮点数,无需额外处理),unwrap会自动将可转换的字符串转为数值。 - 如果需要按时间维度(比如按小时)查看平均耗时,再结合
avg_over_time和时间窗口,但单纯统计整体平均时,avg是正确选择。
内容的提问来源于stack exchange,提问作者ablaszkiewicz1
相关产品推荐
相关产品推荐

