Comment configurer IIS pour faire pivoter les journaux?

21

J'utilise Apache depuis des années et j'ai pris pour acquis qu'il gère la rotation des journaux pour moi. J'ai fouillé dans la configuration IIS et googlé, mais je ne trouve pas d'option pour IIS pour activer la rotation des journaux.

Quelle est la meilleure façon de configurer IIS pour supprimer les journaux au-delà d'un certain seuil? Y a-t-il des produits qui font cela pour vous? Que font les boutiques Windows d'entreprise?

Configuration: IIS 6.0 / Windows Server 2003 32 bits

Elijah
la source
Une très bonne question. IIS a une rotation, mais ne gère pas la purge ni l'archivage. Je ne comprends pas pourquoi un produit, si mature dans d'autres domaines, manquerait une telle fonctionnalité de base. Avec la configuration par défaut, IIS se suicide en remplissant le lecteur racine avec des journaux. (Je suppose que la même chose peut être dite pour SQL et ses journaux de transactions.)
Nathan Hartley

Réponses:

11

Il n'y a pas de mécanisme intégré pour gérer la rotation ou l'archivage des journaux. Il peut y avoir des produits tiers pour gérer cette tâche ou vous pouvez créer un script et configurer une tâche planifiée. Je n'ai qu'une poignée de serveurs IIS, je viens donc de configurer une tâche récurrente dans Outlook pour me rappeler chaque mois de supprimer les fichiers journaux IIS de plus de 30 jours.

joeqwerty
la source
5
Cela semble douloureux. Essayez de planifier ceci ... Get-ChildItem E: \ log * -Include ex * .log -Recurse | Where-Object {$ _. LastWriteTime -lt (Get-Date) .AddDays (-30)} | Remove-Item
Nathan Hartley
5

Jetez un œil à l'outil IIS Logs ( http://www.iislogs.com/ ). Il existe plusieurs façons d'installer cela et fait un travail très efficace pour gérer IIS et d'autres fichiers journaux (compresser des fichiers au format .zip, les déplacer vers différents emplacements, supprimer des fichiers après une certaine date, etc.).

Rob
la source
1

Configurez une tâche planifiée pour utiliser robocopy pour copier les fichiers dans un sous-répertoire nommé "old". Il a un commutateur, / minage: x que vous pouvez régler sur 30,60, ou tout ce que vous ressentez. Ensuite, supprimez tout dans ce répertoire. Je le fais de cette façon sur quelques dizaines de serveurs, et cela semble faire l'affaire.

Chris
la source
0

Les autres réponses sont bonnes et offrent une solution plus robuste à ce problème. Si vous avez juste besoin d'une solution rapide, vous pouvez configurer CCleaner pour nettoyer automatiquement votre dossier de journaux à chaque connexion ou selon un calendrier.

Gardez à l'esprit, cependant, que cela supprime tous les journaux, pas seulement les fichiers vieillissants.

J'ai suivi ces instructions mais j'ai ajouté que je voulais qu'il s'exécute même lorsque l'utilisateur était déconnecté, comme c'est le cas normalement sur un serveur.

Michael Haren
la source
0

J'ai récemment posé cette même question sur le forum Powershell.org . Puis j'ai fini par publier un hack d'une ressource de script pour la configuration de l'état souhaité, que j'utiliserai pour résoudre mon besoin d'une routine de purge des journaux. Peut-être qu'une partie de ce code sera utile à d'autres.

# 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
la source
0

IIS 7 introduit une configuration pour supprimer périodiquement les fichiers journaux. Pour plus d'informations, consultez periodles liens suivants:

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

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

fernacolo
la source
1
Je ne pense pas que cette fonctionnalité supprime les fichiers journaux, elle spécifie uniquement la période de création d'un nouveau fichier journal, c'est-à-dire tous les jours, toutes les heures, etc. Le document que vous avez lié définit la période comme "Spécifie la fréquence à laquelle le fichier journal actuel est fermé et un nouveau fichier journal est démarré. " Il n'est fait aucune mention de suppression.
Somantra
0

Vous pouvez le faire avec une tâche planifiée et un fichier de commandes.

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