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