[nginx] 특정 시간대 IP + URI 추출하기
시간대 별 IP 와 URL를 추출할 일이 있어서 정리합니다.
아래는 nginx access.log로그 패턴입니다.
52.78.xxx.yyy — — [05/Jul/2017:17:00:00 +0900] “POST /user HTTP/1.1” 200 0 “-” “-” “52.78.xxx.yyy”
저는 특정 시간대 IP와 URI만 추출해야해서 첫번째(IP)와 7번째(URI)만 가져와서 파일로 남기려고 합니다.
명령어는 아래와 같습니다. access.log에서 10시~10시59분 사이에 로그를 가져와서 awk를 이용해서 IP($1)와 URI($7)을 가져와서 sort, uniq -dc를 통해서 중복을 제거하고 정렬을 해서 count가 높은 10개만 가져옵니다.
sed -n ‘/2017:10:00/,/2017:10:59/p’ access.log | awk ‘{print $1, $7}’ | sort -n | uniq -dc | sort -rn | head -10결과는 아래와 같습니다.
[root@nginx nginx]# sed -n '/2017:10:00/,/2017:10:59/p' access.log | awk '{print $1, $7}' | sort -n | uniq -dc | sort -rn | head -10
7138 192.168.xxx.yyy /
7127 192.168.xxx.yyy /
1992 192.168.xxx.yyy /nginx_status
1992 192.168.xxx.yyy /
507 211.253.xxx.yyy /data...
...
[root@arch nginx]#
가끔 이런식의 작업이 필요한데 매번 찾아서 만들려고 하니 이것도 일이네요. 간단하게 정리합니다.