¿Cómo configuro IIS para rotar registros?

21

He usado Apache durante años y he dado por sentado que maneja la rotación de registros por mí. He estado investigando la configuración de IIS y buscando en Google, pero no puedo encontrar una opción para que IIS active la rotación de registros.

¿Cuál es la forma preferida de configurar IIS para eliminar registros que superen cierto umbral? ¿Hay algún producto que haga esto por usted? ¿Qué hacen las tiendas emprendedoras de Windows?

Configuración: IIS 6.0 / Windows Server 2003 de 32 bits

Elijah
fuente
Una muy buena pregunta. IIS tiene rotación, pero no maneja la purga ni el archivado. No entiendo por qué un producto, tan maduro en otras áreas, carecería de una característica tan básica. Con la configuración predeterminada, IIS se suicida al llenar la unidad raíz con registros. (Supongo que lo mismo puede decirse de SQL y sus registros de transacciones.)
Nathan Hartley

Respuestas:

11

No hay un mecanismo integrado para manejar la rotación de registros o el archivo. Puede haber productos de terceros para manejar esta tarea o puede escribir algo y configurar una tarea programada. Solo tengo un puñado de servidores IIS, así que configuré una Tarea recurrente en Outlook para recordarme mensualmente que elimine los archivos de registro IIS anteriores a 30 días.

joeqwerty
fuente
55
Eso suena doloroso. Intente programar esto ... Get-ChildItem E: \ log * -Include ex * .log -Recurse | Where-Object {$ _. LastWriteTime -lt (Get-Date) .AddDays (-30)} | Remove-Item
Nathan Hartley
5

Eche un vistazo a la herramienta de registros de IIS ( http://www.iislogs.com/ ). Hay un par de formas diferentes de instalar esto y hace un trabajo muy eficaz en la administración de IIS y otros archivos de registro (comprimir archivos a formato .zip, moverlos a diferentes ubicaciones, eliminar archivos después de una determinada fecha, etc.).

Robar
fuente
1

Configure una tarea programada para usar robocopy para copiar los archivos a un subdirectorio llamado "antiguo". Tiene un interruptor, / minage: x que puedes establecer en 30,60, o lo que sientas. Luego elimine todo en ese directorio. Lo hago de esta manera en un par de docenas de servidores, y parece que funciona.

Chris
fuente
0

Las otras respuestas son buenas y ofrecen una solución más sólida para este problema. Si solo necesita una solución rápida, puede configurar CCleaner para que limpie automáticamente su carpeta de registros cada vez que inicie sesión o en un horario.

Sin embargo, tenga en cuenta que esto elimina todos los registros, no solo los archivos antiguos.

Seguí estas instrucciones, pero agregué que quería que se ejecutara incluso cuando el usuario estaba desconectado, como es el caso normal en un servidor.

Michael Haren
fuente
0

Recientemente planteé esta misma pregunta en el foro Powershell.org . Luego terminé publicando un truco de un Recurso de script para la configuración de estado deseada, que usaré para resolver mi necesidad de una rutina de purga de registros. Quizás parte de este código sea útil para otros.

# 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
fuente
0

IIS 7 introduce una configuración para eliminar periódicamente archivos de registro. Para más información mira perioden los siguientes enlaces:

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

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

fernacolo
fuente
1
No creo que esta función elimine archivos de registro, solo especifica el período para la creación de un nuevo archivo de registro, es decir, diario, por hora, etc. El documento que vinculó define el período como "Especifica con qué frecuencia se cierra el archivo de registro actual y se inicia un nuevo archivo de registro ". No se menciona la eliminación.
Somantra
0

Puede hacer esto con una tarea programada y un archivo por lotes.

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