使用 Grafana 和 Loki 删除重复条目

Posted

技术标签:

【中文标题】使用 Grafana 和 Loki 删除重复条目【英文标题】:Removing duplicate entries with Grafana and Loki 【发布时间】:2021-11-03 19:56:18 【问题描述】:

我正在使用 Grafana 来可视化来自 Prometheus 的指标和来自 Loki 的关于应用程序的日志。有日志语句如:

"action": "action_a", "username": "user_1", "ts": 1012
"action": "action_a", "username": "user_2", "ts": 1008
"action": "action_a", "username": "user_1", "ts": 1005
"action": "action_a", "username": "user_1", "ts": 1000

我有一个查询,可以使用 Grafana 日志面板获取“最近活跃用户”的列表:

job="my-app" | json | username != "" | line_format ".username"

我已经尝试了Deduplication 的所有值,这大部分都可以正常工作,除了用户在彼此之间进行操作的(常见)情况(如上所述),然后我会得到这样的日志:

user_1
user_2
user_1

我怎样才能让它只显示每个用户一次?例如:

user_1
user_2

【问题讨论】:

【参考方案1】:

试试这样的:

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

您可以使用例如 Grafana 上的饼图来显示这些数据。请参阅下面如何配置它,使用不同的日志文件和不同的标签(“分支”而不是“用户名”):

【讨论】:

有趣!没想到将其转换为指标。这个最有效:sum by (username) (count_over_timejob="my-app" | json | username != ""[$__range])) > 0。这实际上很好,因为我可以在饼图中显示它并查看哪个用户最活跃。为了完整起见,我怎样才能像以前一样在列表中显示信息?带有“即时”的表格面板选择了一些作品,但有一些额外的列。 对不起,我忘记了答案中的“[$__range]”,我刚刚修好了。在我的测试中,使用“即时”选项,我看到的唯一额外列是“时间”。 时间列(这只是自其“即时”以来的当前时间)和代表计数的系列“值#A”。我想我想知道有没有办法让它只显示日志面板中的名称?否则,将其用作饼图效果很好,甚至比老实说的列表更好。 是的,您可以在漂亮的饼图中显示信息。重要提示:使用“范围”而不是“即时”。

以上是关于使用 Grafana 和 Loki 删除重复条目的主要内容,如果未能解决你的问题,请参考以下文章

prometheus(或grafana)查询来评估grafana loki使用的存储?

轻量级日志采集系统Loki+grafana搭建

如何在 Grafana 上使用 LogQL 将 Loki 解析的字段绘制为数值?

Promtail + Loki + Grafana 日志监控系统搭建

Grafana/Loki:如何在 LogQL 中使用多选模板变量?

在 grafana 云中访问 loki