跟踪“在过去一小时内从日志文件中写入的行”是否可能?

跟踪“在过去一小时内从日志文件中写入的行”是否可能?

我正在尝试使用 grep 在日志文件中寻找模式,但我需要日志文件的最后一小时。tail -n XX 不起作用。有人知道这是否可行吗?某种跟踪“过去一小时内从日志文件中写入的行”

如果有任何命令或程序,我将不胜感激。

多谢

答案1

假设您的日志具有以下结构:

219.369.42.449 - - [05/Mar/2020:11:05:17 +0200] "log line"
219.369.42.449 - - [05/Mar/2020:11:06:37 +0200] "log line"
219.369.42.449 - - [05/Mar/2020:12:01:14 +0200] "log line"
219.369.42.449 - - [05/Mar/2020:12:07:23 +0200] "log line"

我们可以使用以下方式获取从第一次出现到文件05/Mar/2020:11末尾的所有行:$sed

sed -n '/05\/Mar\/2020:11/,$p' "/path/to/file.log"
  • 该选项-n将抑制的正常输出sed,但该标志p将打印文件的匹配部分。

  • 请注意,如果没有显示任何与之匹配的记录05/Mar/2020:11sed则不会提供任何输出。

我们可以借助以下命令自动执行上述操作dateeval

COMMAND="sed -n '/$(LANG=C date --date='1 hour ago' "+%d\/%b\/%Y:%H")/,\$p'"
eval $COMMAND \"/path/to/file.log\"
  • sed在这种情况下,在表达式中使用双引号和变量不会提供所需的输出。
  • 因此我们首先将命令构建为字符串,然后通过将其转换为真实命令eval
  • LANG=C( LANG=en_us_88591) 代表获取所需的日期格式,因为,例如,在我的情况下,这个环境变量的默认值是bg_BG.UTF-8

您可以根据以上两行创建一个脚本 - 该脚本的示例:

答案2

tail 没有命令或选项可以跟踪过去一小时的变化。您必须在日志中 grep 时间戳,或者继续tail -f运行,当需要检查某些内容时只需向后滚动即可。这样做的好处是,您还可以捕获 61 分钟前发生的事件。

答案3

每 5 分钟运行一次命令时,还要复制一份日志文件。然后,您可以从制作的倒数第 12 个副本中进行差异分析,以获取当前更改。

答案4

利用 @pa4080 用来获取一小时前的日期命令。将其传递给 awk 脚本,该脚本查找包含正确年、月、日以及匹配的小时和更高的分钟或更高的小时的第一行。从第一行到文件末尾的输出。

我的 awk 不是那么强大,否则我会为你编写它。希望其他人能成为你的 awk 大师。

相关内容