解析过去一小时内的 Apache 日志中的特定措辞

解析过去一小时内的 Apache 日志中的特定措辞

我正在解析/var/log/httpd包含大量 Apache 日志文件的文件夹。

我正在寻找过去一小时内的特定事件。我尝试了以下方法,但没有任何结果。

grep -R "$(date -d -1hour +'%Y-%m-%d %H')" /var/log/httpd/ | grep "too many failed"

有什么想法吗?

答案1

您正在执行递归 grep (-R) - 在这种情况下是无用的 - 我假设您在 /var/log/httpd 下没有任何子目录(如果这是标准发行版)。

您要做的就是丢弃时间戳为一小时前的行之前的所有内容。此外,访问和错误日​​志中通常包含不同的时间戳。

例如,访问日志具有以下时间戳:

[15/Jun/2014:23:11:41 +0200]

因此您需要使用日期来打印特定时间戳中的时间,例如:

CURTIME=$(date -d -1hour +'%d/%b/%Y:%H:%M' | sed 's#/#.#g'); \
sed "1,/$CURTIME/d" /var/log/httpd/*access_log

对于错误日志,您需要使用不同的方法,因为 error_log 使用这种时间戳:

[Sat Jun 14 09:12:50 2014]

您唯一需要记住的是,如果 apache 一小时前没有记录任何行,则这种方法将会失败,因为 sed 没有行匹配。

答案2

你看过 Apache 日志中日期的格式了吗?在我手头的系统 (CentOS) 中,访问日志的/var/log/httpd日期格式是

15/Jun/2014:11:48:27 +0000

如果你也是这样,那么你需要

date -d -1hour +'%d/%b/%Y:%H'

作为您的日期命令。

如果不同,那么您需要向我们展示日志文件使用的格式。

相关内容