[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]#

가끔 이런식의 작업이 필요한데 매번 찾아서 만들려고 하니 이것도 일이네요. 간단하게 정리합니다.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.