Wie richte ich IIS zum Drehen von Protokollen ein?

21

Ich habe Apache jahrelang benutzt und ich habe angenommen, dass es für mich die Protokollrotation übernimmt. Ich habe die IIS-Konfiguration durchgearbeitet und gegoogelt, aber ich kann keine Option für IIS finden, um die Protokollrotation zu aktivieren.

Was ist die bevorzugte Methode zum Konfigurieren von IIS zum Löschen von Protokollen ab einem bestimmten Schwellenwert? Gibt es Produkte, die dies für Sie tun? Was machen Windows-Shops für Unternehmen?

Konfiguration: IIS 6.0 / Windows Server 2003 32-Bit

Elijah
quelle
Eine sehr gute Frage. IIS verfügt zwar über eine Rotation, kann jedoch weder bereinigen noch archivieren. Ich verstehe nicht, warum ein Produkt, das in anderen Bereichen so ausgereift ist, ein solches Grundmerkmal vermissen würde. In der Standardkonfiguration begeht IIS Selbstmord, indem das Stammlaufwerk mit Protokollen gefüllt wird. (Ich denke, dasselbe gilt für SQL und seine Transaktionsprotokolle.)
Nathan Hartley

Antworten:

11

Es gibt keinen eingebauten Mechanismus für die Protokollrotation oder -archivierung. Möglicherweise gibt es Produkte von Drittanbietern, die diese Aufgabe erledigen, oder Sie können ein Skript erstellen und eine geplante Aufgabe konfigurieren. Ich habe nur eine Handvoll IIS-Server, daher habe ich gerade eine wiederkehrende Aufgabe in Outlook eingerichtet, um mich monatlich daran zu erinnern, IIS-Protokolldateien zu löschen, die älter als 30 Tage sind.

Joeqwerty
quelle
5
Das hört sich schmerzhaft an. Versuchen Sie, dies zu planen ... Get-ChildItem E: \ log * -Include ex * .log -Recurse | Where-Object {$ _. LastWriteTime -lt (Get-Date) .AddDays (-30)} | Artikel entfernen
Nathan Hartley
5

Schauen Sie sich das IIS-Protokolltool an ( http://www.iislogs.com/ ). Es gibt verschiedene Möglichkeiten, dies zu installieren, und die Verwaltung von IIS- und anderen Protokolldateien ist sehr effektiv (Komprimieren von Dateien in das ZIP-Format, Verschieben an einen anderen Speicherort, Löschen von Dateien nach einem bestimmten Datum usw.).

rauben
quelle
1

Richten Sie eine geplante Aufgabe für die Verwendung von Robocopy ein, um die Dateien in ein Unterverzeichnis mit dem Namen "old" zu kopieren. Es hat einen Schalter, / minage: x, den Sie auf 30,60 einstellen können, oder was auch immer Sie fühlen. Dann löschen Sie alles in diesem Verzeichnis. Ich mache es auf ein paar Dutzend Servern so, und es scheint den Trick zu tun.

Chris
quelle
0

Die anderen Antworten sind gut und bieten eine robustere Lösung für dieses Problem. Wenn Sie nur eine schnelle Lösung benötigen, können Sie CCleaner so einrichten, dass Ihr Protokollordner bei jeder Anmeldung oder nach einem Zeitplan automatisch bereinigt wird.

Beachten Sie jedoch, dass dadurch alle Protokolle gelöscht werden und nicht nur veraltete Dateien.

Ich habe diese Anweisungen befolgt , aber hinzugefügt, dass ich wollte, dass es auch dann ausgeführt wird, wenn der Benutzer abgemeldet ist, wie es auf einem Server im Normalfall der Fall ist.

Michael Haren
quelle
0

Dieselbe Frage habe ich kürzlich im Powershell.org-Forum gestellt . Anschließend wurde ein Hack einer Skriptressource für die gewünschte Statuskonfiguration veröffentlicht, mit der ich meinen Bedarf an einer Protokolllöschroutine behebe. Vielleicht ist ein Teil dieses Codes für andere nützlich.

# Requires an E: drive.

configuration LogDirectory
{
    param (
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string[]]$Node
    )
    node $Node
    {
        Script LogDirectoryScript
        {
            GetScript = {
                $result = (Test-Path 'E:\log') -and (schtasks.exe /query /TN Purge_Log_Folder | Select-String Purge_Log_Folder -Quiet)
                return @{
                    GetScript = $GetScript
                    SetScript = $SetScript
                    TestScript = $TestScript
                    Result = $result
                }
            }

            SetScript = {
                Write-Verbose 'Creating log directory.'
                if ( -not (Test-Path 'E:\log')) { 
                    New-Item -ItemType Directory -Path 'E:\log'
                }

                Write-Verbose 'Changing permissions to log directory such that any user can write, but only an administrator can read or modify.'
                $acl = (Get-Item 'E:\log').GetAccessControl('Access')
                $acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule('Users','Write', 'Allow')))
                Set-Acl -Path 'E:\log' -AclObject $acl | Out-Host

                Write-Verbose 'Scheduling purge task.'
                $script = 'Get-ChildItem E:\log\* -Include ex*.log -Recurse  | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-7)} | Remove-Item'
                Set-Content -Path C:\Windows\Purge_Log_Folder.ps1 -Value $script
                $task = 'Powershell.exe -NoProfile -ExecutionPolicy RemoteSigned -File C:\Windows\Purge_Log_Folder.ps1'
                SCHTASKS /CREATE /TN Purge_Log_Folder /TR $task /SC DAILY /ST 23:59 /RU SYSTEM /F | Out-Host

                Write-Verbose 'Configuring IIS'
                # Default Log File Settings for Web Sites <logFile>
                # http://www.iis.net/configreference/system.applicationhost/sites/sitedefaults/logfile
                Import-Module WebAdministration
                Set-WebConfigurationProperty '/system.applicationHost/sites/siteDefaults' -name logFile -value @{
                    directory = 'E:\log'
                    localTimeRollover ='true'
                    period = 'Hourly'
                }
            }

            TestScript = {
                (Test-Path 'E:\log') -and (schtasks.exe /query /TN Purge_Log_Folder | Select-String Purge_Log_Folder -Quiet)
            }
        }
    }
} 
LogDirectory
Nathan Hartley
quelle
0

IIS 7 führt eine Konfiguration zum regelmäßigen Löschen von Protokolldateien ein. Weitere Informationen finden Sie unter periodden folgenden Links:

http://www.iis.net/configreference/system.applicationhost/log/centralbinarylogfile

http://www.iis.net/configreference/system.applicationhost/log/centralw3clogfile

fernacolo
quelle
1
Ich glaube nicht, dass diese Funktion Protokolldateien löscht, sondern nur den Zeitraum für die Erstellung einer neuen Protokolldatei angibt, dh täglich, stündlich usw. Das von Ihnen verknüpfte Dokument definiert den Zeitraum als "Gibt an, wie oft die aktuelle Protokolldatei geschlossen wird und" Eine neue Protokolldatei wird gestartet. " Es wird keine Löschung erwähnt.
Somantra
0

Sie können dies mit einer geplanten Aufgabe und einer Stapeldatei tun.

forfiles -p "C:\Path\To\Log\Files" -m *.* /D -30 /C "cmd /c del @path"
Davin Studer
quelle