Після розгортання Exchange ви можете помітити, що вільне місце на дисках починає дуже швидко зменшуватися. Крім зростання самих поштових баз даних, в Exchange дуже багато місце з’їдають різні логи. Особливо сильно проблема великого розміру логів актуальна для версій, починаючи з Exchange 2013. Якщо не використовувати механізми очищення логів, дуже часто бувають випадки, коли поштові бази аварійно отмонтіруются і поштовий сервіс стає недоступним для користувачів (часто супроводжується помилкою 4.3.1 Insufficient system resources) через те, що логи Exchange зайняли весь вільний місце на диску. У цій статті ми розглянемо кілька стратегій очищення (усічення) і переміщення лог файлів в Exchange Server 2013/2016/2019.

Транзакційні логи в Exchange

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

Є кілька способів очищення транзакційних логів:

  1. виконуйте регулярне резервне копіювання поштових баз Exchange. При коректному резервне копіювання, транзакційні логи, які більш не потрібні для відновлення бази даних, автоматично очищаються. Використовуйте будь-який сучасний рішення для резервного копіювання Exchange (обов’язково повинно підтримуватися копіювання через Колірна тіньова копія – VSC). Можна використовувати навіть вбудований Windows Server Backup (приклад);
  2. Увімкніть Кругові лісозаготівлі для транзакційних логів. У цьому випадку файл транзакції автоматично видаляється, після того як дані з нього збережені в базу даних. Ви можете включити 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:DBmbxDBname1mbxDBname1.edb” –LogFolderpath “F:DBmbxDBname1logs” Move-DatabasePath перенесення бази exchnage з транзакційними балками на інший диск

Список бази даних черг в Exchange 2013/2016/2019

У базі даних черг Mail.que тимчасово зберігаються повідомлення, що очікують обробки. Всі елементи в кожній черзі обробляються сервером транспорту в особливому порядку. База даних черг є звичайною базу ESE. Черги знаходяться тільки на mailbox або на edge transport серверах (тут залежить від версії Exchange, так як в 2013, 2016 і 2019 архітектура різниться). Розташування бази даних черг і її транзакційних логів вказує в конфігураційному XML файлі % ExchangeInstallPath% Bin EdgeTransport.exe.config (QueueDatabasePath і QueueDatabaseLoggingPath). Якщо база черг і її транзакційні логи займає дуже багато місця, ви можете перенести її з дефолтного каталогу %ExchangeInstallPath%TransportRolesdataQueue на інший диск (ось тут це описано досить докладно 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 логів відправки / отримання (Журнали протоколів) Через EAC: Servers -> servers -> виберіть сервер -> Transport Logs -> Protocol log.

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

Якщо потрібно змінити каталог зберігання логів відстеження Відстеження повідомлень, змініть значення в полі шляху до журналу відстеження повідомлень в EAC.

Також за допомогою символічних посилань ви можете спокійно перенаправити будь-який з каталогів транспортних логів на інший диск або навіть мережеву папку (по UNC шляху). Щоб створити символічне посилання, використовується вбудована утиліта mklink:
mklink /d "D:ReceiveSMTPLogs" \meskffs01exchangeHubReceiveSMTPLog

Залишиться тільки змінити шлях до каталогу з балками за допомогою командлета:

Set-TransportService meskexch1 –ReceiveProtocolLogPath “D:ReceiveSMTPLosg”

Таким чином ви можете зберігати будь-які інші транспортні логи в мережевій теці на віддаленому сервері.

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

В логах IIS накопичується інформація про підключення до поштових скриньок Exchange через OWA і ActiveSync. Згодом логи IIS, що генеруються користувачами при доступі до Exchange, можуть займати досить багато місця.

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

Залишилося створити нове завдання за розкладом, яке повинно запускати ваш PS1 скрипт очищення логів.

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

  1. Відкрийте консоль IIS Manager і виберіть Веб-сайт за замовчуванням;
  2. Перейдіть в секцію Лісозаготівля;
  3. Змініть шлях до каталогу, в якому за замовчуванням зберігаються логи IIS (каталог); змінити шлях до логам IIS в Exchnage Server, очистити старі логи
  4. Збережіть зміни і запустіть IIS. Після цього IIS почне писати логи в інший каталог.

Також можна змінити шлях до логам IIS через PowerShell:

Import-Module WebAdministration
Set-ItemProperty ‘IIS:SitesDefault 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 FilesMicrosoftExchange ServerV15Logging’,’C:inetpublogs’ -Directory | gci -Include ‘*.log’,’*.blg’ -Recurse | ? LastWriteTime -lt (Get-Date).AddDays(-21) | Remove-Item
gci ‘C:Program FilesMicrosoftExchange ServerV15LoggingDiagnostics’ -Directory | gci -Include ‘*.log’,’*.blg’ -Recurse | ? LastWriteTime -lt (Get-Date).AddDays(-5) | Remove-Item

Можна додати ці команди в завдання Task Scheduler.

PowerShell скрипт очищення логів Exchange

Можна об’єднати всі розглянуті вище команди для очищення старих балок Exchange в один PowerShell скрипт, який потрібно запускати за розкладом:

$days = 15
$dirs=@(
"C:inetpublogsLogFiles",
"C:Program FilesMicrosoftExchange ServerV15Logging",
"C:Program FilesMicrosoftExchange ServerV15BinSearchCeresDiagnosticsETLTraces",
"C:Program FilesMicrosoftExchange ServerV15BinSearchCeresDiagnosticsLogs",
"C:Program FilesMicrosoftExchange ServerV15TransportRolesLogs"
)
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"

Leave a Reply

Your email address will not be published. Required fields are marked *