MS Log Parser를 이용하여 SunOne iPlanet 로그 파싱하기
Log Parser 2.2(클릭하면 다운로드 페이지로 이동)에선 iPlanet이 분석 지원이 안된다는 불편한 진실에 맞서 TEXTLINE 방식으로 로그 내용을 문자열로 읽어들어와 내부 함수를 이용하여 쪼개어 내키는 대로 파싱하였음!
분석에 사용한 로그파일 형식은 아래와 같음
[웹서버 로그파일 헤더]
format=%Ses->client.ip% - %Req->vars.auth-user% [%SYSDATE%] "%Req->reqpb.clf-request%" %Req->reqpb.protocol% %Req->srvhdrs.clf-status% %Req->srvhdrs.content-length% %duration% %Req->headers.host% "%Req->headers.referer%" - %Req->headers.x-forwarded-for%
[웹서버 실제 로그]
111.111.111.111 - - [03/Jun/20xx:23:59:59 +0900] "GET /abc.css HTTP/1.1" HTTP/1.1 304 0 650 www.domain.com "http://www.domain.com/a.do" - 111.111.111.111
애플리케이션 오류를 분석하기 위해 위 로그 파일에서 상태값이 500, 503인 값만 추려내어
요청별로 오류 횟수를 카운팅하게됨!
[로그 문자열 분석의 핵심]
로그 문자열 분석의 핵심은 EXTRACT_TOKEN <-- 요 함수!
ex) EXTRACT_TOKEN (Text, 1, '\"') 라고 실행하게 되면
Text컬럼에서 큰따옴표(")로 문자열을 나누고 그중 두번째(0 based index) 값을 가져온다는 뜻!
[실제 분석에 사용한 명령문]
logparser
// 접근한 URL
"select EXTRACT_TOKEN (Text, 1, '\"') as url,
// 접근 횟수
count(url) as cnt,
// HTTP STATUS CODE
max(EXTRACT_TOKEN(Text, 10,' ')) as code,
// 시작시간
min(EXTRACT_TOKEN(Text, 3,' ')) as stime,
// 종료시간
max(EXTRACT_TOKEN(Text, 3,' ')) as etime
// 읽어들일 로그파일
from C:\Users\A\Desktop\logfile
// 결과 출력할 csv 파일
to C:\Users\A\Desktop\result.csv
// STATUS CODE가 500 혹은 503인 값들
where EXTRACT_TOKEN(Text, 10,' ')='500'
or EXTRACT_TOKEN(Text, 10,' ')='503'
// URL로 묶음
group by url
// 접근횟수로 내림차순 정렬
order by cnt desc"
// 입력형식은 TEXTLINE
-i:TEXTLINE
fin.