【问题标题】:Need to find the maximum difference between two consecutive timestamps out of multiple timestamps that are logged in a single log file需要在单个日志文件中记录的多个时间戳中找到两个连续时间戳之间的最大差异
【发布时间】:2023-03-20 02:35:01
【问题描述】:

我有一些由前端应用程序记录在 Unix 服务器中的日志文件。这些文件包含所有以时间戳值开头的日志记录语句,后跟日志记录文本。以下示例显示了如何在这些文件中完成日志记录的示例:

02 07:31:05.578 记录文本........(我在这里加粗了时间戳,因为我将在下面用它来解释这个时间戳记法)

02 07:31:05.579 记录文本............

02 07:31:05.590 记录文本............

02 07:31:05.591 记录文本............

02 07:31:05.593 记录文本............

时间戳值说明 -

02 : 日期值(如果日期是 7 月 02 日,则值为 02)

07 : 小时

31 : 分钟

05 : 秒

578 : 毫秒

注意:如果您正在寻找“YYYY”即年份字段,请忽略。为简单起见,请仅使用上述格式。

我必须实现的目标:我必须找出给定文件中与给定文件中所有其他连续时间戳对相比最大差异的两个连续时间戳.

示例:如果您看到上面的日志文本示例,您将看到上面示例中唯一一对具有最大差异的连续时间戳是 02 07:31:05.57902 07:31:05.590

我正在寻找一个可以在所需文件上运行的 shell 脚本,并将输出作为具有最大差异的两个连续时间戳。

我为什么需要它:有很多这样的日志文件,我需要监控日志语句之间存在巨大差异的情况。这可能会帮助我找出诸如 SQL 查询由于锁定而等待事务发生很长时间、API 请求没有从目标获得响应等情况。

如果有人也可以分享有关此问题的任何其他帖子或任何其他有帮助的有效方式。

感谢大家阅读并抽出时间。如果需要更多信息,请告诉我。

【问题讨论】:

  • ...你必须阅读How to Ask
  • @J.Chomel,谢谢,请参阅我在浏览您的链接后更新了帖子。
  • 一般来说这是不可能的,因为使用了去势日期。你可以有28 23:59:59.999,然后是01 00:00:00.001。这可能意味着 2 毫秒(在非闰年的 2 月底)或 3 天(在 8 月底)。但由于我们不知道月份,我们只能猜测一下。鉴于此输入,也无法将时间戳转换为 UNIX 纪元时间(wince 1970-01-01 秒)。所以谁想出了这种时间戳格式让你的工作变得非常困难。

标签: shell unix logging timestamp date-difference


【解决方案1】:

您可以使用awk 命令编写脚本。 您在这里有如何使用awk 转换日期的示例:Converting dates in AWK

这将帮助您解析文件,并在每行的开头添加 2 列:

  • 行号
  • 与上一行的区别

然后你必须使用第二列对结果文件进行排序,你就完成了。

当然,如果我为您编写脚本就太容易了(而且我真的没有很多时间)。因此,您必须自己尝试上述方法,然后再提出具体问题。与on topic questions of SO 相比,您的问题在这里过于宽泛。

【讨论】:

  • 感谢您的回复。我已经开始研究它,是的,我的问题很广泛。让我先处理脚本,然后我会继续我的工作。
【解决方案2】:

我建议遍历这些行,将每个时间戳转换为 UNIX 纪元时间(自 1970-01-01 以来的秒数,date 可以做到这一点)。不幸的是,您缺少月份和年份,但也许您可以假设当前月份和年份;除了月份边界,无论如何这应该会给出正确的距离结果。

然后我会再次给出每一行,其时间戳与前一行的差异。所以出来

02 07:31:05.579 logging text........
02 07:31:05.590 logging text........
02 07:31:05.591 logging text........
02 07:31:05.593 logging text........

我会做

0.000 02 07:31:05.579 logging text........
0.011 02 07:31:05.590 logging text........
0.001 02 07:31:05.591 logging text........
0.002 02 07:31:05.593 logging text........

然后您可以简单地sort -g 这个新输出按其前一行之间的时间对其进行排序。最后一行将是时间戳差异最大的行。

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 2022-12-20
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    相关资源
    最近更新 更多