Exchange 서버를 운영하다 보면 어느새 C 드라이브 용량이 부족해지는 경험을 하게 됩니다. 그 주범은 바로 각종 로그 파일들입니다. Exchange 2013 이후 버전부터는 특히 로그 파일 생성량이 많아져서 체계적인 관리가 필수가 되었습니다. 오늘은 Exchange 서버의 로그 파일이 어디에 저장되는지, 그리고 효과적으로 정리하는 방법들을 상세히 살펴보겠습니다.
1. Exchange 서버 주요 로그 파일 위치
기본 Exchange 로깅 폴더
Exchange 서버의 대부분 로그 파일은 다음 위치에 저장됩니다:
C:\Program Files\Microsoft\Exchange Server\V15\Logging\
이 폴더에는 다양한 하위 폴더들이 있으며, 각각 다른 종류의 로그를 저장합니다:
로그 유형 | 경로 | 용도 |
---|---|---|
Transport 로그 | %ExchangeInstallPath%TransportRoles\Logs\Hub\ |
메일 전송 관련 로그 |
Message Tracking | %ExchangeInstallPath%TransportRoles\Logs\MessageTracking\ |
메시지 추적 로그 |
Connectivity 로그 | %ExchangeInstallPath%TransportRoles\Logs\Mailbox\Connectivity\ |
연결 관련 로그 |
Protocol 로그 | %ExchangeInstallPath%TransportRoles\Logs\Mailbox\ProtocolLog\ |
SMTP 프로토콜 로그 |
Agent 로그 | %ExchangeInstallPath%TransportRoles\Logs\Hub\AgentLog\ |
안티스팸 에이전트 로그 |
IIS 로그 파일
Exchange 웹 서비스와 관련된 IIS 로그는 다음 위치에 저장됩니다:
C:\inetpub\logs\LogFiles\
이 폴더 내에는 W3SVC1
, W3SVC2
등의 하위 폴더가 있으며, 각각 200MB 이상의 로그 파일들이 생성됩니다.
ETL 진단 로그
Exchange 진단 로그는 다음 두 위치에 저장됩니다:
C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\ETLTraces\
C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\Logs\
이 로그들은 거의 매시간 50MB 크기의 파일을 생성하며, 기본적으로 100개 파일을 유지하도록 설정되어 있습니다.
PowerShell 명령 로그
Exchange PowerShell에서 실행된 명령들의 로그는 다음 위치에 저장됩니다:
C:\Program Files\Microsoft\Exchange Server\V15\Logging\CmdletInfra\LocalPowerShell\Cmdlet\
Exchange 설치 로그
Exchange 설치 및 업데이트 관련 로그는 다음 위치에 저장됩니다:
C:\ExchangeSetupLogs\
2. 로그 파일 확인 명령어
PowerShell을 사용하여 현재 로그 파일 설정과 위치를 확인할 수 있습니다:
Transport 로그 설정 확인
Get-TransportService -Identity [서버명] | fl *logpath*
Get-TransportService -Identity [서버명] | fl *logenabled*
Mailbox Transport 서비스 로그 확인
Get-MailboxTransportService -Identity [서버명] | fl *logpath*
메시지 추적 로그 설정 확인
Get-MessageTrackingLog -ResultSize 1 | FL *
3. 효과적인 로그 정리 방법
PowerShell 스크립트를 이용한 자동 정리
다음은 Exchange 로그를 자동으로 정리하는 PowerShell 스크립트입니다:
# CleanupLogs.ps1
# 지정된 일수보다 오래된 로그 파일 삭제
$days = 2 # 보관할 일수 설정
# 주요 로그 폴더 경로
$IISLogPath = "C:\inetpub\logs\LogFiles\"
$ExchangeLoggingPath = "C:\Program Files\Microsoft\Exchange Server\V15\Logging\"
$ETLLoggingPath = "C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\ETLTraces\"
$ETLLoggingPath2 = "C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\Logs\"
# 각 폴더의 오래된 파일들 삭제
ForEach ($folder in $IISLogPath, $ExchangeLoggingPath, $ETLLoggingPath, $ETLLoggingPath2) {
if (Test-Path $folder) {
Get-ChildItem $folder -Recurse -File | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-$days)} | Remove-Item -Force
}
}
Write-Host "로그 정리가 완료되었습니다."
스크립트 실행 방법
- 위 코드를 메모장에 복사하여
CleanupLogs.ps1
로 저장 - Exchange 서버의
C:\Scripts\
폴더에 저장 - PowerShell을 관리자 권한으로 실행
- 스크립트 파일을 우클릭하고 “PowerShell로 실행” 선택
예약된 작업으로 자동화
매일 자동으로 로그를 정리하도록 예약된 작업을 설정할 수 있습니다:
- 작업 스케줄러 열기
- 기본 작업 만들기 선택
- 다음 설정으로 작업 생성:
- 이름: Exchange Log Cleanup
- 트리거: 매일
- 시간: 새벽 2시 (서비스 사용량이 적은 시간)
- 동작: PowerShell 스크립트 실행
- 프로그램:
PowerShell.exe
- 인수:
-ExecutionPolicy Bypass -File "C:\Scripts\CleanupLogs.ps1"
4. 개별 로그 타입별 관리 방법
IIS 로그 경로 변경
IIS 로그를 다른 드라이브로 이동하려면:
IIS 관리자를 통한 방법
- IIS 관리자 열기
- 기본 웹 사이트 선택
- 로깅 더블클릭
- 디렉터리 경로를 다른 드라이브로 변경
- 적용 클릭 후 IIS 재시작
PowerShell을 통한 방법
Import-Module WebAdministration
Set-ItemProperty 'IIS:\Sites\Default Web Site' -name logfile.directory "D:\IISLogs"
Message Tracking 로그 설정
메시지 추적 로그의 위치와 보관 기간을 변경할 수 있습니다:
# 로그 경로 변경
Set-TransportService -Identity [서버명] -MessageTrackingLogPath "D:\MessageTracking"
# 보관 기간 설정 (기본값: 30일)
Set-TransportService -Identity [서버명] -MessageTrackingLogMaxAge 15.00:00:00
# 최대 폴더 크기 설정 (기본값: 1GB)
Set-TransportService -Identity [서버명] -MessageTrackingLogMaxDirectorySize 2GB
Transport 로그 관리
Transport 로그의 설정을 변경하려면:
# Connectivity 로그 경로 변경
Set-TransportService -Identity [서버명] -ConnectivityLogPath "D:\ConnectivityLogs"
# Protocol 로그 경로 변경
Set-TransportService -Identity [서버명] -SendProtocolLogPath "D:\ProtocolLogs\Send"
Set-TransportService -Identity [서버명] -ReceiveProtocolLogPath "D:\ProtocolLogs\Receive"
5. 데이터베이스 로그와 순환 로깅
순환 로깅 활성화
메일박스 데이터베이스의 트랜잭션 로그를 자동으로 정리하려면 순환 로깅을 활성화할 수 있습니다:
# 순환 로깅 활성화
Set-MailboxDatabase [데이터베이스명] -CircularLoggingEnabled $true
# 변경사항 적용을 위해 데이터베이스 마운트 해제 후 재마운트
Dismount-Database [데이터베이스명]
Mount-Database [데이터베이스명]
⚠️ 주의사항: 순환 로깅을 활성화하면 증분 백업이 불가능해집니다. 전체 백업만 가능하므로 백업 전략을 고려해야 합니다.
데이터베이스 위치 이동
데이터베이스와 로그를 C 드라이브가 아닌 다른 드라이브로 이동하는 것이 좋습니다:
Move-DatabasePath "MDB1" –EdbFilepath "D:\DB\MDB1\databases\mdb1.edb" –LogFolderpath "D:\DB\MDB1\logs\"
6. 로그 정리 시 주의사항
안전한 삭제 가능한 로그들
다음 로그들은 안전하게 삭제할 수 있습니다:
- IIS 로그 파일
- Exchange Logging 폴더의 진단 로그
- ETL 추적 파일
- Message Tracking 로그 (보관 기간 경과 후)
삭제하면 안 되는 로그들
다음은 삭제하지 말아야 할 중요한 파일들입니다:
- 데이터베이스 트랜잭션 로그 (.log 파일)
- 현재 사용 중인 로그 파일
- 체크포인트 파일 (.chk)
서비스 중지가 필요한 경우
대량의 ETL 로그 정리 시에는 다음 서비스들을 임시로 중지할 수 있습니다:
- Microsoft Exchange Health Manager Service
- Microsoft Exchange Diagnostics Service
하지만 일반적인 로그 정리에는 서비스 중지가 필요하지 않습니다.
7. 모니터링 및 유지관리
디스크 공간 모니터링
Exchange 서버의 디스크 공간을 정기적으로 모니터링하는 것이 중요합니다:
# 디스크 사용량 확인
Get-WmiObject -Class Win32_LogicalDisk | Select-Object DeviceID, @{Name="Size(GB)";Expression={[math]::Round($_.Size/1GB,2)}}, @{Name="FreeSpace(GB)";Expression={[math]::Round($_.FreeSpace/1GB,2)}}
로그 크기 확인
각 로그 폴더의 크기를 확인하려면:
# 폴더별 크기 확인
$folders = @(
"C:\inetpub\logs\LogFiles\",
"C:\Program Files\Microsoft\Exchange Server\V15\Logging\",
"C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\ETLTraces\"
)
foreach ($folder in $folders) {
if (Test-Path $folder) {
$size = (Get-ChildItem $folder -Recurse | Measure-Object -Property Length -Sum).Sum / 1GB
Write-Host "$folder : $([math]::Round($size, 2)) GB"
}
}
Exchange 서버의 로그 파일 관리는 서버 성능과 안정성을 위해 필수적입니다. 정기적인 정리와 적절한 보관 정책을 통해 디스크 공간 부족으로 인한 서비스 중단을 예방할 수 있습니다. 특히 PowerShell 스크립트를 활용한 자동화는 관리 업무를 크게 줄여줄 수 있으니 꼭 활용해보시기 바랍니다.