강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

아파치 웹로그파일(access_log)에서 유일방문자수 카운트하기(유일 IP주소 카운트)

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

아파치 웹로그파일(access_log)에서 유일방문자수 카운트하기(유일 IP주소 카운트)










 

시스템관리자들에게 있어서 로그파일의 의미는 아무리 강조하여도 지나치지 않을 것입니다.

 

 

 

 
그 중에서도 웹로그 파일은 웹방문자들의 숫자를 카운트하거나 웹페이지별 방문자를 분석하는 등의 작업을 할 수가 있는 매우 유용한 파일입니다.

 

 

 

  

 

시스템관리자들에게 흔히 요구되는 것이 홈페이지의 유일IP방문자숫자를 확인해 달라는 것입니다.

 

 

 

  물론, 유일 IP를 카운트하여 분석하는 작업이 경력 있는 시스템관리자들에게는 별 어려움 없는 일이겠지만 초보관리자들을 가끔씩 힘겹게 하는 일이 될  수도 있습니다.

 

 

 

 

 

또한, webalizer accesswatch등의 웹로그 분석프로그램을 사용하여 분석한다면 이 또한 매우 쉬운 일입니다.

 

 

 

  하지만, 필자가 여기서 알려드리고자 하는 방법은 시스템관리자가 간단한 명령어로 유일 IP를 뽑아내는 방법에 대한 것입니다.

 

 

 

 

 

 

, 그럼 먼저 우리가 흔히 볼 수 있는 웹로그파일의 이름이 access_log입니다.

 

 

 

 

그리고 이 파일의 내용을 간단히 보면 다음과 같은 형식을 가지고 있습니다.

 

 

 

 , 각행의 첫번째 항목이 IP주소라는 것을 확인하시기 바랍니다.

 

 

 

 

 

[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/2012:21:41:38 +0900] "GET /images/products/F0100213a.jpg HTTP/1.1" 200 3534
221.150.53.43 - - [25/Sep/2012:21:41:38 +0900] "GET /images/products/F0100214a.jpg HTTP/1.1" 200 3580
221.150.53.43 - - [25/Sep/2012:21:41:38 +0900] "GET /images/products/F0100215a.jpg HTTP/1.1" 200 3601
221.150.53.43 - - [25/Sep/2012:21:41:38 +0900] "GET /images/products/F0100216a.jpg HTTP/1.1" 200 3412
221.150.53.43 - - [25/Sep/2012:21:41:38 +0900] "GET /images/products/F0100217a.jpg HTTP/1.1" 200 3362
221.150.53.43 - - [25/Sep/2012:21:41:39 +0900] "GET /images/products/F0100218a.jpg HTTP/1.1" 200 3507
221.150.53.43 - - [25/Sep/2012:21:41:39 +0900] "GET /images/products/F0100219a.jpg HTTP/1.1" 200 3507
221.150.53.43 - - [25/Sep/2012: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/2012:21:41:41 +0900] "GET /images/products/F0100220a.jpg HTTP/1.1" 200 3202
221.150.53.43 - - [25/Sep/2012: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주소를 카운트할 수 있습니다.

 

 

 

  결론적으로 위의 결과에서 웹페이지를 방문한 유일IP주소가 4249개이므로 유일방문자수가 4249명이라는 것을 알 수가 있습니다.

 

 

 

 

 

위의 명령어를 간단히 복사하신 다음 여러분들의 access_log파일이 존재하는 곳에서 그대로 해보시기 바랍니다.

 

 

 

 

위의 명령어에 대한 설명을 간단히 하면 다음과 같습니다.

 

 

 

 

cat access_log
access_log
파일전체를 출력합니다.

 

 

 

 


awk '{print $1}' > imsi 
로그파일의 맨 첫번째 항목인 IP주소부분만을 imsi파일에 저장합니다.

 

 

 




sort -u imsi > imsi3
imsi파일에 저장된 IP주소들을 유일한 IP로 정렬한 후에 이 데이터를 imsi3에 저장합니다.

 

 

 

  , imsi3파일에는 중복되지 않은 유일IP주소리스트들이 저장됩니다.

 

 

 

 


wc -l imsi3  
imsi3
에 저장된 행(행단위로 IP가 저장되어 있음)을 카운트합니다.

 

 

 




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

 

 

 

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

 

 

 

 

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

 

 

 

 

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


, 위의 결과로 보아 2012년 9월 20자에 웹 페이지를 방문한 유일방문자수는 75명이라는 것을 알 수 있습니다.

 

 

 

 

 


위의 명령어를 간단히 설명하면 다음과 같습니다.

 

 

 

 

grep 20\/Sep\/2012 access_log 
access_log
파일에서 20/Sep/2012이라는 문자열들을 가진 행만을 뽑아냅니다.

 

 

 

 , 특정 날짜에 해당하는 문자가 들어있는 행만을 작업대상으로 뽑아낸 것입니다.

 

 

 

 

awk '{print $1}' > imsi
20/Sep/2012
에 해당하는 행들에서 IP주소부분만을 뽑아서 imsi파일에 저장합니다.

 

 

 

 

sort -u imsi > imsi3
imsi
파일에 저장된 데이터를 대상으로 유일데이터 정렬을 하여 imsi3에 저장합니다 .

wc -l imsi3
imsi3
의 행의 수를 카운트합니다.

 

 

 

 

이렇게 하면 특정날짜의 유일IP주소를 카운트할 수 있습니다.

 

 

 

 

 

여러분들께서도 위와 같은 방법으로 테스트해보시기 바랍니다.

 

 

 

 위에서 20\/Sep\/2012 라고 된 부분은 2012년 9월 20자라는 의미입니다.

 

 

 

 , access_log파일 전체에서 2012년 9월 20자의 유일IP방문자수는 75명이 된다는 의미입니다.

 

 

 

 

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

 

 

 

 아래는 2012년 9월 21 유일IP방문자 수 입니다.

 

 

 

 

 

[root@host1 logs]# grep 21\/Sep\/2012 access_log | awk '{print $1}' > imsi ; sort -u imsi > imsi3 ; wc -l imsi3
     67 imsi3
[root@host1 logs]#

 

다음은 2012년 9월 22 유일IP방문자 수입니다.

 

 

 

 

 

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

 

필자가 예로든 awk명령어들은 모두 실제 예입니다.

 

 

 

 따라서 그대로 따라 해 보셔도 무리 없이 실행이 됨을 알 수 있습니다.

 

 

 

 , 위의 예와 같이 날짜부분에서 월에 해당하는 문자들은 9월이기 때문에 Sep가 된 것이지만, 만약 7월이라면 Jul이 되며, 8월이라면 Aug등으로 해주셔야 합니다.

 

 

 

  이 부분만 정확하게 알고 계신다면 다양한 응용이 가능합니다.

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,039 명
  • 현재 강좌수 :  35,848 개
  • 현재 접속자 :  91 명