Автоматическая очистка логов 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%\system32\LogFiles\ и в Windows Server 2008 / 2012 /R2 в папке %SystemDrive%\inetpub\logs\LogFiles\.

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

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

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

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

gci ‘C:\inetpub\logs -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:\inetpub\logs’ -Include ‘*.log’ -Recurse | ? LastWriteTime -LT (Get-Date).AddDays(-7) | Remove-Item»
  7. Теперь откройте свойства созданного задания
  8. Укажите, что задание будет запускаться из-под Системы (NT AUTHORITY\System) и поставьте чекбокс Run with highest privileges
  9. Протестируйте задание, щелкнув по нему ПКМ и выбрав Run
  10. Убедитесь, что все лог файлы старше 7 дней автоматически удалены

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


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


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

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

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

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