• 로그 파서 설치 및 구성
  1. 로그 파서는 IIS 로그 파일에 저장된 정보를 이용하여 원하는 수치를 뽑을 수 있습니다.
  2. 서버에서 Log Parser를 수행하면, 서버 부하를 줄 수 있기 때문에 클라이언트 PC에 Log Parser 2.2를 다운로드(http://go.microsoft.com/fwlink/?LinkId=139171)받아 설치합니다.
  3. 명령 프롬프트에서 쉽게 로그 파서를 사용하려면 시스템 환경 변수 path에 C:\Program Files\Log Parser 2.2 를 추가합니다.
  4. Log Parser 2.2 API도 제공됩니다.

    (기본 설치 시 C:\Program Files\Log Parser 2.2폴더 아래 LogParser.chm 파일이 있을 것입니다.)

 

  • 운영 현황 분석을 위한 기본 설정
  1. Log Parser를 이용한 운영 현황 분석을 위해서는 웹 프런트 앤드 각 웹 서버의 인터넷 정보 서비스 관리에서 IIS 로깅 사용 기능이 활성화하며, W3C 확장 로그 파일 형식 선택합니다.

  2. 운영 현황을 조사하기 위해서는 최소한 아래와 같은 필드가 선택되어 있어야 합니다. (속성을 클릭 후, 고급 탭을 보시면 됩니다.)

     

필드명

컬럼명

날짜 (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 로그 파일 수집
  1. 웹 프런트 앤드 각 웹 서버의 IIS 로그 파일을 수집하여 클라이언트 PC의 특정 폴더에 저장 합니다. (웹사이트가 여러 개 일 경우, 해당 사이트 IIS 로그만 추출하면 됨)
  2. IIS 로그 파일은 해당 웹 사이트의 로깅 속성을 보시면 로그 파일 디렉터리가 표시되어 있습니다. (아래 그림으로는 C:\WINDOWS\system32\LogFiles\W3CVC797352875 폴더입니다.)

  3. 여러 대의 웹 서버 IIS 로그를 수집할 경우, 파일이 중복되므로 로그 파일명 앞에 해당 서버명을 붙여 수집하는 것이 좋습니다.

 

  • Log Parser명령을 이용한 운영 현황 분석
  1. 명령 프롬프트를 실행하여 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 파일에 쿼리 조건 현황이 저장되어 있습니다.
  1. 명령 프롬프트 창에서 IIS 로그 파일을 저장한 폴더로 이동합니다.
  2. Log Parser Query 명령어를 입력하여 해당 조건에 대한 운영 현황을 알 수 있습니다..
  3. 몇 가지 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

 

 

+ Recent posts