null

Автоматическая очистка логов Exchange

После продолжительной работы Exchange сервера при включенных логах, занимаемый ими объём может возрасти до приличных объёмов.
Как избежать такой ситуации?

Файлы журналов находятся по пути C:\Program Files\Microsoft\Exchange Server\V15\Logging\ и разделены по модулям их генерирующим.
За некоторое время работы на двух серверах сложилась следующая ситуация:

18 742 686 691 # HttpProxy
5 362 957 762 # Ews
5 359 635 353 # MapiHttp
4 974 915 687 # Diagnostics
4 361 686 626 # lodctr_backups
4 230 610 944 # Query
2 243 176 410 # Monitoring
2 148 606 458 # MailboxAssistantsLog
1 480 334 759 # CmdletInfra
1 391 080 595 # ConversationAggregationLog
1 144 418 851 # RpcHttp
   930 568 109 # ContactChangeLogging
   708 824 888 # Autodiscover
   499 310 387 # ADDriver
   351 151 701 # ECP
   347 268 564 # RPC Client Access
   195 597 234 # MailboxAssistantsSlaReportLog
   159 291 169 # Search
 4 488 258 360 # lodctr_backups
 4 484 763 914 # Diagnostics
 3 123 531 496 # Monitoring
 2 338 053 058 # HttpProxy
 1 308 655 364 # CmdletInfra
   782 665 278 # RpcHttp
   220 290 663 # MapiHttp
   174 063 616 # Query
   124 367 273 # ADDriver

Общий объём составлял 51 и 17 ГБ.

После поиска информации по базам знаний, стало понятно, что встроенного сервиса очистки логов у Exchange нет и многие просто напросто отключают ведение логов.
Это, конечно, имеет свои последствия и в целом не рекомендуется.
Что же тогда делать?

Решено было написать небольшой скрипт на PowerShell и запускать его Планировщиком задач.

Скрипт для очистки файлов журналов

$dirs=@(
"C:\Program Files\Microsoft\Exchange Server\V15\Logging\HttpProxy",
"C:\Program Files\Microsoft\Exchange Server\V15\Logging\Ews",
"C:\Program Files\Microsoft\Exchange Server\V15\Logging\MapiHttp",
"C:\Program Files\Microsoft\Exchange Server\V15\Logging\Diagnostics",
"C:\Program Files\Microsoft\Exchange Server\V15\Logging\Query"
)
Get-ChildItem $dirs -Recurse -File | ? LastWriteTime -lt (Get-Date).AddDays(-14) | Remove-Item -ErrorAction "SilentlyContinue"

Скрипт рекурсивно обходит указанные каалоги и выбирает из них только обычные файлы (не каталоги), далее происходи фильтрация по времени модификации - остаются логи только старше двух недель, и затем эти файлы удаляются, причём, если удалить не получается - файл пропускается.

Создание задачи в планировщике

Сохраним полученный скрипт, например, в C:\Scripts\Exchange-CleanupLogs.ps1
Создадим задачу со следующими параметрами:

Программа: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe 
Аргументы: -File "C:\Scripts\Exchange-CleanupLogs.ps1"
Учётная запись пользователя для запуска: SYSTEM (или СИСТЕМА)