Веб сервер 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):
- запустіть Task Scheduler
- У правій панелі Action клацніть по Create Basic Task
- Вкажіть ім'я завдання: CleanIISLog
- Налаштуємо завдання на щотижневий запуск по суботах
- Запускається програма: powershell.exe
- аргументи: -NoProfile -command «gci 'C: \ inetpub \ logs' -Include '* .log' -Recurse | ? LastWriteTime -LT (Get-Date) .AddDays (-7) | Remove-Item »
- Тепер відкрийте властивості створеного завдання
- Вкажіть, що завдання буде запускатися з-під Системи (NT AUTHORITY \ System) і поставте чекбокс Run with highest privileges
- Протестуйте завдання, клацнувши по ньому ПКМ і вибравши Run
- Переконайтеся, що всі лог файли старше 7 днів автоматично видалені
Порада. Ще один спосіб "швидко" зменшити розмір логів, коли видаляти їх з якихось причин не можна - включити NTFS стиснення на каталозі з балками. Оскільки логи є текстові файли, тиснуться вони досить сильно (в 4 -5 разів). Щоб включити NTFS компресію, відкрийте властивості папки з логами і натисніть на кнопку Advanced. відзначте галку Compress contents to save disk space і двічі натисніть OK.