Автоматическая очистка логов IIS с помощью PowerShell

Автоматическая очистка логов IIS с помощью PowerShell

Веб сервер IIS (Internet Information Services) в процессе работы генерирует довольно большое количество логов, которые пишутся в файлы журналов. Основная проблема в том, что по-умолчанию журналы IIS расположены на системном диске, и со временем файлы логов могут забить все доступное место на диске и работа сервера будет парализована. К примеру, в моем случае на Exchange Server 2013 с почти 1000 ящиков, IIS генерирует за день лог-файл порядком 200 Мб. Таким образом, за год, файлы логов IIS будут занимать 70 Гб дискового пространства. Можно ли как-то управлять эти процессом?

В IIS отсутствует какая-либо встроенная процедура ротации логов IIS, поэтому администраторам приходится выдумывать собственные схемы для автоматической ротации или удаления журналов IIS на веб серверах.

В первую очередь администратор должен в принципе решить, нужны ли вообще логи, которые генерирует IIS. Если вопрос отрицательный – ведение журналов логов можно отключить в настройках сайта в консоли Internet Information Services (IIS) Manager в разделе Logging. В некоторых случая также применим перенос файлов журналов с системного диска на диск с данными/выделенный диск. Для этого в том же разделе достаточно изменить путь к каталогу LogFiles.

Так по-умолчанию, в Windows Server 2003 логи IIS хранятся в папке %windir%system32LogFiles и в Windows Server 2008 / 2012 /R2 в папке %SystemDrive%inetpublogsLogFiles.

d0b0d0b2d182d0bed0bcd0b0d182d0b8d187d0b5d181d0bad0b0d18f d0bed187d0b8d181d182d0bad0b0 d0bbd0bed0b3d0bed0b2 iis d181 d0bfd0bed0bcd0bed189 65d23b8c0c8b0

В случае исчерпания свободного места на системно диске, администратор судорожно пытается найти чем забит диск, и благополучным образом не обращает внимание на каталог inetpub, т.к. на первый взгляд его размер незначителен. Проблема в том, что по умолчанию у администратора нет прав на просмотр стандартных каталогов внутри папки inetpub, и таким образом проводник Windows не показывает реальный размер вложенных папок.

d0b0d0b2d182d0bed0bcd0b0d182d0b8d187d0b5d181d0bad0b0d18f d0bed187d0b8d181d182d0bad0b0 d0bbd0bed0b3d0bed0b2 iis d181 d0bfd0bed0bcd0bed189 65d23b8cc296c

Если попытаться открыть каталог %SystemDrive%inetpublogsLogFiles, подтверждая назначение необходимых разрешений (или запустить проводник с правами администратора), можно увидеть, что на самом деле размер папки с логами довольно велик.

d0b0d0b2d182d0bed0bcd0b0d182d0b8d187d0b5d181d0bad0b0d18f d0bed187d0b8d181d182d0bad0b0 d0bbd0bed0b3d0bed0b2 iis d181 d0bfd0bed0bcd0bed189 65d23b8d0821b

Как правило, можно безопасно удалить все файлы логов старше 3-7 дней. Это можно сделать вручную (не самый лучший вариант), либо автоматически с помощью скрипт PowerShell который будет удалять старые лог файлы по расписанию.

Простой PowerShell скрипт, который будет рекурсивно удалять файлы с расширением *.log из каталога C:inetpublogs может быть таким:

gci ‘C:inetpublogs -Include ‘*.log’ -Recurse | ? LastWriteTime -LT (Get-Date).AddDays(-7) | Remove-Item

Для автоматического запуска скрипта можно создать такое задание в планировщике (Task Scheduler):

  1. Запустите Task Scheduler
  2. В правой панели Action щелкните по Create Basic Task
  3. Укажите имя задания: CleanIISLog
  4. Настроим задание на еженедельный запуск по субботам
  5. Запускаемая программа: powershell.exe
  6. Аргументы: —NoProfile -command «gci ‘C:inetpublogs’ -Include ‘*.log’ -Recurse | ? LastWriteTime -LT (Get-Date).AddDays(-7) | Remove-Item»
    d0b0d0b2d182d0bed0bcd0b0d182d0b8d187d0b5d181d0bad0b0d18f d0bed187d0b8d181d182d0bad0b0 d0bbd0bed0b3d0bed0b2 iis d181 d0bfd0bed0bcd0bed189 65d23b8d4d4d1
  7. Теперь откройте свойства созданного задания
    d0b0d0b2d182d0bed0bcd0b0d182d0b8d187d0b5d181d0bad0b0d18f d0bed187d0b8d181d182d0bad0b0 d0bbd0bed0b3d0bed0b2 iis d181 d0bfd0bed0bcd0bed189 65d23b8da8ba3
  8. Укажите, что задание будет запускаться из-под Системы (NT AUTHORITYSystem) и поставьте чекбокс Run with highest privilegesd0b0d0b2d182d0bed0bcd0b0d182d0b8d187d0b5d181d0bad0b0d18f d0bed187d0b8d181d182d0bad0b0 d0bbd0bed0b3d0bed0b2 iis d181 d0bfd0bed0bcd0bed189 65d23b8e22352
  9. Протестируйте задание, щелкнув по нему ПКМ и выбрав Run
    d0b0d0b2d182d0bed0bcd0b0d182d0b8d187d0b5d181d0bad0b0d18f d0bed187d0b8d181d182d0bad0b0 d0bbd0bed0b3d0bed0b2 iis d181 d0bfd0bed0bcd0bed189 65d23b8ea96ef
  10. Убедитесь, что все лог файлы старше 7 дней автоматически удалены

Совет. Еще один способ «быстро» уменьшить размер логов, когда удалять их по каким-то причинам нельзя – включить NTFS сжатие на каталоге с логами. Т.к. логи представляют собой простые текстовые файлы, жмутся они довольно сильно (в 4 -5 раз). Чтобы включить NTFS компрессию, откройте свойства папки с логами и нажмите на кнопку Advanced. Отметьте галку Compress contents to save disk space и дважды нажмите OK.

d0b0d0b2d182d0bed0bcd0b0d182d0b8d187d0b5d181d0bad0b0d18f d0bed187d0b8d181d182d0bad0b0 d0bbd0bed0b3d0bed0b2 iis d181 d0bfd0bed0bcd0bed189 65d23b8edde83

Windows Server 2012
Автоматическая очистка логов IIS с помощью PowerShell