过滤 Loki 中每个系统在某个时间范围内的最新日志条目

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

我正在使用 Grafana Loki 来监控系统日志,我需要确定每个系统上次发送日志条目的时间。我的目标是识别离线的系统。以下查询通过检查 mrs_system_info 中的日志而不是 mrs_error_list 中特定时间范围内的日志来识别此类系统:

count by(system) (count_over_time({job="mrs_system_info"} [10m]))
unless
count by(system) (count_over_time({job="mrs_error_list"} [5m]))

此查询有效地标记了被视为离线的系统,如链接图像所示。然而,我遇到了时间戳相同且不准确的问题——仅反映当前时间。 我的方法是使用附加查询获取每个系统的最后一个日志条目,然后使用 Grafana 转换将它们与相应的离线系统关联起来。但是,由于 5000 条日志限制,我遇到了挑战,我需要一个解决方法。理想情况下,我想获取每个系统的 job="mrs_system_info" 的最后一个日志条目。然而,我不确定 Loki 中的正确查询。

一旦我获得了每个系统的最后一个条目(例如,job=“mrs_error_list”),我就可以使用转换将其与离线系统配对以获得正确的时间戳。

考虑到日志量很大,如何修改 Loki 查询以仅检索指定时间范围内每个系统的最后一个日志条目?

grafana grafana-loki grafana-variable promtail logql
1个回答
0
投票

考虑到日志量很大,如何修改 Loki 查询以仅检索指定时间范围内每个系统的最后一个日志条目?

您可以使用

max_over_time
功能。下一个查询返回每个系统过去 24 小时的最后日志时间戳。将查询类型从范围更改为即时。

max_over_time(
  {job="mrs_system_info"}
    | label_format ts=`{{ __timestamp__ | unixEpoch }}` 
    | unwrap ts[24h]
) by (system)

如果日志数据量很大,查询执行时间很慢,可以使用记录规则在一个小时间窗口内定期查询日志,并将结果发送到 Mimir 或 Prometheus。

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