Translate

[Linux/Unix] WAS의 일일 페이지별 요청 카운트 집계하기 (통계)



Web Application 에 애널리틱스(구글, 네이버)를 연동하게되면
페이지별 카운트 뿐만 아니라 신규방문/재방문 빈도라던지 자세한 정보를 얻을 수 있다.



하지만 아래와 같은 문제가 있을 수 있다.


1. 애널리틱스 연동 이전의 기간은 정보를 얻을 수 없다.
2. 일반 홈페이지가 아니라서 정책상 애널리틱스를 연동할 수 없을 수 있다.







애널리틱스 연동을 하지 않더라도 WAS 의 AccessLog 를 이용해 일별 페이지별 요청 카운트를 집계할 수 있다.


WAS 종류가 여러가지 있지만 아래의 설명은 Tomcat 의 AccessLog 를 기준으로 설명을 하겠다.

{TOMCAT_HOME}/conf/server.xml 파일에 아래와 같이 셋팅되어 있는경우

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
prefix="localhost_access_log." suffix=".txt" pattern="combined" resolveHosts="false"/>


아래와 같이 로그가 나오게 된다.

???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/blaInfo HTTP/1.1" 200 2018 "-" "-"
???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/blaLists HTTP/1.1" 200 95 "-" "-"
???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/getbla HTTP/1.1" 200 1940 "-" "-"
???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/getbla HTTP/1.1" 200 1786 "-" "-"
???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/blaLists HTTP/1.1" 200 154 "-" "-"
???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/getbla HTTP/1.1" 200 1870 "-" "-"
???.???.???.??? - - [03/Mar/2015:00:00:00 +0900] "POST /blabla/rest/blaPriceList HTTP/1.1" 200 154 "-" "-"
???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/blaLists HTTP/1.1" 200 154 "-" "-"
???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/blaLists HTTP/1.1" 200 154 "-" "-"






위 AccessLog를 보면 클라이언트(아이피:???.???.???.???) 에서 아래와 같은 URL을 호출 했음을 알 수 있다.


/blabla/rest/blaInfo
/blabla/rest/blaLists
/blabla/rest/getbla
/blabla/rest/getbla
/blabla/rest/blaLists
/blabla/rest/getbla
/blabla/rest/blaPrice
/blabla/rest/blaLists
/blabla/rest/blaLists








이제부터 알아보려 하는 것은 각각의 페이지들이 몇번씩 호출이 되었는지 알아보려 한다.



1004lucifer:Downloads 1004lucifer$ cat bla_access.log 
???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/blaInfo HTTP/1.1" 200 2018 "-" "-"
???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/blaLists HTTP/1.1" 200 95 "-" "-"
???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/getbla HTTP/1.1" 200 1940 "-" "-"
???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/getbla HTTP/1.1" 200 1786 "-" "-"
???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/blaLists HTTP/1.1" 200 154 "-" "-"
???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/getbla HTTP/1.1" 200 1870 "-" "-"
???.???.???.??? - - [03/Mar/2015:00:00:00 +0900] "POST /blabla/rest/blaPriceList HTTP/1.1" 200 154 "-" "-"
???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/blaLists HTTP/1.1" 200 154 "-" "-"
???.???.???.??? - - [02/Mar/2015:23:59:59 +0900] "POST /blabla/rest/blaLists HTTP/1.1" 200 154 "-" "-"1004lucifer:Downloads 1004lucifer$ 
1004lucifer:Downloads 1004lucifer$ 

// 로그의 패턴을 봤을때 URL 리소스가 7번째에 위치해 있는 것을 알 수 있다.
1004lucifer:Downloads 1004lucifer$ awk '{print $7}' bla_access.log > bla_access.log_modify
1004lucifer:Downloads 1004lucifer$ 
1004lucifer:Downloads 1004lucifer$ cat bla_access.log_modify 
/blabla/rest/blaInfo
/blabla/rest/blaLists
/blabla/rest/getbla
/blabla/rest/getbla
/blabla/rest/blaLists
/blabla/rest/getbla
/blabla/rest/blaPriceList
/blabla/rest/blaLists
/blabla/rest/blaLists
1004lucifer:Downloads 1004lucifer$ 

// uniq 명령어 사용시 중복문자열이 반복되어야만 정확하게 데이터를 뽑아낼 수 있다.
1004lucifer:Downloads 1004lucifer$ sort bla_access.log_modify > bla_access.log_sort
1004lucifer:Downloads 1004lucifer$ 
1004lucifer:Downloads 1004lucifer$ cat bla_access.log_sort 
/blabla/rest/blaInfo
/blabla/rest/blaLists
/blabla/rest/blaLists
/blabla/rest/blaLists
/blabla/rest/blaLists
/blabla/rest/blaPriceList
/blabla/rest/getbla
/blabla/rest/getbla
/blabla/rest/getbla
1004lucifer:Downloads 1004lucifer$ 

// uniq 명령어 사용시 -c 옵션을 사용해야 중복 카운트가 
1004lucifer:Downloads 1004lucifer$ uniq -c bla_access.log_sort > bla_access.log_uniq
1004lucifer:Downloads 1004lucifer$ 
1004lucifer:Downloads 1004lucifer$ cat bla_access.log_uniq 
   1 /blabla/rest/blaInfo
   4 /blabla/rest/blaLists
   1 /blabla/rest/blaPriceList
   3 /blabla/rest/getbla
1004lucifer:Downloads 1004lucifer$



PS.
AccessLog 가 보통 일별로 파일이 나뉘어지니 위와같이 작업 시 하루에 가장 많이 요청하는 URL을 알아낼 수 있다.
가장 많이 요청하는 페이지의 응답 속도를 개선하면 사용자의 체감속도가 더욱 빨라지지 않을까 싶다.
많이 요청하는 순대로 튜닝해야 하는 페이지의 기준을 정하는데 도움이 된다.


댓글