Automaticky čistit protokoly IIS pomocí PowerShell

Webový server IIS (Internet Information Services) generuje v procesu poměrně velké množství protokolů, které se zapisují do souborů protokolu. Hlavním problémem je, že ve výchozím nastavení jsou protokoly služby IIS umístěny na systémovém disku a v průběhu času mohou soubory protokolu ucpat veškerý dostupný diskový prostor a operace serveru bude paralyzována. Například v mém případě na serveru Exchange Server 2013 s téměř 1 000 poštovními schránkami služba IIS generuje 200 MB soubor protokolu denně. V roce tedy budou soubory protokolu IIS zabírat 70 GB místa na disku. Je možné tyto procesy nějakým způsobem ovládat?

Služba IIS nemá žádný vestavěný postup střídání protokolu IIS, takže správci si musí vymyslet vlastní schémata pro automatické střídání nebo mazání protokolů IIS na webových serverech.

Nejprve musí správce v zásadě rozhodnout, zda jsou protokoly, které generuje IIS, vůbec potřeba. Pokud je otázka záporná - protokolování protokolů lze zakázat v nastavení webu v konzole Správce internetových informačních služeb (IIS) v sekci Protokolování. V některých případech je také možné použít přenos souborů protokolu ze systémového disku na datový disk / vyhrazený disk. Chcete-li to provést, ve stejné části jednoduše změňte cestu k adresáři LogFiles.

Ve výchozím nastavení jsou tedy v systému Windows Server 2003 protokoly služby IIS ukládány do složky%windir% \ system32 \ LogFiles \ a ve Windows Server 2008/2012 / R2 ve složce % SystemDrive% \ inetpub \ logs \ LogFiles \.

V případě vyčerpání volného místa na systémovém disku se správce zoufale snaží najít, s čím je disk ucpaný, a bezpečně nevěnuje pozornost adresáři inetpub, protože na první pohled je jeho velikost zanedbatelná. Problém je, že ve výchozím nastavení správce nemá oprávnění k zobrazení standardních adresářů uvnitř složky inetpub, a proto Průzkumník Windows nezobrazuje skutečnou velikost podsložek.

Pokud se pokusíte otevřít adresář% SystemDrive% \ inetpub \ logs \ LogFiles a potvrdit, že jsou přiřazena potřebná oprávnění (nebo spustit Průzkumník s oprávněními správce), můžete vidět, že velikost složky protokolu je ve skutečnosti poměrně velká.

Zpravidla můžete bezpečně odstranit všechny soubory protokolu starší než 3-7 dní. To lze provést ručně (nikoli nejlepší možností) nebo automaticky pomocí skriptu PowerShell, který odstraní staré soubory protokolu podle plánu.

Jednoduchý skript PowerShell, který bude rekurzivně mazat soubory s příponou * .log z adresáře C: \ inetpub \ logs, může vypadat takto:

gci 'C: \ inetpub \ logs -Include' * .log '-Recurse | ? LastWriteTime -LT (Get-Date) .AddDays (-7) | Odebrat položku

Chcete-li skript spustit automaticky, můžete v plánovači vytvořit následující úkol (Plánovač úloh):

  1. Běh Plánovač úloh
  2. V pravém podokně Akce klikněte na Vytvořte základní úkol
  3. Zadejte název úlohy: CleanIISLog
  4. V sobotu nastavte týdenní spouštěcí úkol
  5. Zahájený program: powershell.exe
  6. Argumenty: -NoProfile - příkaz "gci" C: \ inetpub \ logs '-Include' * .log '-Recurse | ? LastWriteTime -LT (Get-Date) .AddDays (-7) | Odebrat položku »
  7. Nyní otevřete vlastnosti vytvořené úlohy
  8. Určete, že úloha bude spuštěna z okna System (NT AUTHORITY \ System) a zaškrtněte políčko Běh s nejvyššími oprávněními
  9. Vyzkoušejte úlohu kliknutím na ni pomocí RMB a výběrem Běh
  10. Ujistěte se, že všechny soubory protokolu starší než 7 dní jsou automaticky odstraněny

Tip. Dalším způsobem, jak "rychle" zmenšit velikost protokolů, když je nelze z nějakého důvodu odstranit, je povolení komprese NTFS v adresáři protokolu. Protože protokoly jsou jednoduché textové soubory, jsou velmi silně komprimovány (4-5krát). Chcete-li povolit kompresi NTFS, otevřete vlastnosti složky protokolu a klikněte na tlačítko Upřesnit. Zaškrtněte políčko Komprimováním obsahu ušetříte místo na disku a dvakrát klikněte na OK.