윈도우 서버를 웹 서버로 사용할 때에는 보통 IIS(Internet Information Service, 인터넷 정보 서비스) 를 사용합니다.
IIS를 통해서 HTTP 웹 서버 및 FTP, SMTP 등 다양한 서비스를 구축하고, 서비스할 수 있습니다.
보통 IIS로 HTTP(웹 사이트) 나 FTP(FTP 사이트)를 운용하게 되면 해당 프로토콜을 통해 데이터를 전송과 관련된 트래픽 로그가 파일에 기록됩니다.
일단 사이트 로그를 사용하려면 특정 사이트 마다 로그 기능을 사용하겠다는 체크를 해야 합니다.
(그런데 윈도우 서버 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스크립트는 크게 어렵지 않으니, 쉽게 배워 사용하실 수 있지만, 정 모르더라도(굳이 배우고 싶지 않다하더라도) 아래 코드 그대로 가져다 사용하시면 되니 문제 없습니다. ㅎㅎㅎ
'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시에 자동으로 실행되게 하는 스케줄링 작업을 윈도우 작업 스케줄러에 등록하여 관리하는 방법은 다음 포스팅에서 다루도록 하겠습니다.
'개발&컴퓨터 > 서버관리' 카테고리의 다른 글
[IIS+ASP.NET] 브라우저에서 웹 사이트 서버 오류 자세히 보기 (2) | 2015.02.20 |
---|---|
PuTTY 한글 깨짐 문제 해결하기 (31) | 2015.02.09 |
윈도우 웹 서버(IIS)의 로그 관리(2/2) - 사이트 로그파일 자동 삭제되도록 스케줄 만들기 (4) | 2015.01.13 |
PuTTY 프로그램 (Telnet, SSH 서버 원격 접속) (1) | 2014.11.14 |
윈도우2008서버 텔넷 설치하기 (Windows 2008 Server - Telnet) (0) | 2014.07.15 |