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 로그에 파일 시작 부분에 날짜가 없다는 것입니다. 이를 고려하면 다음과 같은 결과를 얻을 수 있습니다(내 것은 줄의 다섯 번째 요소였습니다. 주의하세요 $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
문제를 설명하기 위해 예제를 약간 단순화했지만 원하는 경우 언제든지 상한선 검사를 다시 추가할 수 있습니다.