이러쿵저러쿵


윈도우 서버를 웹 서버로 사용할 때에는 보통 IIS(Internet Information Service, 인터넷 정보 서비스) 를 사용합니다.

 

IIS를 통해서 HTTP 웹 서버 및 FTP, SMTP 등 다양한 서비스를 구축하고, 서비스할 수 있습니다.

보통 IIS로 HTTP(웹 사이트) 나 FTP(FTP 사이트)를 운용하게 되면 해당 프로토콜을 통해 데이터를 전송과 관련된 트래픽 로그가 파일에 기록됩니다.

 

이번 포스팅은 윈도우 서버 2008 을 기준으로 설명합니다.

 

일단 사이트 로그를 사용하려면 특정 사이트 마다 로그 기능을 사용하겠다는 체크를 해야 합니다.

(그런데 윈도우 서버 2008 의 IIS 7.0 은 기본으로 로그 사용이 기본 설정으로 되어 있습니다.)

 

그러면 이제 웹/FTP의 사이트가 로그를 쌓고 있는지, 쌓고 있다면 어디에 쌓고 있는지 확인해 보겠습니다.

IIS 관리자를 실행시켜, 특정 사이트를 선택합니다.

해당 사이트의 홈이 나오면 IIS 메뉴 아이콘 중에 [로깅] 아이콘을 마우스 더블 클릭합니다.

 

 

다음과 같은 로깅 페이지가 나타납니다.

 

로깅 페이지 내용을 보니 매일 로그를 %SystemDrive%\inetpub\logs\LogFiles 폴더에 쌓고 있는 것 같습니다. 별도로 지정하지 않으면 IIS는 사이트의 로그 파일을 위의 폴더에 저장합니다.

 

여기서 %SystemDrive% 는 OS(Operating System, 운영체제)가 설치되어 있는 드라이브를 말합니다. 이는 윈도우 OS에서 사용하는 일종의 예약된 변수명입니다.

 

설명에 사용한 서버는 C드라이브에 OS가 설치되어 있으니 C:\inetpub\logs\LogFiles에 로그 파일들이 기록되고 있을 것입니다. 한 번 가볼까요?

 

폴더가 많습니다. 로그 파일은 각 사이트마다 별도의 파일로 쌓입니다. 아래는 로그 폴더가 많은데, 그만큼 여러개의 사이트를 운영하고 있다는 것으로 보시면 되겠습니다. 

 

 

 

그런데 폴더명만 봐서는 무슨 의미인지, 또 어떤 사이트의 로그 파일인지 분간이 되지를 않습니다.

일단 파일명 앞에 붙은 영문은 사이트를 구분합니다.

 

W3SVCXX : 웹 사이트의 로그 파일.

FTPSVCXX : FTP 사이트의 로그 파일.

 

위의 스크린샷 이미지들을 보시면 W3SCV로 시작하는 폴더는 웹 사이트들의 로그 폴더 이며, FTPSVC로 시작하는 폴더는 FTP 사이트들의 로그 폴더 입니다.

 

그러면 뒤에 붙은 숫자는 무엇을 의미하는 걸까요?

저 숫자들이 실제 운영중인 사이트를 구분하는 고유ID값입니다. 개별 사이트의 고유ID값은 IIS에서 확인하실 수 있습니다.

 

 

IIS에서 좌측 상단의 사이트 트리메뉴를 선택하시면 우측에 IIS에서 관리/운영하고 있는 모든 웹사이트와 FTP사이트가 표시됩니다. 리스트에서 ID항목에 해당하는 것이 사이트 고유ID입니다. 로그 폴더는 해당 아이디를 폴더 네이밍에 사용하고 있습니다.

 

그럼 10번 ID를 가진 사이트의 로그 폴더에 들어가 보겠습니다.

 

특정 폴더로 들어가보면 W3SVC10 이란 폴더에 들어오니, 로그 파일이 상당히 많습니다. 매일매일 2011년 8월부터 로그가 쌓였습니다. 다행히도 해당 사이트는 인기가 없는지, 아니면 다른 내부 용도의 사이트인지 로그 파일 용량이 상당히 작습니다.

 

 

만약 접속자가 많은 사이트라던지, 리소스가 많은 사이트라 한 번 접속 시, 데이터 통신이 많이 발생하는 경우, 지속적으로 로그 파일에 많은 로그가 쌓이게 됩니다.  로그 파일 용량 제한을 두지 않는다면 하루에 파일 하나가 수백MB~수천BM 그 이상으로 뛰기도 합니다.

 

만약 서버 관리자가 별도로 관리(지속적인 삭제, 분산 관리, 대용량 스토리지 구축)를 해주지 않으면 한정되어 있는 서버의 하드디스크 용량은 금세 로그 파일로 가득차게 될 것입니다.

 

여러 대안 중에 가장 간단한 것은 아주 오래된 파일들을 지워주는 작업입니다.

그런데 특정 폴더에 가서 일일이 하나하나 오래된 파일들을 직접 지워주는 것은 고역일 것입니다.

 

이런 경우, 특정 폴더의 파일들을 주기적으로 삭제해주는  (윈도우에서 지원하는) VB스크립트를 작성하여 윈도우 스케줄러에 등록해 놓으면 관리도 편할 것이고, 특수한 경우가 아니라면 서버 하드디스크 용량이 로그 파일로 가득차게 되는 일은 발생하지 않을 것입니다.

 

그러면 이번 포스팅에서 다루려고 했던 웹 사이트의 로그 파일을 삭제하는 스크립트를 작성해 보겠습니다. C 드라이브 또는 원하는 폴더에 스크립트 파일을 하나 생성합니다. 새로 만들기 - 텍스트 문서를 통해 파일을 만든 후, 확장자만 vbs로 변경하면 됩니다. (확장자를 vbs로 해야만 차 후, 윈도우 스케줄러에 등록하실 수 있습니다.)

 

저는 D드라이브에 Script라는 폴더를 만들어 IIS_Log_Clear.vbs 라는 파일을 생성하였습니다.

 

 

 

이제 방금 생성한 vbs 파일을 메모장으로 열어 다음의 코드를 작성합니다.

 

VB스크립트는 Visual Basic 문법을 사용하며 Visual Basic이나 ASP (닷넷이전의)를 사용했던 개발자라면 쉽게 작성할 수 있습니다. 개발자가 아니더라도 VB스크립트는 크게 어렵지 않으니, 쉽게 배워 사용하실 수 있지만, 정 모르더라도(굳이 배우고 싶지 않다하더라도) 아래 코드 그대로 가져다 사용하시면 되니 문제 없습니다. ㅎㅎㅎ

 

' IIS_Log_Clear.vbs

 

'90일이 지난 로그 파일을 삭제하는 VB스크립트

Option Explicit

 

' 삭제할 사이트 로그 파일들이 있는 폴더명을 저장할 변수

Dim strRootPath

' 폴더명 저장 변수에 실제 폴더명 문자열을 저장. WScript.arguments.item(0)은 VB스크립트 실행 시, 첫번째 인자(Parameter)를 가져옵니다. 저는 사이트ID를 받아오기 위해
strRootPath = "C:\inetpub\logs\LogFiles\W3SVC" & WScript.arguments.item(0) & "\"

 

' WScript.echo strRootPath - 폴더명을 Alert창으로 띄움. 개발용으로 사용하고, 주석처리

Const nDays = 90    ' 90이란 값을 nDays 에 저장 (상수)

 

Dim wFSO
Set wFSO = CreateObject("scripting.FileSystemObject") ' 웹서버의 파일 시스템에 액세스할 수 있는 객체 변수 생성

 

Dim wFolder
Set wFolder = wFSO.GetFolder(strRootPath) ' strRootPath에 해당하는 폴더 정보를 가지는 객체 생성

 

Dim wFile

'wFolder 폴더 내에 있는 파일 삭제 루틴 (루프)
For Each wFile In wFolder.Files ' wFolder 내에 있는 파일들을 루프를 통해 순차적으로 접근
    If Int( Now() - wFile.DateLastModified ) >= nDays Then ' (오늘날짜 - 해당 파일의 최근 수정 일자)가 90일보다 크면
        wFile.Delete ' 파일 삭제
    End If
Next

 

코드 자체가 길지 않고, 주석을 상세히 달아 놓아서 이해하는데는 어렵지 않을 것입니다.

이제 위의 스크립트를 실행해 보겠습니다.

 

윈도우 서버의 콘솔 창을 띄웁니다. (시작 - 실행 - cmd.exe 입력)

콘솔창에서 스크립트 파일을 저장한 폴더로 이동하여 스크립트를 실행합니다.

 

 

// 10번 사이트ID를 가진 사이트의 로그 파일을 최근 90일 것만 남기고 모두 삭제

D:\Script>cscript IIS_Log_Clear.vbs 10 

 

IIS_Log_Clear.vbs 스크립트는 파라메터를 하나 받아서 사용하도록 구현했습니다.

10이라는 파라메터를 전달해 주었기 때문에 위의 스크립트는 사이트ID가 10인 사이트의 로그 폴더에서 파일이 수정된지 90일 이상된 파일들을 찾아 모두 삭제할 것입니다.

 

 

정말 삭제되었는지 다시 로그 폴더로 가보니, 실제 W3SVC10 폴더의 로그 파일들이 2014년 10월 것부터 남아 있습니다. 기존에 있던 2011년 부터의 과거 데이터는 모두 삭제된 것입니다.

 

IIS의 사이트 로그 파일이 어디에 저장되는지도 확인하였으며, VB스크립트를 사용하여 손쉽게 로그 파일들을 삭제하는 프로그램도 짰습니다.

그런데 여전히 조금 불편합니다. 오래된 파일들을 눈으로 확인하고, 일일이 삭제해야 하는 수고는 덜었지만, 여전히 스크립트를 관리자가 직접 실행해주어야 합니다. 뭐 사이트가 많지 않고, 특정 날짜를 잡아서 정기적으로 작업을 한다면 큰 부담이 없을 수도 있지만, 안그래도 바쁜 서버 관리자인데, 이러한 것들을 신경쓰지 않을 수는 없을까요?

 

 

가능합니다. 바로 윈도우 스케쥴러를 사용하면 됩니다!!

 

위에서 작성한 스크립트를 매월 첫째날 새벽 3시에 자동으로 실행되게 하는 스케줄링 작업을 윈도우 작업 스케줄러에 등록하여 관리하는 방법은 다음 포스팅에서 다루도록 하겠습니다. 

 

저작자 표시 비영리 변경 금지
신고


Comment +9

  • 초보 2015.05.11 09:57 신고

    안녕하세요
    올려주신 내용 잘봤습니다
    위내용데로 실행했더니 Microsoft VBScript 런타임 오류: 개체가 필요합니다.: ''
    라는 에러가 발생합니다
    oFile에서 에러가 발생하는것 같은데요..
    좀 도와주실수 있을까요??

    • 앗! 안녕하세요. 초보님.
      블로그 방문해 주셔서 감사합니다.
      확인해보니 제 블로그 게시물에 오타가 있던 것 같은데요. 혹시 oFile 대신 wFile 로 수정하신 후 한 번 해보시겠습니까?^^

    • 게시물 수정은 집에 가서 해야겠네요^^ 좋은 하루되세요~

  • 초보 2015.05.11 15:21 신고

    수정하니 잘되네요~
    좋은 정보 감사합니다^^
    즐거운 하루 보내세요~~

    제 블로그에 좀 담아갈께요~~

  • 갈켜주세요 2015.06.18 11:35 신고

    안녕하세요. IIS 파일이 아닌 특정 로그파일을 삭제하고싶은데 이 스크립트로가능할까요?

    • 안녕하세요. 갈켜주세요님^^ 반갑습니다.

      물론 적용 가능합니다.

      제가 작성한 윈도우 스크립트는 시스템의 어느 파일에도 적용할 수 있는 코드입니다. 저는 단지 IIS의 로그 파일을 삭제하기 원해 로그 파일을 대상으로 하여 삭제하는 예제를 실었을 뿐이며, 삭제 대상 파일을 수정함으로써 말씀하신대로 시스템의 다른 파일들도 삭제하실 수 있습니다.^^

      코드를 조금 수정 및 응용하시면 쉽게 구현하실 수 있으실 것이라 생각됩니다.

      좋은 밤 되세요^^

  • 정말 정말 왕초보 2015.10.13 13:45 신고

    로그파일 삭제처리를 하긴 해야 하는데 너무 왕 초보라서 어떻게 해야 할지 정말 막막했습니다. 이거 보고 조금 응용하고 나니 해결이 되었어요.. 정말 감사드려요.. 저같은 왕초보에게는 이런 글들이 정말 도움이 많이 된답니다. 정말 고마워서 그냥 지나치기 그래 몇자 적어 봅니다. 저두 지금부터 시작이라 몇년뒤에는 이런 사이트를 운용해서 초보자들에게 힘이 되고 싶네요..ㅎㅎㅎ 가능할지는 모르지만.... 정말 감사드려요

    • 안녕하세요. 정말 정말 왕초보님!
      블로그를 방문해 주셔서 감사합니다.

      포스팅을 보시고, 문제가 해결되었다니 다행입니다!

      제가 필요에 의해 직접 사용하였거나 겪었던 일들을 이런 게시물 형태로 올리는데, 저와 같은 상황을 겪는 분들이 은근히 있으신 것 같고, 또 실질적으로 글을 보고 도움을 받아 문제를 해결하시는 것을 보면 뿌듯하기도 하고, 기분이 매우 좋습니다.^^

      그리고 칭찬의 말씀 정말!!! 감사드리구요.
      정말 정말 왕초보(ㅎㅎㅎ)님도 좋은 생각을 가지고 계신 것 같고, 또 열심히 하시는 분이실 것 같아, 분명 머지않아, 이것 보다 더 좋은 사이트나 블로그를 만들어 운영하실 수 있을 거라 생각됩니다.^^

      그럼 좋은 밤 되세요!

티스토리 툴바