当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何在 Exchange Server 2013/2016/2019 中清理、截断或移动日志文件?

作者:精品下载站 日期:2024-12-14 22:59:45 浏览:12 分类:玩电脑

如何在 Exchange Server 2013/2016/2019 中清理、截断或移动日志文件?


部署 Exchange 后,您可能会注意到可用磁盘空间开始快速减少。除了邮箱数据库本身的增长之外,各种日志还占用了 Exchange 服务器上的大量空间。大日志大小的问题在从 Exchange 2013 开始的版本中尤其明显。除非您使用某种解决方案来清理旧日志文件,否则由于 Exchange 日志占用了所有可用磁盘空间(通常伴随着

452 4.3.1 Insufficient system resources

错误)。在本文中,我们将了解在 Exchange Server 2013/2016/2019 中清理、截断和移动日志文件的不同方法。

如何截断/清除 Exchange 上的事务日志?

邮箱数据库的事务日志是最重要的 Exchange 元素之一。例如:当发送/接收电子邮件时,Exchange 首先将信息写入事务日志文件,然后才将项目直接保存到邮箱数据库。事务日志包含对数据库执行的所有操作,对于恢复损坏的邮箱数据库极其重要。单个事务日志文件的大小为 1 MB,邮箱数据库文件夹中可以有数千个事务日志文件(它们的数量取决于邮箱数据库中用户的活动)。

有多种方法可以清除 Exchange 中的事务日志:

  1. 定期备份您的 Exchange 邮箱数据库。正确备份后,恢复数据库不再需要的事务日志将被自动清除。使用任何现代 Exchange 备份解决方案(Exchange 仅支持基于卷影复制、VSC 的备份)。您甚至可以使用内置的 Windows Server Backup 角色;

  2. 为您的事务日志启用循环日志记录。启用循环日志记录后,事务日志将在事务应用到数据库后立即清除。您可以通过 EAC(在邮箱数据库属性中启用循环日志记录)或使用 PowerShell 启用循环日志记录:

    Set-MailboxDatabase mbxDBname1 -CircularLoggingEnabled $true

    (要应用更改,您需要卸载并装载邮箱数据库);

    [玩转系统] 如何在 Exchange Server 2013/2016/2019 中清理、截断或移动日志文件?

  3. 将包含事务日志的 Exchange 数据库移动到另一个大驱动器默认情况下,安装 Exchange 时,第一个邮箱数据库将保存到 C:\Program Files\Microsoft\Exchange Server\... 文件夹。建议将邮箱数据库从系统驱动器 C: 移动。为此,请使用 Move-DatabasePath cmdlet。例如,要将数据库和事务日志移动到 M: 驱动器,请运行以下命令:

    Move-Databasepath “MDB1” -EdbFilepath “M:\DB\MDB1\databases\mdb1.edb” -LogFolderpath “M:\DB\MDB1\logs\”

    [玩转系统] 如何在 Exchange Server 2013/2016/2019 中清理、截断或移动日志文件?

提示。如何将 Exchange 数据库移动到另一个驱动器?

Exchange 2013/2016/2019 上的邮件队列数据库日志

队列数据库Mail.que临时存储等待下一个处理阶段的消息。每个队列中的所有项目均由传输服务器按特定顺序处理。队列数据库是常规 ESE 数据库。队列仅位于邮箱或边缘传输服务器上(这里取决于 Exchange 的版本,因为 2013 年、2016 年和 2019 年的架构不同)。队列数据库及其事务日志的位置在 XML 配置文件 %ExchangeInstallPath%Bin\EdgeTransport.exe.config 中指定(检查

QueueDatabasePath

QueueDatabaseLoggingPath

参数)。如果队列数据库及其事务日志占用大量空间,您可以将其从默认目录中移动

%ExchangeInstallPath%TransportRoles\data\Queue

到另一个驱动器(有关移动队列数据库的详细信息,请参阅更改队列数据库的位置。)

如何在 Exchange Server 上移动传输日志?

Exchange 传输日志存储有关 MSExchangeTransport 服务处理的所有邮件的信息。有关如何在 Exchange 中启用、禁用或移动传输日志的详细信息,请查看文章传输日志。

您可以使用以下 PowerShell (EMS) 命令检查服务器上是否启用了传输日志及其路径:

Get-TransportService -Identity mun-exch1 | fl *logpath*
Get-TransportService -Identity mun-exch1 | fl *logenabled*

[玩转系统] 如何在 Exchange Server 2013/2016/2019 中清理、截断或移动日志文件?

Microsoft Exchange Server 的主要传输日志默认存储在以下文件夹中:

%ExchangeInstallPath%TransportRoles\Logs\Hub\Connectivity%ExchangeInstallPath%TransportRoles\Logs\MessageTracking (used when searching messages via Get-MessageTrackingLog)%ExchangeInstallPath%Logging\IRMLogs%ExchangeInstallPath%TransportRoles\Logs\Hub\ActiveUsersStats%ExchangeInstallPath%TransportRoles\Logs\Hub\ServerStats%ExchangeInstallPath%TransportRoles\Logs\Hub\ProtocolLog\SmtpReceive%ExchangeInstallPath%TransportRoles\Logs\Hub\Routing%ExchangeInstallPath%TransportRoles\Logs\Hub\ProtocolLog\SmtpSend%ExchangeInstallPath%TransportRoles\Logs\Hub\QueueViewer%ExchangeInstallPath%TransportRoles\Logs\Hub\AgentLog

您可以通过 EAC 更改存储 SMTP 发送/接收日志 (协议日志) 的文件夹(服务器 -> 服务器 -> select_a_server -> 传输日志 -> 协议日志)。

[玩转系统] 如何在 Exchange Server 2013/2016/2019 中清理、截断或移动日志文件?

您可以通过 EAC 更改邮件跟踪日志路径

[玩转系统] 如何在 Exchange Server 2013/2016/2019 中清理、截断或移动日志文件?

此外,您还可以使用符号链接将任何传输日志文件夹安全地重定向到另一个驱动器甚至共享网络文件夹(通过 UNC 路径)。要创建符号链接,请使用内置的 mklink 工具:

mklink /d "D:\HubReceiveSMTPLogs" \filesServer1\HubReceiveSMTPLog

剩下的就是使用 cmdlet 更改日志目录的路径:

Set-TransportService mun-exch1 -ReceiveProtocolLogPath “D:\ReceiveSMTPLosg”

因此,您可以将任何 Exchange 传输日志存储在远程服务器上的共享网络文件夹中。此方法适用于其他Exchange日志。

在 Exchange 中轮换和删除 IIS 日志文件

IIS 日志包含有关通过 OWA 和 ActiveSync 连接到 Exchange 邮箱的信息。随着时间的推移,如果不加控制,用户在访问 Exchange 时创建的 IIS 日志可能会变得太大。

您可以自动清理旧的 IIS 日志。您可以在 Windows 任务计划程序中创建一个每天运行的自动任务,并删除超过 28 天的 IIS 日志:

set-location c:\inetpub\logs\LogFiles\W3SVC1\
foreach ($File in get-childitem) {
if ($File.LastWriteTime -lt (Get-Date).AddDays(-28)) {
del $File
}
}

仍然需要在任务计划程序中创建一个新任务,该任务应该运行 PS1 日志清理脚本。

您可以通过任务计划程序运行 PowerShell 脚本,如下所示:

  1. 在任务计划程序中创建任务

  2. 创建动作:启动一个程序;

  3. 在现场程序/脚本中添加:

     C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
  4. 在字段中添加参数(可选):

    -command "c:\ps\clear_iis_logs.ps1"

[玩转系统] 如何在 Exchange Server 2013/2016/2019 中清理、截断或移动日志文件?

如果您的 Windows 阻止 PowerShell 脚本运行,您需要更改 PowerShell 执行策略设置,使用证书签署 PS1 文件,或通过调度程序使用其他参数运行脚本:

powershell.exe -NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File c:\ps\clear_iis_logs.ps1

如果您需要保留旧的 IIS 日志以进行进一步分析和故障排除,可以将它们移动到另一个位置(驱动器):

  1. 从管理工具中打开 IIS 管理器,然后选择默认网站

    [玩转系统] 如何在 Exchange Server 2013/2016/2019 中清理、截断或移动日志文件?

  2. 打开日志记录

  3. 更改默认日志位置(目录);

    [玩转系统] 如何在 Exchange Server 2013/2016/2019 中清理、截断或移动日志文件?

  4. 保存更改并重新启动 IIS。下一个日志文件将写入新位置。

您还可以使用 PowerShell 更改 IIS 日志的路径:

Import-Module WebAdministration
Set-ItemProperty ‘IIS:\Sites\Default Web Site’ -name logfile.directory "M:\IISLogs"

清除 Exchange 上的日志记录文件夹

Logging 文件夹中存储着不同 Exchange 服务的大量日志(例如,在 Exchange 2013 中,该文件夹为C:\Program Files\Microsoft\Exchange Server\V15\Logging)。随着时间的推移,它们会消耗大量的磁盘空间。特别值得注意的是 C:\Program Files\Microsoft\Exchange Server\V15\Logging\Diagnostics 中的诊断和性能日志(启用详细诊断后,它们可能需要数十 GB)。

您可以使用 PowerShell 删除这些文件夹中的旧 Exchange 日志文件。以下脚本将从这些文件夹中删除超过 21 天的所有日志:

Get-ChildItem 'C:\Program Files\Microsoft\Exchange Server\V15\Logging','C:\inetpub\logs' -Directory | gci -Include '*.log','*.blg' -Recurse | ? LastWriteTime -lt (Get-Date).AddDays(-21) | Remove-Item

您可以选择仅删除诊断日志文件:

Get-ChildItem 'C:\Program Files\Microsoft\Exchange Server\V15\Logging\Diagnostics' -Directory | gci -Include '*.log','*.blg' -Recurse | ? LastWriteTime -lt (Get-Date).AddDays(-5) | Remove-Item

您可以将这些 PowerShell 脚本添加到任务计划程序中,以便自动清除旧的 Exchange 日志。

使用 PowerShell 脚本清理 Exchange 日志

您可以将上述所有命令结合起来,将旧的 Exchange 日志清理到一个可以按计划运行的 PowerShell 脚本中:

$days = 14
$dirs=@(
"C:\inetpub\logs\LogFiles\",
"C:\Program Files\Microsoft\Exchange Server\V15\Logging\",
"C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\ETLTraces\",
"C:\Program Files\Microsoft\Exchange Server\V15\Bin\Search\Ceres\Diagnostics\Logs\",
"C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\"
)
Get-ChildItem $dirs -Recurse -File | Where-Object { $_.Name -like "*.log" -or $_.Name -like "*.blg" -or $_.Name -like "*.etl" } | Where-Object LastWriteTime -lt (Get-Date).AddDays(-$days) | Remove-Item -ErrorAction "SilentlyContinue"

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯