能否在Grafana中对Loki日志按天聚合统计每日活跃用户DAU?
Loki统计每日活跃用户(DAU)方案
完全可以通过Loki实现该需求,无需切换到Elasticsearch工具。
实现逻辑
你只需要在原有查询的基础上增加按日期分组的步骤即可,核心是给每条日志打上对应的日期标签,再按日期维度统计独立用户数。
可用查询语句
sum by (day) ( # 内层按日期+用户名去重,同一个用户同一天只会保留1条计数 count by (day, username) ( {job="my-app"} | json | username != "" # 将日志自带的ts字段格式化为YYYY-MM-DD格式的日期标签 | label_format day = {{.ts | date "2006-01-02"}} ) )
如果你不需要严格使用日志内置的ts字段,也可以直接用Loki的索引时间生成日期标签,语句简化为:
sum by (day) ( count by (day, username) ( {job="my-app"} | json | username != "" | label_format day = {{ time.Now().Add(0) | date "2006-01-02" }} ) )
Grafana展示配置
要生成过去60天的DAU时间序列,只需要做两个配置:
- 面板时间范围选择「过去60天」
- 查询的
Min step参数设置为1d,即可输出每天一条的DAU统计结果,和你期望的输出格式完全匹配。
补充说明
仅DAU这类简单维度聚合场景,Loki的性能和功能完全可以满足需求,只有当你需要做大量复杂多维度聚合、全文模糊检索等场景时,才需要考虑切换到Elasticsearch。
内容的提问来源于stack exchange,提问作者zpr
相关产品推荐
相关产品推荐

