Очистка и перемещение логов в Exchange Server

После развертывания Exchange вы можете заметить, что свободное место на дисках начинает очень быстро уменьшаться. Помимо роста самых почтовых баз данных, в Exchange очень много место съедают различные логи. Особенно сильно проблема большого размера логов актуальна для версий, начиная с Exchange 2013. Если не использовать механизмы очистки логов, очень часто бывают случаи, когда почтовые базы аварийно отмонтируются и почтовый сервис становится недоступным для пользователей (часто сопровождается ошибкой 4.3.1 Insufficient system resources) из-за того, что логи Exchange заняли все свободное место на диске. В этой статье мы рассмотрим несколько стратегий очистки (усечения) и перемещения лог файлов в Exchange Server 2013/2016/2019.

Транзакционные логи в Exchange

Транзакционные логи баз данных это важный элемент в Exchange Server. При отправке/получении любого письма Exchange сначала вносит информацию в транзакционный лог, и только потом сохраняет элемент непосредственно в базу данных. Транзакционные логи содержат все операции, которые выполняются с базой данных и крайне важны для ее восстановления. Размер одного лог файла 1 Мб. Таких файлов может быть очень много, их количество зависит от активности пользователей в базе данных.

Есть несколько способов очистки транзакционных логов:

  1. Выполняйте регулярное резервное копирование почтовых баз Exchange. При корректном резервном копировании, транзакционные логи, которые более не нужны для восстановления базы данных, автоматически очищаются. Используйте любое современное решение для резервного копирования Exchange (обязательно должно поддерживаться копирование через Volume Shadow Copy – VSC). Можно использовать даже встроенный Windows Server Backup (пример);
  2. Включите Circular Logging для транзакционных логов. В этом случае файл транзакции автоматически удаляется, после того как данные из него сохранены в базу данных. Вы можете включить Circular Logging из EAC ( Enable Circular logging в свойствах базы) или PowerShell: Set-MailboxDatabase mbxDBname1 -CircularLoggingEnabled $true (для применения изменений нужно перемонтировать базу); exchange включить Circular logging для автоматической очистки трназакционных логов
  3. Переместите базу Exchange с транзакционными логами на новый диск большого размера. По умолчанию при установке Exchange первая почтовая база сохраняется в каталог C:\Program Files\Microsoft\Exchange Server\… Желательно переместить почтовые базы с системного диска C: на другой. Для этого используется командлет Move-DatabasePath. Например, чтобы переместить базу и транзакционные логи на диск F:, выполните команду: Move-Databasepath mbxDBname1 –EdbFilepath “F:\DB\mbxDBname1\mbxDBname1.edb” –LogFolderpath “F:\DB\mbxDBname1\logs\” Move-DatabasePath перенос базы exchange с транзакционными логами на другой диск

Логи базы данных очередей в Exchange 2013/2016/2019

В базе данных очередей Mail.que временно хранятся сообщения, ожидающие обработки. Все элементы в каждой очереди обрабатываются сервером транспорта в особом порядке. База данных очередей представляет собой обычную базу ESE. Очереди находятся только на mailbox или на edge transport серверах (тут зависит от версии Exchange, так как в 2013, 2016 и 2019 архитектура различается). Расположение базы данных очередей и ее транзакционных логов указывает в конфигурационном XML файле %ExchangeInstallPath%Bin\EdgeTransport.exe.config (QueueDatabasePath и QueueDatabaseLoggingPath). Если база очередей и ее транзакционные логи занимает очень много места, вы можете перенести ее из дефолтного каталога %ExchangeInstallPath%TransportRoles\data\Queue на другой диск (вот здесь это описано довольно подробно https://docs.microsoft.com/en-us/exchange/change-the-location-of-the-queue-database-exchange-2013-help?redirectedfrom=MSDN)

Очистка транспортных логов Exchange

В транспортных логах Exchange хранится информацию о всех сообщениях обработанных службой MSExchangeTransport (по ссылке доступна статья о том как включить/отключить/переместить транспортные логи в Exchange — https://docs.microsoft.com/en-us/exchange/transport-logs-exchange-2013-help?redirectedfrom=MSDN).

Вы можете проверить включены ли транспортные логи на вашем сервере и пути к ним с помощью следующих команд PowerShell:

Get-TransportService -Identity meskexch1 | fl *logpath*
Get-TransportService -Identity meskexch1| fl *logenabled*

Get-TransportService - настройки логов и каталоги для хранения

Основные транспортные логи Microsoft Exchange Server по умолчанию хранятся в каталогах:

%ExchangeInstallPath%TransportRoles\Logs\Hub\Connectivity
%ExchangeInstallPath%TransportRoles\Logs\MessageTracking (используется при отслеживании писем через 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

Можно изменить каталог для хранения SMTP логов отправки/получения (Protocollogs) через EAC: Servers -> servers -> выберите сервер -> Transport Logs -> Protocol log.

перенести траспортные лог иexchnage server на другой диск

Если нужно изменить каталог хранения логов отслеживания Message Tracking, измените значение в поле Message Tracking log path в EAC.

Также с помощью символических ссылок вы можете спокойно перенаправить любой из каталогов транспортных логов на другой диск или даже сетевую папку (по UNC пути). Чтобы создать символическую ссылку, используется встроенная утилита mklink:
mklink /d "D:\ReceiveSMTPLogs" \\meskffs01\exchange\HubReceiveSMTPLog

Останется только изменить путь к каталогу с логами с помощью командлета:

Set-TransportService meskexch1 –ReceiveProtocolLogPath “D:\ReceiveSMTPLosg”

Таким образом вы можете хранить любые другие транспортные логи в сетевой папке на удаленном сервере.

Ротация и удаление IIS логов в Exchange

В логах IIS накапливается информация о подключениях к почтовым ящикам Exchange через OWA и ActiveSync. Со временем логи IIS, генерируемые пользователями при доступе к Exchange, могут занимать довольно много места.

Вы можете автоматически удалять старые логи IIS. Можно сделать автоматическое задание в планировщике Windows, которое запускается каждый день и удаляет логи IIS старше 30 дней:
set-location c:\inetpub\logs\LogFiles\W3SVC1\
foreach ($File in get-childitem) {
if ($File.LastWriteTime -lt (Get-Date).AddDays(-30)) {
del $File
}
}

Осталось создать новое задание в планировщике, которое должно запускать ваш PS1 скрипт очистки логов.

Чтобы Windows не блокировало запуск PowerShell скриптов, нужно изменить настройки политики PowerShell Execution, подписать PS1 файл или запускать его в планировщике с аргументами: powershell.exe -NoProfile -NoLogo -NonInteractive -ExecutionPolicy Bypass -File c:\ps\clear_iis_logs.ps1

Если вам нужны старые логи IIS для анализа и траблшутинга, вы можете перенести их на другой диск:

  1. Откройте консоль IIS Manager и выберите Default Web Site;
  2. Перейдите в секцию Logging;
  3. Измените путь к каталогу, в котором по умолчанию хранятся логи IIS (directory); изменить путь к логам IIS в Exchnage Server, очистить старые логи
  4. Сохраните изменения и перезапустите IIS. После этого IIS начнет писать логи в другой каталог.

Также можно изменить путь к логам IIS через PowerShell:

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

Очистка папки Logging в Exchange

Большое количество логов различных служб хранятся в каталоге Logging (например, в Exchange 2013 это C:\Program Files\Microsoft\Exchange Server\V15\Logging). Со временем все эти логи начинают занимать довольно много места.

Особо стоит отметить логи диагностики и производительности в C:\Program Files\Microsoft\Exchange Server\V15\Logging\Diagnostics (при включенной диагностике на высоком уровне они могут занимать десятки гигабайт).

Вы можете автоматически очищать старые логи Exchange в этих папках:
gci ‘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
gci ‘C:\Program Files\Microsoft\Exchange Server\V15\Logging\Diagnostics’ -Directory | gci -Include ‘*.log’,’*.blg’ -Recurse | ? LastWriteTime -lt (Get-Date).AddDays(-5) | Remove-Item

Можно добавить эти команды в задание Task Scheduler.

PowerShell скрипт очистки логов Exchange

Можно объединить все рассмотренные выше команды для очистки старых логов Exchange в один PowerShell скрипт, который нужно запускать по расписанию:

$days = 15
$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"


Предыдущая статья Следующая статья


Комментариев: 3 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)