【问题标题】:How to get last N min or N hour logs from any log files using command in linux如何使用 linux 中的命令从任何日志文件中获取最后 N 分钟或 N 小时的日志
【发布时间】:2022-01-05 18:44:09
【问题描述】:

我需要从任何日志文件中获取最近 n 分钟或 n 小时的日志。我搜索并执行了许多命令,但没有一个不起作用。如果有任何特定的命令而不是脚本,那将是完美的。我的 Nginx 时间格式是“2022/01/05 11:47:41”

我试过下面的命令

awk -v bt=$(date "+%s" -d "30 minutes ago") '$1 > bt {printf("%s|%s|%s\n", strftime("%F %T",$1), $3, $7)} ' /var/log/nginx/access.log

sed -n "/^$(date --date="60 minutes ago" "+%d/%b/%Y:%H:%M")/,\$p" /var/log/nginx/access.log

grep -E (date -d -15minutes "+%Y/%m/%d %H:%M"|date -d "+%Y/%m/%d %H:%M")

还有很多类似上面的命令。

【问题讨论】:

  • 你的 nginx 日志文件的格式是什么?
  • 我需要同时查看 Nginx 和 pm2 日志的日志。对于 Nginx 是 "2022/01/05 11:47:41" 我发现每个日志都有自己的时间格式。所以最好知道我们怎样才能得到所有不同时间格式的日志文件。但如果你能告诉我这个时间格式,我可以根据我的要求修改它。谢谢 - jhnc

标签: linux shell command sh script


【解决方案1】:

试试这个命令,它对我有用

sed -n /$(date --date="15 minutes ago" "+%T")/,/$(date "+%T")/p logfile > newfile

date --date="15 minutes ago" "+%T" 是 15 分钟之前的时间

date "+%T" 是当前时间

你必须修改基于时间格式和你的日志文件

【讨论】:

  • 为什么引用+%T?如果日期字符串出现在一行的任何其他位置(例如,在 url 中),则此 sed 将失败。开始条件将在错误的位置匹配(您需要包括日期,而不仅仅是时间。如果在 840 / 780 / 720 / 等秒前有访问,则结束条件将不正确
猜你喜欢
  • 2016-05-07
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
相关资源
最近更新 更多