清理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)
通过以上的日志清理,并执行任务计划的清除脚本,那么你的系统盘空间应该是可以过上一个比较安稳的日子了,但是也建议定期(每个季度)进行一次巡查,避免真出现磁盘空间不足的情况。