Shell-Script

從 nginx 訪問日誌中獲取最近 10 分鐘的日誌

  • August 16, 2019

我想在 Ubuntu 16.04 上的 Nginx 的 access.log 文件中過濾最後 10 分鐘寫入的日誌。我嘗試使用下面的行,但只過濾了那一分鐘的日誌。

awk -v d1="$(date --date="-10 min" "+%d/%b/%Y:%H:%M")" -v d2="$(date "+%d/%b/%Y:%H:%M")" '$0 > d1 && $0 < d2 || $0 ~ d2' /usr/local/nginx/logs/access.log

這是所寫日誌的日期格式:

12/Apr/2018:12:49:03

任何幫助將不勝感激。

問題是 nginx 日誌在文件的開頭沒有日期:考慮到這一點,你會得到這個(我的是該行的第 5 個元素,請注意$4

sudo awk -v d1="$(date --date '-10 min' '+%d/%b/%Y:%T')" '$4 > d1' /var/log/nginx/access.log

然後問題又是在開頭有不相關的方括號:

所以刪除方括號會給你一些功能:

sudo awk -v d1="$(date --date '-10 min' '+%d/%b/%Y:%T')" '{gsub(/^[\[\t]+/, "", $4);}; $4 > d1' /var/log/nginx/access.log

我已經稍微簡化了這個例子來展示這個問題,但如果你願意,你可以隨時添加上限檢查。

引用自:https://unix.stackexchange.com/questions/437278