바로가기 메뉴
본문내용 바로가기
메인메뉴 바로가기

상단배너



Customer Center

Notice · Security Issue · Account Guide · Global Traffic Test

HOME > Customer Center > Tech Note

기술노트

grep,awk,sort,wc (웹로그파일(access_log)에서 유일 IP카운트방법)
2016.02.19

웹로그파일(access_log)에서 유일 IP카운트방법

서버관리자들에게 있어서 로그파일의 의미는 아무리 강조하여도 지나치지 않을 것입니다.
그중에서도 웹로그파일은 웹방문자들의 숫자를 카운트하거나 웹페이지별 방문자를 분석하는 등의 작업들을 할 수가 있는 매우 유용한 로그파일입니다.
이번 실무활용예에서는 서버관리자들에게 흔히 요구되는 것이 홈페이지의 유일IP방문자숫자를 확인해 달라는 것입니다.
물론, 유일 IP를 카운트하여 분석하는 작업이 경력있는 서버관리자들에게는 별 어려움없는 일이겠지만 초보관리자들을 가끔씩은 힘겹게하는 일일 層?있습니다.
또한, webalizer나 accesswatch등의 웹로그분석프로그램을 사용하여 분석한다면 이또한 매우 쉬운 일입니다.
하지만, 필자가 여기서 알려드리고자 하는 방법은 서버관리자가 간단한 명령어로 유일 IP를 뽑아내는 방법에 대한 것입니다.
자, 그럼 먼저 우리가 흔히 볼 수 있는 웹로그파일의 이름이 access_log입니다.

그리고 이 파일의 내용을 간단히 보면 다음과 같은 형식을 가지고 있습니다.
[root@host1 logs]# ls -l
합계 92408
-rw-r--r-- 1 root root 94525796 9월 25 21:46 access_log
[root@host1 logs]#
[root@host1 logs]# tail access_log
221.150.53.43 - - [25/Sep/2003:21:41:38 +0900] "GET /images/products/F0100213a.jpg HTTP/1.1" 200 3534
221.150.53.43 - - [25/Sep/2003:21:41:38 +0900] "GET /images/products/F0100214a.jpg HTTP/1.1" 200 3580
221.150.53.43 - - [25/Sep/2003:21:41:38 +0900] "GET /images/products/F0100215a.jpg HTTP/1.1" 200 3601
221.150.53.43 - - [25/Sep/2003:21:41:38 +0900] "GET /images/products/F0100216a.jpg HTTP/1.1" 200 3412
221.150.53.43 - - [25/Sep/2003:21:41:38 +0900] "GET /images/products/F0100217a.jpg HTTP/1.1" 200 3362
221.150.53.43 - - [25/Sep/2003:21:41:39 +0900] "GET /images/products/F0100218a.jpg HTTP/1.1" 200 3507
221.150.53.43 - - [25/Sep/2003:21:41:39 +0900] "GET /images/products/F0100219a.jpg HTTP/1.1" 200 3507
221.150.53.43 - - [25/Sep/2003:21:41:41 +0900] "GET /shopping.php?page=11&keyfield=&key=&bigcode=F&midcode=F01 HTTP/1.1" 200 28235
221.150.53.43 - - [25/Sep/2003:21:41:41 +0900] "GET /images/products/F0100220a.jpg HTTP/1.1" 200 3202
221.150.53.43 - - [25/Sep/2003:21:41:41 +0900] "GET /images/products/F0100221a.jpg HTTP/1.1" 200 3202
[root@host1 logs]#
자, 그럼 이제 이 access_log파일의 전체 유일IP를 뽑아내 보겠습니다.

[root@host1 logs]# cat access_log | awk "{print $1}" > imsi ; sort -u imsi > imsi3 ; wc -l imsi3
4249 imsi3
[root@host1 logs]#
위와 같이 하면 현재의 access_log파일에 유일 IP주소를 카운트할 수 있습니다.
위의 명령어를 간단히 복사하신 다음 여러분들의 access_log파일이 존재하는 곳에서 그대로 해보시기 바랍니다.

좀 복잡해 보이지만 명령어를 이해한 다음 한번 사용해 보시면 금방 익숙해 질 수 있습니다.

그리고 이런 복합적인 명령어를 자주 사용하시다 보면 서버작업을 매우 간편하게 할 수도 있습니다.

위와 같이 명령어 몇개를 조합하여 유일IP주소를 카운트 하고 있지 않습니까.
자, 이번에는 특정 일자에 해당하는 유일IP주소를 카운트하는 방법입니다.


[root@host1 logs]# grep 20/Sep/2003 access_log | awk "{print $1}" > imsi ; sort -u imsi > imsi3 ; wc -l imsi3
75 imsi3
[root@host1 logs]#

위에서 20/Sep/2003 라고 된 부분은 2003년 9월 20일자라는 의미입니다.
즉, access_log파일 전체에서 2003년 9월 20일자의 유일IP방문자수는 75명이 된다는 의미입니다.


만약 다른날짜의 유일IP방문자수를 카운트하고자 한다면 다음과 같이 일자부분과 월, 년부분을 바꾸어 주시면 됩니다.
아래는 2003년 9월 21일자 유일IP방문자 수 입니다.

[root@host1 logs]# grep 21/Sep/2003 access_log | awk "{print $1}" > imsi ; sort -u imsi > imsi3 ; wc -l imsi3
67 imsi3
[root@host1 logs]#
다음은 2003년 9월 22일자 유일IP방문자 수입니다.

[root@host1 logs]# grep 22/Sep/2003 access_log | awk "{print $1}" > imsi ; sort -u imsi > imsi3 ; wc -l imsi3
90 imsi3
[root@host1 logs]#

필자가 예로든 명령어들은 모두 실제 예입니다.
따라서 그대로 따라해 보셔도 무리없이 실행이 됨을 알 수 있습니다.
단, 위의 예와 같이 날짜부분에서 월에 해당하는 문자들은 9월이기때문에 Sep가 된 것이지만, 만약 7월이라면 Jul이 되며, 8월이라면 Aug등으로 해주셔야합니다.

이부분만 정확하게 알고 계신다면 여러가지로 응용이 가능합니다.

이호스트데이터센터(http://www.ehostidc.co.kr)
첨부파일