Apache-2.2

解析過去一小時內特定措辭的 Apache 日誌

  • June 15, 2014

我正在尋找/var/log/httpd包含大量 Apache 日誌文件的文件夾。

我正在尋找過去一小時內的特定事件。我已經嘗試了以下方法,但我沒有任何運氣。

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

想法?

您正在執行遞歸 grep (-R) - 在這種情況下沒用 - 我認為您在 /var/log/httpd 下沒有任何子目錄(如果這是標準發行版)。

您想要做的是丟棄一小時前具有時間戳的行之前的所有內容。此外,訪問和錯誤日誌通常具有不同的時間戳。

因此,例如,訪問日誌具有以下時間戳:

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

因此,您需要使用 date 在該特定時間戳中列印時間,例如:

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 不會匹配行。

引用自:https://serverfault.com/questions/605309