nginxアクセスログから最後の10分間のログを取得する

nginxアクセスログから最後の10分間のログを取得する

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
助けてくれてありがとう。

答え1

問題は、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

問題を説明するために例を少し簡単にしましたが、必要に応じていつでも上限チェックを再追加できます。

関連情報