-
로그 파서 설치 및 구성
-
로그 파서는 IIS 로그 파일에 저장된 정보를 이용하여 원하는 수치를 뽑을 수 있습니다.
-
서버에서 Log Parser를 수행하면, 서버 부하를 줄 수 있기 때문에 클라이언트 PC에 Log Parser 2.2를 다운로드(http://go.microsoft.com/fwlink/?LinkId=139171)받아 설치합니다.
-
명령 프롬프트에서 쉽게 로그 파서를 사용하려면 시스템 환경 변수 path에 C:\Program Files\Log Parser 2.2 를 추가합니다.
-
Log Parser 2.2 API도 제공됩니다.
(기본 설치 시 C:\Program Files\Log Parser 2.2폴더 아래 LogParser.chm 파일이 있을 것입니다.)
-
운영 현황 분석을 위한 기본 설정
-
Log Parser를 이용한 운영 현황 분석을 위해서는 웹 프런트 앤드 각 웹 서버의 인터넷 정보 서비스 관리에서 IIS 로깅 사용 기능이 활성화하며, W3C 확장 로그 파일 형식 선택합니다.
-
운영 현황을 조사하기 위해서는 최소한 아래와 같은 필드가 선택되어 있어야 합니다. (속성을 클릭 후, 고급 탭을 보시면 됩니다.)
필드명 |
컬럼명 |
날짜 (Date) |
date |
시간 (Time) |
time |
클라이언트 IP 주소 |
c-ip |
사용자 이름 |
cs-username |
메소드 |
cs-method |
URI 스템 |
cs-uri-stem |
프로토콜 상태 |
sc-status |
프로토콜 하위 상태 |
sc-substatus |
보낸 바이트 수 |
sc-bytes |
받은 바이트 수 |
cs-bytes |
걸린 시간 |
time-taken |
사용자 에이전트 |
cs-user agent |
-
IIS 로그 파일 수집
-
웹 프런트 앤드 각 웹 서버의 IIS 로그 파일을 수집하여 클라이언트 PC의 특정 폴더에 저장 합니다. (웹사이트가 여러 개 일 경우, 해당 사이트 IIS 로그만 추출하면 됨)
-
IIS 로그 파일은 해당 웹 사이트의 로깅 속성을 보시면 로그 파일 디렉터리가 표시되어 있습니다. (아래 그림으로는 C:\WINDOWS\system32\LogFiles\W3CVC797352875 폴더입니다.)
-
여러 대의 웹 서버 IIS 로그를 수집할 경우, 파일이 중복되므로 로그 파일명 앞에 해당 서버명을 붙여 수집하는 것이 좋습니다.
-
Log Parser명령을 이용한 운영 현황 분석
-
명령 프롬프트를 실행하여 Log Parser명령어 입력하면 아래와 같은 설명이 나타납니다.
-
명령어 사용법 : (자세한 건 API 및 Log Parser Helper 참고)
LogParser [-i:<input_format>][-o:<output_format>]<SQL query> | file:<query_filename>[?param1=value1+…][<input_format_options>][<output_format_options>][-q[:ON|OFF]][-e:<max_errors>][-iw[:ON|OFF]][-stats[:ON|OFF]][-saveDefaults][-queryInfo]
-
-i : 로그 파일 포맷 타입으로 IIS log Files, Window Event Log, XML, CSV, TSV, W3C Text File 등을 지원합니다.
-
-o : 쿼리 현황 디스플레이 포맷 타입으로 CMD 창에서 확인할 수 있으며, Text File, SQL 데이터 베이스, 차트형 이미지 등으로 출력도 가능합니다.
-
-q : 디폴트로는 OFF 이며, Query 실행 마지막 부분까지 한번에 보여지며, 통계 자료도 표시되지 않습니다.
-
CMD창에 직접 입력이 아닌, txt 파일에 query 입력한 후 해당 파일을 읽어와 현황 쿼리도 가능합니다. (SQL Query문이 길 경우 추천)
-
명령어 마지막에 ">user.txt"와 같이 > 입력 후, 파일명을 입력하면 로그저장 폴더 안에 user.txt 파일에 쿼리 조건 현황이 저장되어 있습니다.
-
명령 프롬프트 창에서 IIS 로그 파일을 저장한 폴더로 이동합니다.
-
Log Parser Query 명령어를 입력하여 해당 조건에 대한 운영 현황을 알 수 있습니다..
-
몇 가지 Log Parser Query 실행 및 운영 현황 결과 (IISW3C 로그 파일)
-
Counting Users (시스템의 유니크 사용자)
-
쿼리 대상 기간의 로그 파일에서 유니크한 방문자를 구합니다.
Logparser –i:IISW3C –o:CSV "select DISTINCT TO_UPPERCASE(cs-username) AS USERNAME from *.log group by cs-username" –q >users.csv (엑셀 파일에 저장)
-
주의 사항으로 대소문자 구분하지 않습니다. 정확한 현황을 위해 위 쿼리문과 같이 Log Parser 함수(TO_UPPERCASE, 기타 함수는 API 참고)를 이용하여,
-
-
Load balancing
-
1차 가공을 위한 데이터로 사용자 별 서버 로드 밸런스를 분석합니다.
-
요일, 서버 별 사용자 접속 카운터 수를 구합니다.
-
사용자 별 로그 카운터 수를 구합니다.
-
-
User type distribution
-
쿼리 대상 기간의 로그 파일에서 시스템을 가장 많이 쓰는 Top 3 사용자를 구합니다.
-
HTTP 상태가 401인 상태가 포함되어 있으므로, 필터하여 분석합니다.
-
-
Request (RPS) distribution over time (시간에 따른 RPS 분포)
-
RPS(Request Per Second)는 초당 서버에 전달되는 사용자 요청수의 합으로써 사이징 시에 기본 고려 값이 되며, RPS를 시간대에 맞추어 뿌려보면 시간대 별로 서버 부하가 어떻게 달라지는지 알 수 있습니다.
-
RPS 분석 쿼리는 복잡하기 때문에 텍스트 파일(load.txt)로 작성하여 Log Parser 파라미터에 전달합니다.
-
select EXTRACT_FILENAME(LogFilename),LogRow, date, time, cs-method, cs-uri-stem, cs-username, c-ip, cs(User-Agent), cs-host, sc-status, sc-substatus, sc-bytes, cs-bytes, time-taken, add( add( mul(3600,to_int(to_string(to_localtime(to_timestamp(date,time)),'hh'))), mul(60,to_int(to_string(to_localtime(to_timestamp(date,time)),'mm'))) ), to_int(to_string(to_localtime(to_timestamp(date,time)),'ss')) ) as secs,
to_int(to_string(to_localtime(to_timestamp(date,time)),'yy')) as yy, to_int(to_string(to_localtime(to_timestamp(date,time)),'MM')) as mo, to_int(to_string(to_localtime(to_timestamp(date,time)),'dd')) as dd,
to_int(to_string(to_localtime(to_timestamp(date,time)),'hh')) as hh, to_int(to_string(to_localtime(to_timestamp(date,time)),'mm')) as mi, to_int(to_string(to_localtime(to_timestamp(date,time)),'ss')) as ss,
to_lowercase(EXTRACT_PATH(cs-uri-stem)) as fpath, to_lowercase(EXTRACT_FILENAME(cs-uri-stem)) as fname, to_lowercase(EXTRACT_EXTENSION(cs-uri-stem)) as fext from *.log where sc-status<>401 |
1차 가공한 데이터 파일인 bigo.csv 파일을 만듭니다.
-
bigo.csv 파일로부터 분당 분포 값과 초당 분포 값을 뽑습니다.
초 단위
분 단위
-
위 쿼리 실행 파일에서 시간 별 평균과 분/초당 최대값을 뽑습니다.
시간 별 평균
분당 최대값
초당 최대값
-
사용자의 요청으로 시작한 RPS 값만 구하고자 할 때 .gif, .png, .bmp, .js, .css and .axd 파일과 같은 정적인 경우를 Where절을 이용하여 Filter 하면 됩니다.
예시로, where sc-status<>401 and fext<>'gif' and fext<>'png' and fext<>'bmp' and fext<>'js' and fext<>'css' and fext<>'axd' 와 같이 필터 해주면 됩니다.
-
Distinct users over time (시간대별 유니크 사용자 수)
-
1차 가공한 데이터를 userdist.csv 파일로 만듭니다.
-
시간대에 따른 사용자 정보
-
시 단위별 유니크 사용자 수
-
분 단위별에 따른 유니크 사용자 수
-
-
User agent distinction (사용자 클라이언트 활용 비율 분석)
-
사용자 클라이언트 활용도가 높은 Agent가 무엇인지 분석
-
위 데이터는 Browser Requests 에 외부 파라미터 정보까지 포함되어 있어, EXTRACT_TOKEN 함수를 이용하여 브라우저 정보만 분석합니다.
-
-
Browser usage (브라우저 사용 패턴 분석)
-
1차 가공한 데이터를 ie.csv 파일로 만듭니다.
(Mozilla 이며, HTTP 상태가 401이 아닌 정보만 가져옵니다.)
-
파일 형태에 따른 분석(어떤 파일이 많이 접속 되었는지 분서 가능)
-
aspx 파일 중에 어떤 파일에 접속이 많았는지 분석
-
어떤 ASMX 웹 서비스 호출이 많았는지 분석
-
-
Office client Web Service usage (자주 쓰이는 웹 서비스 분석)
-
-
Slow pages (사용자 반응 시간대 분석)
-
Default.aspx 페이지에 대한 반응 시간을 5분 간격으로 분석
-
Default.aspx 페이지에 대한 접속 카운트 수를 5분 간격으로 분석
-
Default.aspx 페이지에 대한 반응 시간이 느린 시간대를 5분 간격으로 분석
(걸린 시간 4초 이상)
-
-
-
Importing logs into SQL Server
-
Log 정보를 SQL Server 특정 Table에 저장합니다.
-
해당 쿼리 조건의 Log 정보만 SQL에 저장합니다.
-
쿼리 조건을 저장한 파일을 로드하여 수행 가능합니다.
-
[sql.txt(쿼리 저장 파일)] select EXTRACT_FILENAME(LogFilename),LogRow, date, time, cs-method, cs-uri-stem, cs-username, c-ip, cs(User-Agent), cs-host, sc-status, sc-substatus, sc-bytes, cs-bytes, time-taken, add( add( mul(3600,to_int(to_string(to_localtime(to_timestamp(date,time)),'hh'))), mul(60,to_int(to_string(to_localtime(to_timestamp(date,time)),'mm'))) ), to_int(to_string(to_localtime(to_timestamp(date,time)),'ss')) ) as secs,
to_int(to_string(to_localtime(to_timestamp(date,time)),'yy')) as yy, to_int(to_string(to_localtime(to_timestamp(date,time)),'MM')) as mo, to_int(to_string(to_localtime(to_timestamp(date,time)),'dd')) as dd,
to_int(to_string(to_localtime(to_timestamp(date,time)),'hh')) as hh, to_int(to_string(to_localtime(to_timestamp(date,time)),'mm')) as mi, to_int(to_string(to_localtime(to_timestamp(date,time)),'ss')) as ss,
to_lowercase(EXTRACT_PATH(cs-uri-stem)) as fpath, to_lowercase(EXTRACT_FILENAME(cs-uri-stem)) as fname, to_lowercase(EXTRACT_EXTENSION(cs-uri-stem)) as fext
into ShpLogTable from *.log
where sc-status<>401 |
-
참고 사이트
-
MS Sharepoint Blog : http://blogs.technet.com/sharepoint_kr/archive/2009/07/14/logparser-sharepoint.aspx
'Solution Platform' 카테고리의 다른 글
SharePoint Crawling - Invalid UTF-8 Encoded Characters Error (0) | 2009.10.08 |
---|---|
FullTextSqlQuery를 이용한 검색 샘플 소스 및 주의 사항 (0) | 2009.09.21 |
Syncronization of Office Document Properties with WSS Document Libraries (0) | 2009.09.21 |
Unable to get incoming e-mail working. (0) | 2009.08.20 |
MOSS - Workflow Using InfoPath Form (1) | 2009.08.19 |