안녕하세요. 박세계입니다.
각종 로그파일은 불필요해 보이지만 막상 명확하지 않은 오류 발생시 큰 도움이 되는 경우가 많습니다. 하지만 보통의 경우 많은 디스크 공간을 차지해서 주기적으로 정리를 해줘야 하는 번거로움이 있습니다. 가만히 장기간 놔둘 경우 디스크 공간을 꽉 채워서 서비스 중단까지도 유발하기에 주기적인 정리는 필수입니다.
본 글에서는 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
}
스크립트 내용 요약입니다. 정리 작업은 모든 웹사이트의 모든 로그파일에 적용됩니다.
- '오늘 로그파일 + 최근 60일 로그파일' 제외 모든 파일 삭제
- 오늘 로그파일 제외 남아있는 모든 과거 로그파일 압축/삭제 (로그파일명.log -> 로그파일명.zip)
3. PowerShell 스크립트 실행
Command Prompt
에서 다음과 같이 실행합니다.
C:\>powershell C:\batch_jobs\CompressAndCleanUpIISLogs.ps1
Task Scheduler
에 등록하여 매일 실행되게 하면 됩니다. 스케줄링 설정 방법은 생략하겠습니다.
스크립트 실행 전과 후의 결과는 다음과 같습니다. 실행일은 '2018년 03월 02일' 입니다.
실행 전
실행 후
실행 결과 요약입니다.
- 60일 이전 파일 삭제
- 계속 로깅이 되야 하는 당일 파일
u_ex180302.log
는 미압축 - 나머지 모든 파일 개별 압축
압축 후 파일당 10-15배 가량 용량이 줄어드는 걸 볼 수 있습니다. 차후 분석이 필요한 파일만 압축을 풀어서 확인하면 됩니다.
Cheer Up!
정성글 잘보고 가요 팔로우 할께요
nice.
좋네요....로그가 남아있으면 확실히 원인찾는데 편하죠.
어렵네요. 공부를 좀 해야겠습니다 ㅠ
서버관리할 때 유용할 것 같아요. 기억해 놓겠습니다.
글 잘 읽었습니다. 제 블로그에 [작명법]에 대한 소개가 있습니다. 방문해 주세요~
안녕하세요? 박세계님. 정식으로 인사드립니다. 뉴맨입니다. 님 덕분에 통계를 아주 잘 쓰고 있습니다. 관련해서 아침에 포스팅을 하나 했거든요. 스티미언 가입자 증감에 대한 지표 이야기를 살짝 했습니다 시간 되시면 한번 참고해주세요. 저는 개발에 대해 전혀 문외한이거든요.^^ https://steemit.com/busy/@kimkwanghwa/5mtbua
프로젝트 운영할때 오류 생기면 로그파일 분석하느라 바쁘신 개발자분들을 많이 보았었는데 ㅠㅜ 그생각이 문득 나네요 ㅎㅎ