如何在Loki/Grafana查询中统计唯一active_user_id的数量
解决Loki中统计时间段内唯一活跃用户数的问题
要统计指定时间段内唯一active_user_id的数量,你需要调整LogQL的时间范围和聚合方式,以下是正确的查询写法:
方法一:使用sum by + count
count(sum by (active_user_id) (count_over_time({type="request"}[$__range])))
方法二:使用count_values + count
count(count_values("active_user_id", {type="request"}[$__range]))
为什么之前的查询不生效?
- 第一个查询
count by (active_user_id) (count_over_time({type="request"}[$__interval])):使用了$__interval(仪表盘的时间间隔),会按每个时间分片统计用户请求数,返回的是每个分片下的用户分组结果,因此你看到97个独立条目,而非总数。 - 第二个查询
count(count by (active_user_id) (count_over_time({type="request"}[$__interval]))):同样基于$__interval分片,count统计的是所有时间分片下的分组条目总数(包含不同分片的重复用户),因此得到的是时间戳相关的272,而非唯一用户数。
关键说明
$__range代表整个查询的时间段(而非分片间隔),确保统计的是全局范围内的用户数据。sum by (active_user_id)会将整个时间段内每个用户的请求数求和,生成每个用户唯一的一条记录;外层count则统计这些记录的数量,即唯一用户数。count_values会直接统计active_user_id标签的所有唯一值,外层count则统计这些唯一值的总数。
内容的提问来源于stack exchange,提问作者Inconsiderable Arse
相关产品推荐
相关产品推荐

