是否可以在 Grafana 上按天聚合 Loki 日志?

问题描述 投票:0回答:3

我有一组这样的日志:

{"action": "action_a", "username": "user_1", "ts": "2021-09-10T02:18:14.103Z"}
{"action": "action_a", "username": "user_2", "ts": "2021-09-10T02:17:14.103Z"}
{"action": "action_a", "username": "user_1", "ts": "2021-09-09T02:16:14.103Z"}
{"action": "action_a", "username": "user_1", "ts": "2021-09-08T02:15:14.103Z"}

是否可以按日期和用户名对日志进行分组以获得每天的唯一用户计数?

我目前有以下疑问:

sum by (username) (count_over_time({job="my-app"} | json | username != "" [$__range]))

这有效地为我提供了当前仪表板范围的唯一用户的饼图。相反,我想要一个时间序列来显示每天的唯一用户数量(例如过去 60 天)。换句话说,就是每日活跃用户 (DAU)。

有了上面的日志,我需要类似的东西:

{"2021-09-10": 2}
{"2021-09-09": 1}
{"2021-09-08": 1}

Loki 可以做到这一点吗?还是我应该寻找 Elasticsearch 之类的东西?

elasticsearch grafana grafana-loki
3个回答
2
投票

要使用 LogQL 按天聚合,您可以将

$__range
替换为您所需的时间分组间隔。

例如

sum by (username) (
  count_over_time(
    {job="my-app"} | json | username != ""
  [1d]) # <-- put your desired time interval here instead of $__range
)

然后您可以使用时间序列可视化来显示您的数据:

有用的链接:


0
投票

也许使用 label_format 创建一个新标签可以解决问题? 标签格式表达式

sum by (day) (
  count_over_time({job="my-app"} | json | label_format day=`{{.ts| substr 0 10}}` | username != ""[$__range])
)

0
投票

我尝试使用相同的查询和设置,但它没有按我想要的方式返回。

我正在尝试从 loki 中检查我的服务器在几小时内的总错误。

This is my current dashboard

任何帮助都会很好:)

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.