В наши дни в IIS установлено так много наворотов, что может быть трудно найти панель настроек, которая делает то, что вы от нее хотите (или если вы такой же парень, как IIS 5/6, как я, вы можете просто потеряться раз). Единственное, чего не хватает в качестве функции в IIS, — это переработка файлов журнала. Если вы управляете установкой IIS любого приличного размера, вы из первых рук узнаете, как быстро файлы журнала могут заполнить жесткий диск сервера и поставить его на колени, если с ним не справиться должным образом — как мне позаботиться об этом?
В чем проблема?
IIS создает новый файл журнала каждый день и заполняет его информацией о каждом запросе, который он обслуживал.
Пример файла журнала:
2011-01-22 00:00:00 192.168.1.1 GET /1893/1181.png - 80 - 118.208.178.247 Mozilla/5.0+(Windows;+U;+Windows+NT+5.1;+en-US;+rv:1.9.2.13)+Gecko/20101203+Firefox/3.6.13+(+.NET+CLR+3.5.30729) 404 0 2 562 2011-01-22 00:00:00 192.168.1.1 GET /1894/1180.png - 80 - 118.208.178.247 Mozilla/5.0+(Windows;+U;+Windows+NT+5.1;+en-US;+rv:1.9.2.13)+Gecko/20101203+Firefox/3.6.13+(+.NET+CLR+3.5.30729) 200 0 0 593 2011-01-22 00:00:00 192.168.1.1 GET /1894/1181.png - 80 - 118.208.178.247 Mozilla/5.0+(Windows;+U;+Windows+NT+5.1;+en-US;+rv:1.9.2.13)+Gecko/20101203+Firefox/3.6.13+(+.NET+CLR+3.5.30729) 200 0 0 593 2011-01-22 00:00:00 192.168.1.1 GET /1892/1180.png - 80 - 118.208.178.247 Mozilla/5.0+(Windows;+U;+Windows+NT+5.1;+en-US;+rv:1.9.2.13)+Gecko/20101203+Firefox/3.6.13+(+.NET+CLR+3.5.30729) 404 0 2 593
В зависимости от типов сайтов, которые вы размещаете, вам может понадобиться хранить эти файлы журналов только в течение определенного периода времени, например, 30 или 60 дней. Очевидно, вам нужно взвесить это число в зависимости от ваших обстоятельств, принимая во внимание все возможные причины, по которым вы, возможно, захотите сохранить свои файлы журналов:
- Запускаете ли вы программы статистики трафика, требующие от ваших журналов более 60 дней, чтобы увидеть тренды и т. Д.?
- Нужно ли вам хранить журналы в течение определенного периода времени для проведения аудита безопасности в случае хакера / порчи?
В большинстве случаев я считаю, что 30–60 дней — это оптимальное время для хранения файлов журналов IIS ваших серверов, так как в случае инцидента, такого как вторжение в систему безопасности, вы будете знать, что вам нужно просмотреть журналы до того, как в любом случае, это 60-дневный период, так как в большинстве случаев будет совершенно ясно, что что-то произошло, и что ваш файл журнала нуждается в проверке, задним числом (очевидно, это не лучший способ узнать о вторжении, но я говорю от контекст управления файлами журналов).
Таким образом, решение, которое нам действительно нужно, — это способ удаления старых журналов IIS один раз в день в зависимости от даты их последнего изменения. Эта простая функциональность была бы отличной маленькой функцией для добавления в IIS, но в ее нынешнем виде не похоже, что это произойдет в ближайшее время.
Потенциальное решение
Много лет назад, когда я работал над управлением сетевой инфраструктурой, я столкнулся с простым VBScript, написанным парнем, который работал под именем просто MAK , с тех пор я видел много мест — я потерял сайт оригинальных авторов, так что если Вы знаете об этом, дайте мне знать, комментируя ниже. Что нужно сделать, это взять каталог (и его рекурсивные дочерние элементы), число, обозначающее самые старые файлы, которые будут храниться по количеству дней, и путь к файлу журнала, в который будут записаны все его выходные данные.
Начните с копирования приведенного ниже сценария в блокнот и сохранения его как LogFileCleaner.vbs . Вы можете поместить это в любом месте, если вы обновите любые пути, показанные ниже в дальнейших шагах.
Для ясности я буду размещать мой по пути C: \ LogCleaner \
' Objective: To delete old files from a given folder and all subfolders below ' ' Created by: MAK June 21, 2005 ' ' Format: cscript deloldfiles.vbs {DriveLetter:\FolderName} {#ofDays} ' or: cscript deloldfiles.vbs {\\servername\FolderName} {#ofDays} ' Example: cscript deloldfiles.vbs c:\dba\log 3 ' (deletes files older than 3 days from the \dba\log file on drive C:) Set objArgs = WScript.Arguments FolderName =objArgs(0) Days=objArgs(1) set fso = createobject("scripting.filesystemobject") set folders = fso.getfolder(FolderName) datetoday = now() newdate = dateadd("d", Days*-1, datetoday) wscript.echo "Today:" & now() wscript.echo "Started deleting files older than :" & newdate wscript.echo "________________________________________________" wscript.echo "" recurse folders wscript.echo "" wscript.echo "Completed deleting files older than :" & newdate wscript.echo "________________________________________________" sub recurse( byref folders) set subfolders = folders.subfolders set files = folders.files wscript.echo "" wscript.echo "Deleting Files under the Folder:" & folders.path wscript.echo "__________________________________________________________________________" for each file in files if file.datelastmodified < newdate then wscript.echo "Deleting " & folders.path & "\" & file.name & " last modified: " & file.datelastmodified on error resume next ' === to test this script but not actually delete files, comment out the next line === file.delete end if next for each folder in subfolders recurse folder next set subfolders = nothing set files = nothing end sub
Теперь создайте пакетный файл, который вызывает этот VBScript со всеми путями, в которых вы храните файлы журналов, и сохраните его как CleanLogs.bat в той же папке, в которой вы создали вышеупомянутый VBScript.
Мой пример ниже устанавливает дату файла границы 60 дней назад и указывает на папку журнала iis по умолчанию (C: \ inetpub \ logs \ LogFiles) . Это удалит все файлы журнала старше 60 дней.
cscript c:\logcleaner\LogFileCleaner.vbs C:\inetpub\logs\LogFiles 60 >> c:\logcleaner\cleaner_log.log
Сохранить этот файл
Теперь нам нужно запланировать запуск этого пакетного файла, поэтому откройте планировщик заданий и щелкните в правой части меню пункт « Создать базовое задание ».
В новых окнах введите имя для вашей новой запланированной задачи — на снимке экрана ниже я называю мой «Очистка журнала IIS» и нажимаю « Далее».
Установите триггер для выполнения вашей задачи как Ежедневно и нажмите « Далее» (это может быть установлено любое расписание, которое вы хотите, однако я буду запускать мое каждый день)
Теперь введите время, когда вы хотите, чтобы этот файл журнала очищался каждый день — я установил мой на 12:00. Затем нажмите Далее
Выберите « Запустить программу » и нажмите « Далее».
Теперь нажмите « Обзор» и перейдите к BAT-файлу, который мы создали выше @ c: \ logcleaner \ cleanlogs.bat, и когда закончите, нажмите « Далее».
На следующей странице установите флажок « Открыть диалоговое окно Свойства для этой задачи, когда я нажму кнопку Готово», а затем нажмите кнопку Готово.
В новом окне нажмите кнопку с пометкой Изменить пользователя или группу рядом с областью параметров безопасности диалогового окна. Это позволяет нам указать, от какого пользователя будет запускаться задача.
Введите пользователя SYSTEM и нажмите ОК
Нажмите OK еще раз, и все готово!
Не стесняйтесь запускать задачу вручную, щелкнув ее правой кнопкой мыши и выбрав « Выполнить»
В качестве альтернативы вы можете изменить созданный на первом шаге сценарий vbscript, закомментировав строку, которая выполняет удаление, — это позволит вам запустить задачу и увидеть в файле журнала все файлы, которые будут удалены, если запускать без этой строки, закомментированной.
А теперь попробуйте какой-нибудь вкусный напиток и порадуйтесь (надеюсь), что на вашем сервере снова не останется свободного места из хранилища файлов журнала.
Некоторые идеи, чтобы пойти домой
Если вам не нравится идея «удалять» ваши файлы журналов каждые 60 дней, и вместо этого вы просто хотите переместить их из пути к файлам журналов, вы можете легко изменить приведенный выше скрипт, чтобы скопировать ваши журналы где-то вне сервера для архивации.
Кроме того, если вы используете мое расписание резервного копирования SQL EXPRESS в соответствии с моим предыдущим сообщением , вы можете использовать вышеприведенное также для очистки устаревших резервных копий базы данных, которые я создаю, так что любая резервная копия старше, чем, скажем, неделя или две, будет удалена.