Automatycznie czyść dzienniki IIS przy użyciu programu PowerShell

Serwer sieci Web IIS (Internet Information Services) generuje dość dużą liczbę dzienników, które są zapisywane w plikach dziennika. Głównym problemem jest to, że domyślnie dzienniki IIS znajdują się na dysku systemowym, az czasem pliki dziennika mogą zatkać całe dostępne miejsce na dysku, a działanie serwera zostanie sparaliżowane. Na przykład w moim przypadku na Exchange Server 2013 z prawie 1000 skrzynek pocztowych, IIS generuje plik dziennika 200 MB dziennie. Tak więc za rok pliki dziennika IIS zajmą 70 GB miejsca na dysku. Czy można w jakiś sposób kontrolować te procesy??

Usługi IIS nie mają wbudowanej procedury rotacji dzienników IIS, więc administratorzy muszą wymyślić własne schematy automatycznego obracania lub usuwania dzienników IIS na serwerach internetowych.

Przede wszystkim administrator musi zasadniczo zdecydować, czy dzienniki generowane przez IIS są w ogóle potrzebne. Jeśli pytanie jest przeczące - rejestrowanie dzienników można wyłączyć w ustawieniach witryny w konsoli Menedżer internetowych usług informacyjnych (IIS) w dziale Logowanie. W niektórych przypadkach można również przesyłać pliki dziennika z dysku systemowego na dysk danych / dysk dedykowany. Aby to zrobić, w tej samej sekcji po prostu zmień ścieżkę do katalogu LogFiles.

Tak więc domyślnie w systemie Windows Server 2003 dzienniki IIS są przechowywane w folderze%windir% \ system32 \ LogFiles \ oraz w systemie Windows Server 2008/2012 / R2 w folderze % SystemDrive% \ inetpub \ logs \ LogFiles \.

W przypadku wyczerpania się wolnego miejsca na dysku systemowym administrator gorączkowo próbuje znaleźć to, z czym dysk jest zatkany, i bezpiecznie nie zwraca uwagi na katalog inetpub, ponieważ na pierwszy rzut oka jego wielkość jest znikoma. Problem polega na tym, że domyślnie administrator nie ma uprawnień do przeglądania standardowych katalogów w folderze inetpub, dlatego Eksplorator Windows nie pokazuje rzeczywistego rozmiaru podfolderów.

Jeśli spróbujesz otworzyć katalog% SystemDrive% \ inetpub \ logs \ LogFiles, potwierdzając, że przypisane są niezbędne uprawnienia (lub uruchom Eksploratora z uprawnieniami administratora), możesz zobaczyć, że rozmiar folderu dziennika jest w rzeczywistości dość duży.

Z reguły możesz bezpiecznie usunąć wszystkie pliki dziennika starsze niż 3-7 dni. Można to zrobić ręcznie (nie najlepsza opcja) lub automatycznie za pomocą skryptu PowerShell, który usunie stare pliki dziennika zgodnie z harmonogramem.

Prosty skrypt PowerShell, który rekurencyjnie usuwa pliki z rozszerzeniem * .log z katalogu C: \ inetpub \ logs, może wyglądać tak:

gci 'C: \ inetpub \ logs -Include' * .log '-Recurse | ? LastWriteTime -LT (Get-Date) .AddDays (-7) | Usuń element

Aby automatycznie uruchomić skrypt, możesz utworzyć następujące zadanie w terminarzu (Harmonogram zadań):

  1. Uruchom Harmonogram zadań
  2. W prawym okienku Akcja kliknij Utwórz podstawowe zadanie
  3. Podaj nazwę zadania: CleanIISLog
  4. Ustaw cotygodniowe uruchamianie w soboty
  5. Uruchomiony program: powershell.exe
  6. Argumenty: -NoProfile -command "gci 'C: \ inetpub \ logs' -Include '* .log' -Recurse | ? LastWriteTime -LT (Get-Date) .AddDays (-7) | Usuń element »
  7. Teraz otwórz właściwości utworzonego zadania
  8. Określ, że zadanie zostanie uruchomione z poziomu Systemu (NT AUTHORITY \ System) i zaznacz pole Uruchom z najwyższymi uprawnieniami
  9. Przetestuj zadanie, klikając je za pomocą RMB i wybierając Uruchom
  10. Upewnij się, że wszystkie pliki dziennika starsze niż 7 dni są automatycznie usuwane

Wskazówka. Innym sposobem „szybkiego” zmniejszenia rozmiaru dzienników, gdy z jakiegoś powodu nie można ich usunąć, jest włączenie kompresji NTFS w katalogu dzienników. Ponieważ logi to proste pliki tekstowe, są dość mocno skompresowane (4-5 razy). Aby włączyć kompresję NTFS, otwórz właściwości folderu dziennika i kliknij przycisk Zaawansowane. Zaznacz pole Kompresuj zawartość, aby zaoszczędzić miejsce na dysku i kliknij dwukrotnie OK.