본문 바로가기
Unix

커맨드라인의 간단한 아파치(Apache) 로그분석

by 이르가체페 2015. 5. 19.



1. IP별 접속 분석 (Apache)
1. 아파치접속로그 최근 1만건을 불러와봅니다. 매우 지저분합니다.
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | more
175.192.192.109 - - [19/May/2015:13:36:47 +0900] "GET /s
175.192.192.109 - - [19/May/2015:13:36:48 +0900] "GET /s
175.192.192.109 - - [19/May/2015:13:36:49 +0900] "GET /s
이하생략

2. cut으로 IP만 잘라봅니다.
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\  -f 1 | more
175.192.192.109
66.249.79.215
175.192.192.109
66.249.79.191
66.249.79.191
66.249.79.191
157.55.39.13
157.55.39.13
66.249.79.191
66.249.79.161
157.55.39.13
이하생략

3. 중복되는 IP가 많네요. uniq 를 이용하여 카운트합니다. (사전에 정렬이 필요하니 sort 를 해줍니다.)
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\  -f 1 | sort | uniq -c | more
 119 1.215.252.254
  92 1.220.184.19
  96 1.247.32.194
 120 1.254.174.151
  22 101.199.108.51
   4 106.245.132.73
  48 106.245.95.151
   2 110.13.97.220
 101 110.70.52.104
이하생략

4. 보기좋게 uniq의 갯수순서대로 정렬해줍니다.
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\  -f 1 | sort | uniq -c | sort -k 1 -rn | more
 661 66.249.79.215
 655 66.249.79.191
 545 14.34.41.41
 538 118.130.93.218
 429 220.87.68.140
 425 175.192.192.109
 351 59.6.166.11
 344 211.241.59.146
 332 121.182.196.219
이하생략

5. 중복되는 IP대역을 C클래스로 퉁쳐보리기위해  cut의 delimeter로 '.' 을 사용하고, 앞의 세자리만 잘라냅니다. 정렬, 카운트 후 상위 10개만 출력합니다.
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\.  -f 1,2,3 | sort | uniq -c | sort -k 1 -rn | head -n 10
1409 66.249.79
 652 183.100.176
 598 211.253.124
 567 124.5.193
 388 157.55.39
 366 211.195.137
 271 119.67.165
 248 221.149.85
 228 210.180.115
 228 112.220.203

6. 혹시나싶어 앞의 두자리만 잘라서 정렬, 카운트해봅니다.
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\. -f 1,2 | sort | uniq -c | sort -k 1 -rn | more
1874 66.249
 508 211.241
 508 118.130
 467 121.182
 429 220.87
 367 157.55
 318 203.252
이하생략


7. IP를 3자리 끊어서 카운팅한  목록에 ".0" 을 붙여서 whois정보를 조회해봅니다.
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\. -f 1,2,3 | sort | uniq -c | sort -k 1 -rn | cut -c5-99 | sed 's/$/.0/g' | xargs whois | egrep -i "cidr|netname|inetnum" | more
whois: connect(): No route to host
CIDR:           66.249.64.0/19
NetName:        GOOGLE
CIDR:           121.0.0.0/8
NetName:        APNIC-121
inetnum:        121.128.0.0 - 121.191.255.255
netname:        KORNET
inetnum:        121.128.0.0 - 121.159.255.255
netname:        KORNET-KR

8. 간단히 아래 두줄의 스크립트로 정리가능합니다. (두개의 파일에 결과출력 -> log_analysis_top10, log_analysis_top10_whois)
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\.  -f 1,2,3 | sort | uniq -c | sort -k 1 -rn | head -n 10 > log_analysis_top10
[adm@webtest:/home/adm >] tail -n 10000 /var/log/httpd-access.log | cut -d\.  -f 1,2,3 | sort | uniq -c | sort -k 1 -rn | head -n 10 | cut -c5-99 | sed 's/$/.0/g' | xargs whois | egrep -i "cidr|netname|inetnum" > log_analysis_top10_whois


반응형

'Unix' 카테고리의 다른 글

구형맥미니 Macos USB제작, 클린설치  (0) 2017.07.11
awk 칼럼 바꾸기 (sed)  (0) 2017.02.22
[cygwin] crontab 설정문제  (0) 2016.12.08
Centos 디스크 복제 및 grub 복구  (0) 2014.10.29
gzip 압축률 테스트 및 선택 지표  (0) 2014.07.28

댓글