Apache-2.2
解析過去一小時內特定措辭的 Apache 日誌
我正在尋找
/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 不會匹配行。