[개발] IIS 로그파일 자동 압축 및 삭제 (PowerShell 스크립트)

in #kr7 years ago (edited)

안녕하세요. 박세계입니다.

각종 로그파일은 불필요해 보이지만 막상 명확하지 않은 오류 발생시 큰 도움이 되는 경우가 많습니다. 하지만 보통의 경우 많은 디스크 공간을 차지해서 주기적으로 정리를 해줘야 하는 번거로움이 있습니다. 가만히 장기간 놔둘 경우 디스크 공간을 꽉 채워서 서비스 중단까지도 유발하기에 주기적인 정리는 필수입니다.

본 글에서는 Windows 웹서버 IIS에서 생성하는 로그파일을 자동 압축 및 삭제하는 PowerShell 스크립트를 공유하고자 합니다. 제가 정확히 원하는 스크립트를 찾을 수 없어 구글링을 통해 직접 만들었습니다. IIS 로그파일 정리를 기준으로 작성했지만 수정을 통해 파일 정리를 원하는 모든 상황에 적용할 수 있습니다.


1. PowerShell 5.0 이상 설치

파일 압축을 위한 Compress-Archive가 5.0 이상 부터 지원합니다. 다른 방법도 있지만 최신버전에서 지원하는 최신 명령어를 사용하는게 암튼 좋습니다.

Windows 10과 Windows Server 2016 이상은 이미 최신버전인 5.1이 설치되어 있습니다. Windows 버전별 PowerShell 설치 버전은 다음 글 참조 바랍니다.

2. PowerShell 스크립트 작성

다음 스크립트를 복사해서 CompressAndCleanUpIISLogs.ps1 이름으로 저장합니다. 저장 경로는 C:\batch_jobs로 하겠습니다.

스크립트 최상단의 $SavingDays = 60만 원하는데로 조절하면 됩니다. 그대로 두면 최근 60일간 생성된 로그파일만 남기고 모두 삭제합니다.

# Set this value as you want (Keep log files for this value)
$SavingDays = 60

# Initialize variables
$Today = (Get-Date).Date
$LastDayToKeep = $Today.AddDays(-$SavingDays)

# Clean up old log files
Get-ChildItem -Path $env:SystemDrive\inetpub\logs\LogFiles\w3svc*\* -Recurse | Where {$PSItem.LastWriteTime -lt $LastDayToKeep} | Remove-Item

If($? -eq $false)
{
    Return
}

# Compress log files except for today's one
Get-ChildItem -Path $env:SystemDrive\inetpub\logs\LogFiles\w3svc*\*.log -Recurse | Where {$PSItem.LastWriteTime -lt $Today} |
    ForEach-Object -Process {
        Compress-Archive -Path $PSItem.FullName -Update -DestinationPath "$($PSItem.DirectoryName)\$($PSItem.BaseName).zip"
        Remove-Item $PSItem.FullName
    }

If($? -eq $false)
{
    Return
}

스크립트 내용 요약입니다. 정리 작업은 모든 웹사이트의 모든 로그파일에 적용됩니다.

  1. '오늘 로그파일 + 최근 60일 로그파일' 제외 모든 파일 삭제
  2. 오늘 로그파일 제외 남아있는 모든 과거 로그파일 압축/삭제 (로그파일명.log -> 로그파일명.zip)

3. PowerShell 스크립트 실행

Command Prompt에서 다음과 같이 실행합니다.

C:\>powershell C:\batch_jobs\CompressAndCleanUpIISLogs.ps1

Task Scheduler에 등록하여 매일 실행되게 하면 됩니다. 스케줄링 설정 방법은 생략하겠습니다.


스크립트 실행 전과 후의 결과는 다음과 같습니다. 실행일은 '2018년 03월 02일' 입니다.

실행 전

before-iis-logs-cleanup.png

실행 후

after-iis-logs-cleanup.png

실행 결과 요약입니다.

  1. 60일 이전 파일 삭제
  2. 계속 로깅이 되야 하는 당일 파일 u_ex180302.log는 미압축
  3. 나머지 모든 파일 개별 압축

압축 후 파일당 10-15배 가량 용량이 줄어드는 걸 볼 수 있습니다. 차후 분석이 필요한 파일만 압축을 풀어서 확인하면 됩니다.

Sort:  

Cheer Up!

  • from Clean STEEM activity supporter

정성글 잘보고 가요 팔로우 할께요

좋네요....로그가 남아있으면 확실히 원인찾는데 편하죠.

어렵네요. 공부를 좀 해야겠습니다 ㅠ

서버관리할 때 유용할 것 같아요. 기억해 놓겠습니다.

글 잘 읽었습니다. 제 블로그에 [작명법]에 대한 소개가 있습니다. 방문해 주세요~

안녕하세요? 박세계님. 정식으로 인사드립니다. 뉴맨입니다. 님 덕분에 통계를 아주 잘 쓰고 있습니다. 관련해서 아침에 포스팅을 하나 했거든요. 스티미언 가입자 증감에 대한 지표 이야기를 살짝 했습니다 시간 되시면 한번 참고해주세요. 저는 개발에 대해 전혀 문외한이거든요.^^ https://steemit.com/busy/@kimkwanghwa/5mtbua

프로젝트 운영할때 오류 생기면 로그파일 분석하느라 바쁘신 개발자분들을 많이 보았었는데 ㅠㅜ 그생각이 문득 나네요 ㅎㅎ