清理Exchange 2013和2016的Log文件
【摘要】
在你的Exchange 2013/2016的環境中,你可能會發現你的系統盤會很快被占用了很多空間,並且如果你不理會它的話,很快你的系統盤剩余空間就會告急了。
這是因為Exchange 2013/2016默認的日志記錄行為導致的,微軟為了更好地提供相關日志供管理員查詢而不是需要時才去開啟日志記錄。
但是系統盤對於我們來說又是何等重要,如果不清理這些日志的話,我們的系統將很快面臨“崩潰”的邊緣。
【正文】
Exchange 2013/2016默認會在如下路徑產生很多的日志記錄:C:\Program Files\Microsoft\Exchange Server\V15\Logging\,另外還有在Exchange 2013的CU6以后,還會在如下路徑創建很多.etl的文件:C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\ETLTraces\,Exchange 會在這個路徑下創建50MB一個的etl文件,並且最多生產100個,這就占用了系統盤5GB的空間了。
除了上述這些日志,Exchange的CAS角色上面,還將產生大量的IIS Log,默認路徑也是在系統盤里:C:\inetpub\logs\LogFiles,IIS的Log也不會自動清理,時間長了幾十GB的數據量都是很常見的。
下面我們來簡單談談這些日志記錄。
一、 Diagnostic Log文件
Exchange有個健康管理,收集了很多系統健康相關的數據,如果你的系統盤很充裕的話,這當然沒什么問題,但是通常我們的系統盤都是比較緊張的,所以,可以的話,我們可以禁用這項功能:
1. 打開【服務】管理器;
2. 找到【Microsoft Exchange Health Manager】服務;
3. 將這個服務的啟動類型修改為【禁用】;
4. 如果服務現在正在運行,那么可以停止這個服務;
5. 找到另一個叫【Microsoft Exchange Diagnostics】的服務,同樣禁用和停止這個服務;
6. 打開任務計划,依次點擊找到Microsoft→Windows→PLA;
7. 在選中PLA后,在右邊欄有兩個任務計划,停止並禁用它們;
8. 接下來打開如下路徑C:\Program Files\Microsoft\Exchange Server\V15\Logging\Diagnostic,將如下兩個文件夾中下面的Log文件進行刪除;
二、 ETL 文件
ETL文件每個50MB,默認將產生最多100個文件,那就是占用了5GB的空間了,文件路徑如下:C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\ETLTraces,對於這下面的文件夾,你可以放心地刪除,並不會對系統造成什么影響。對應的還有一個Log文件夾,如下:C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\Logs,也是記錄了大量的日志。
我們可以通過修改注冊表的方式來修改這個數量,使其總量得到下降:
注冊表路徑:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office Server\16.0\Search\Diagnostics\Tracing,注冊表鍵值:MaxTraceFileCount,將值修改為你想要的數量就可以了。
三、 IIS Log 文件
IIS Log文件就很常見了,只要是利用到了Windows的IIS功能的,都會產生很多的Log文件,默認路徑是C:\inetpub\logs\LogFiles,在這路徑下通常有這兩個文件夾W3SVC1和W3SVC2,這些Log文件不會自動清理,是會很煩人的,一不小心就讓系統盤剩余空間告急了。當然這些日志也是可以隨意刪除的,如果你不需要用它來做問題的跟蹤和排查的話。
IIS的Log文件夾位置也是可以修改的,不要將其放在系統盤的話,磁盤空間的問題應該就好辦了,具體修改路徑的方法比較簡單,隨便百度一下就有了,就不在這里贅述了。
跟IIS相關的Log文件還有RpcHttp和HttpProxy,路徑分別如下:C:\Program Files\Microsoft\Exchange Server\V15\Logging\RpcHttp,C:\Program Files\Microsoft\Exchange Server\V15\Logging\HttpProxy。這些Log文件都可以進行刪除,保留大約2-4周的量用於問題故障排查就好了。
定期清理以上所提及的Log文件,這將大大節省你系統盤的可用空間。當然,如果讓管理員每天或者每周手動去清理,那也是不太好使的,那么這里奉上一個Powershell腳本,可設置成定期的任務計划執行去清除相應路徑下的Log文件。腳本格式是ps1后綴的, 內容如下:
Set-Executionpolicy RemoteSigned
$days=14
$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"
Function CleanLogfiles($TargetFolder)
{
write-host -debug -ForegroundColor Yellow -BackgroundColor Cyan $TargetFolder
if (Test-Path $TargetFolder) {
$Now = Get-Date
$LastWrite = $Now.AddDays(-$days)
$Files = Get-ChildItem $TargetFolder -Recurse | Where-Object {$_.Name -like "*.log" -or $_.Name -like "*.blg" -or $_.Name -like "*.etl"} | where {$_.lastWriteTime -le "$lastwrite"} | Select-Object FullName
foreach ($File in $Files)
{
$FullFileName = $File.FullName
Write-Host "Deleting file $FullFileName" -ForegroundColor "yellow";
Remove-Item $FullFileName -ErrorAction SilentlyContinue | out-null
}
}
Else {
Write-Host "The folder $TargetFolder doesn't exist! Check the folder path!" -ForegroundColor "red"
}
}
CleanLogfiles($IISLogPath)
CleanLogfiles($ExchangeLoggingPath)
CleanLogfiles($ETLLoggingPath)
CleanLogfiles($ETLLoggingPath2)
通過以上的日志清理,並執行任務計划的清除腳本,那么你的系統盤空間應該是可以過上一個比較安穩的日子了,但是也建議定期(每個季度)進行一次巡查,避免真出現磁盤空間不足的情況。