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 로그에 파일 시작 부분에 날짜가 없다는 것입니다. 이를 고려하면 다음과 같은 결과를 얻을 수 있습니다(내 것은 줄의 다섯 번째 요소였습니다. 주의하세요 $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

문제를 설명하기 위해 예제를 약간 단순화했지만 원하는 경우 언제든지 상한선 검사를 다시 추가할 수 있습니다.

관련 정보