카테고리 없음

Logging Utility 컴포넌트를 이용한 IIS로그 분석

봄돌73 2007. 3. 7. 15:41

출처 : http://korea.internet.com/channel/content.asp?kid=18&cid=185&nid=33912


[심의준의 개발노트] Logging Utility 컴포넌트를 이용한 IIS로그 분석.

 저자: 심의준 |  날짜: 2005년 04월 11일
 


Logging Utility 컴포넌트를 이용한 IIS 로그 분석 방법에 대해 알아보자. 널리 알려진 IIS 로그 분석 상용컴포넌트인 Web Trands나 무료로 제공되는 AWStats가 존재하긴 하지만, ASP 3.0으로 넘어오면서 IIS 설치 시 기본으로 제공되는 Logging Utility 컴포넌트를 이용해 보고자 한다. Logging Utility컴포넌트는 IIS에 의해 생성된 로그 파일들을 액세스하는 방법을 제공한다.

IIS 로그를 남기기 위해서는 다음과 같은 절차를 따라야 한다.
1) IIS 로그 사용 설정하기.
아래 로깅 사용에 체크한 후에 활성 로그 형식을 W3C 확장 로그 파일 형식으로 설정한다.



2) 로그 일반 속성 설정하기.
일반 속성 탭에서 로그 파일을 생성할 시간 간격을 설정하고 로그 파일이 저장될 디렉터리를 설정한다. 필자는 로그 파일의 사이징을 위해 하루에 한번씩 로그를 남기게 설정하였다.



3) 확장속성 설정하기.
확장속성을 통해 로그에 남길 항목을 체크하도록 한다.



이것으로 IIS 로그 설정이 완료되었다.

다음으로 컴포넌트의 메소드와 속성에 대해 알아보자. (Professional ASP 3.0 참조)

1) 메소드

  • AtEndOfLog(): ReadLogRecord 메소드를 이용하여 파일 안에 있는 레코드들을 검색할 때 그것들을 모두 읽었다면 True를 리턴시킨다.

  • CloseLogFiles(io_모드): 열려있는 로그파일을 닫는다. Io_모드의 값은 어떤 파일을 닫을 것인가를 결정하며, ForReading은 읽기 작업을 위해 열렸던 파일을 지정하며, ForWriting 은 쓰기 작업, AllOpenFiles는 모든 열려진 파일을 닫게 된다.

  • OpenLogFile(파일이름, io_모드, 서비스_이름, 서비스_인스턴스, 출력_포맥): 파일이름에 명시되어 있는 로그 파일을 연다. Io_모드는 ForReading(디폴트) 과 ForWriting 가 있다. 서비스_이름과 서비스_인서턴스 파라미터들은 파일이 특정 IIS 서비스로 읽혀 지고 있을 때 리턴되는 레코드들의 범위를 제한시킨다. 출력_포맷 파라미터는 파일에 내용을 쓸 때 사용될 포맷을 나타낸다.


  • ReadFilter(시작, 끝): 명시되어 있는 날짜와 시간 안에 속하는 파일로부터 내용을 읽을 때 리턴되는 레코드들을 제한시킨다.

  • ReadLogRecord(): OpenLogFile메소드에 의해 열려 있는 현재 로그파일로부터 그 다음 로그 레코드를 읽는다.

  • WriteLogRecord(로깅_객체): 읽기 작업을 위해 열렸던 파일로부터 온 로그 레코드들을 쓰기 작업을 위해 열려 있는 파일에 쓴다.


  • 2) 속성

  • BytesReceived: 브라우저로부터 요청 받은 바이트.

  • BytesSent: 브라우저에게 응답 보낸 바이트.

  • ClientIP: 클라이언트나 호스트의 IP 어드레스.

  • Cookie: 요청안에 전달된 쿠키의 내용.

  • CustomFields: 요청에 추가된 모든 커스텀 헤더들의 배열.


  • DateTime: 요청된 날짜와 시간.

  • Method: 작업 타입.

  • ProtocolStatus: 클라이언테에 리턴되는 상태 메시지.

  • ProtocolVersion: 프로토롤 버전 문자열.

  • Referer: Referer Page 정보.


  • ServerIP: 웹서버 IP 어드레스.

  • ServerName: 웹서버 컴퓨터이름.

  • ServerPort: 요청을 수신한 포트 번호.

  • ServiceName: 서비스 이름(ex-W3SVC).

  • TimeTaken: 전체 처리 시간.


  • URlQuery: 쿼리 문자열의 모든 파라미터들.

  • URlStem : 타겟 URL.

  • UesrAgent: 사용자 에이전트.

  • UserName: 서버를 액세스한 로그온 이름.

  • Win32Status: 처리후 리턴되는 Win32 상태 코드.


  • IIS 로그 확장속성에서 설정한 값과 위 속성을 이용하여 필요한 데이터를 추출할 수 있다.

    Logging Utility 컴포넌트를 이용하여 IIS 로그를 분석해 보자.

    <%@Language=VBScript%>
    <%Option Explicit%>
    <%'상수의 사용을 위해 METADATA 포함%>
    <!-- METADATA TYPE="typelib" FILE="C:\WINDOWS\system32\inetsrv\logscrpt.dll" -->
    <%
    Response.Expires = -1440
    Dim objLogUtil '변수 선언
    ' Logging Utility 컴포넌트의 인스턴스를 생성
    Set objLogUtil = Server.CreateObject("MSWC.IISLOG")

    'IIS 로그 파일 Open.
    objLogUtil.OpenLogFile "C:\WINDOWS\system32\LogFiles\W3SVC1\ex050407.log", ForReading, "W3SVC", 1, 0

    ' 데이터 출력(접속 IP와 접속시간 뿌리기)
    Do While Not objLogUtil.AtEndOfLog
    objLogUtil.ReadLogRecord
    Response.Write "IP : " & objLogUtil.ClientIP & chr(9) & "접속시간 : " & objLogUtil.DateTime & "<br>"
    Loop

    '로그파일을 닫는다.
    objLogUtil.CloseLogFiles(ForReading)

    '인스턴스 해제
    Set objLogUtil = Nothing
    %>

    IIS 로그 파일과 Logging Utility 컴포넌트를 이용하여 서비스 중인 웹사이트에 접속한 클라이언트들의 Ip Address와 접속 시간을 추출하였다.
    운영중인 웹사이트를 모니터링 관리하기 위한 유용한 자료를 추출하는데 Logging Utility 컴포넌트를 이용할 수 있을 것이다.