如何用Loki LogQL统计一小时内的唯一用户数?
统计LogQL中一小时内的唯一用户数
要统计1小时内的唯一用户数量,你需要调整LogQL的结构,从“按用户统计请求数”转为“统计有多少个不同的用户”。
正确的LogQL语句
count(count by (UserID) ({app="app"} | logfmt [1h]))
语句拆解
- 筛选并解析日志:
{app="app"} | logfmt会匹配目标应用的日志,并将日志解析为键值对,自动提取UserID标签。 - 按用户分组聚合:
count by (UserID) (...) [1h]会在1小时的时间窗口内,按UserID分组统计每个用户的日志条目数——这一步的核心是把同一个用户的所有日志合并为一条记录(不管该用户请求多少次)。 - 统计唯一用户数:最外层的
count()会统计上述分组结果的总数,也就是1小时内出现过的唯一用户数量。
对比原语句的区别
你原来的语句count(count_over_time({app="app"} | logfmt [1h])) by (UserID)是按用户维度统计请求次数,而我们需要的是统计用户的数量,所以需要把by (UserID)放到内层的分组中,再用外层的count()统计分组的数量。
拿你提供的日志示例来说,执行正确语句后会得到结果2(因为只有65166和24413两个唯一用户),符合预期。
内容的提问来源于stack exchange,提问作者TheEdgeOfRage
相关产品推荐
相关产品推荐

