LogParser와 놀기_1

Posted at 2006/07/25 17:48// Posted in dev
약 1년 전에 포스팅했던 LogParser 2.2를 가지고 요즘 놀고 있는 중이다. 1년이 다 되어가는데도 아직까지 버전업이 안된 소프트웨어지만 정말 유용한 툴인 듯 싶다. 어쨌든 체계적으로 자동화를 시도해보고, 의미있는 데이터를 뽑아보고 싶어서 몇 차례에 걸쳐서 포스팅을 해볼 생각이다. LogParser를 처음 접해서 요구사항에 맞게 이것 저것 만들어본다는 느낌으로 쓸 예정이니, 혹시라도 있을 독자분들은 쉽게쉽게 읽어내려가면 될 듯 싶습니다. [기존에 시작한다던 시리즈나 마무리 하시지 ;ㅁ;]

현재 내가 다루고 있는 시스템은 일반적인 형태의 시스템이다. IIS 5.0이 설치되어있는 웹 서버 6대와 그것을 L4 스위치로 묶고, DB는 독립적인 형태로 존재하는 간단한 웹 팜 모델이다. 하루에 쌓이는 로그의 양은 10GB 미만이다. 하지만, 이정도도 꽤나 큰 로그의 양이다. 아무튼 처음 이 시스템을 다루기 시작했을 때는 IIS로그를 남기지도 않았다. 그리고 기본적으로 데이터들을 소위 점태그주1라고 하는 방식으로 집계를 했다. 점태그 작업이 귀찮은 나머지 IIS로그를 이용해서 Unique Visit/Page View 같은 데이터들을 LogParser를 이용해서 뽑아버려고 마음을 먹고, 간략한 배치 파일을 만들어보았다.

일단 스스로 생각한 시스템의 모양은 다음과 같다.
  • 서비스 하지 않는 하나의 서버를 관리서버로 두고, 그곳에 로그를 복사한다.
  • LogParser를 이용해서 UV와 PV를 집계한다.
  • UV의 기준은 하루에 방문한 클라이언트의 중복 없는 합계이다. 클라이언트는 IP로 구분한다.
  • PV의 기준은 동적 페이지 및 정적 페이지를 요청한 것으로 집계한다. 여기서는 ASP.NET으로 웹 어플리케이션이 구성되어있기 때문에 확장자가 aspx, htm, html인 것에 대하서만 페이지로 정의한다. - Ajax.NET을 사용하기 때문에 경우에 따라서는 ashx, asmx 역시 페이지로 들어가야할 수 있지만 사용자가 명시적으로 '페이지'라고 생각하지 않는 부분에 대해서는 포함시키지 않기로 한다.

그렇게 해서 작성된 간단한 배치 파일을 보자.

@echo off
echo parse log %1

echo Make Directory
mkdir %1
cd %1

echo copy xxx...
copy \\xxx.xxx.xxx.xxx\log$\ex%1.log ex%1_xxx.log

echo copy yyy...
copy \\yyy.yyy.yyy.yyy\log$\ex%1.log ex%1_yyy.log

echo uv
"c:\program files\log parser 2.2\logparser.exe" "SELECT COUNT(DISTINCT c-ip) FROM ex*.log WHERE EXTRACT_EXTENSION(TO_LOWERCASE(cs-uri-stem)) IN ('aspx';'html';'htm') "

echo pv
"c:\program files\log parser 2.2\logparser.exe" "SELECT COUNT(*) FROM ex*.log WHERE EXTRACT_EXTENSION(TO_LOWERCASE(cs-uri-stem)) IN ('aspx';'html';'htm') "

logparse.cmd



%1은 1번째 인자로 받는 값이다. IIS의 로그는 ex060725.log 같은식으로 나오기 때문에 %1에 파싱하고자 하는 날짜를 6자리로 넣어주면 된다.

그 밑에는 각각 웹서버에서 현재 관리서버로 로그 파일을 복사해오는 부분이다.

마지막으로 LogParser를 이용한 UV와 PV집계 부분이다. UV는 중복없는 클라이언트 IP DISTINCT c-ip를 카운트하고, PV는 전체 수를 카운트 한다. 조건절에는 역시 확장자가 aspx, html, htm인 경우에 대해서만 가져오게 되어있다. cs-uri-stem은 요청 URI가 http://zeru.pe.kr/blog/124 면 /blog/124 를 가져온다. EXTRACT_EXTENSION은 URI에서 확장자를 추출하는 함수이고, TO_LOWERCASE는 당연하게 소문자로 만들어주는 함수이다.

로그를 파싱하는 방식이 SQL의 사투리쯤 되니, SQL을 다뤄본 사람이라면 편하게 사용할 수 있다.

이렇게 해서 하루에 한 번씩 실행해줬더니 불편하긴해도 집계가 잘 된다. =D
하지만, 인간의 욕심은 끝이 없는 법; 자동화의 필요성을 느끼게 된다. 매번 배치파일을 실행시키는게 여간 귀찮은게 아니다.

다음 포스팅에서는 자동화에 대해서 고려해보고, 그 다음 포스팅에 대해서는 추가적으로 집계할 의미있는 데이터에 대해서 생각해보자. 잇힝

주1 점태그 : 페이지에 <script src="http://외부업체주소/페이지식별자"></script> 같은 형식으로 삽입되어서 브라우저에서 페이지를 접근할 때마다 요청받도록 하는 방식. img 태그를 사용해서도 적용할 수 있으며, 단체 메일 발송의 오픈률 체크할 때도 사용한다.
크리에이티브 커먼즈 라이센스
Creative Commons License
2006/07/25 17:48 2006/07/25 17:48
Tag ,

이 글에는 트랙백을 보낼 수 없습니다

댓글을 남겨주세요

Name *

Password *

Link (Your Homepage or Blog)

Comment

Secret