Logrotate : faites tourner vos logs
Après quelques ennuis hier soir sur le serveur, j'ai du éplucher les logs… Ce qui m'a fait un peu halluciner en listant /var/log/
car certains fichiers sont monstrueux en taille ! syslog
, et debug
faisaient plus du giga chacun. Un fichier de cette taille ne peut donc pas décemment etre lu sans planter, il a fallu remédier à cela. De plus, l'espace disque s'en ressent fortement.
J'avais eu connaissance de logrotate il y a quelque temps, mais je n'avais pas pris le temps de le mettre en place. C'est donc le moment.
Pour l'installation, il suffit sur Frugalware de faire un petit pacman -S logrotate
. Le fichier de configuration se trouve dans /etc/logrotate.conf
et un dossier /etc/logrotate.d
est crée.
Suite à mes recherches sur le net, j'ai trouvé quelques liens intéressants que je vous livre au fil de ce billet. J'ai personnellement modifié le fichier de configuration en pompant allégrement sur ce billet :
## logrotate.conf (logrotate) # # Par FHH le 30 / 08 / 2009 # # Description # Fichier de configuration de logrotate. # # Les logs sont compréssé avant rotation : compress # Fréquence de rotation par défaut : weekly # La rotation est effectuée, par défaut, même si le fichier est vide afin de faciliter # les recherches dans les logs au jour le jour ifempty # Par défaut, une rotation par semaine est effectuée. 52 semaines par an, nous conservons donc # une profondeur de 52 semaines, ça laisse un an de log. rotate 52 # En parallèle, si une archive est agée de plus de 52 semaines, elle est détruite : maxage 52 # Envois par mail du fichier sur le point d'expirer. maillast # Le fichier sur le point d'expirer est envoyé à l'adresse définie ici. mail root@wolf.am # Si l'un des journaux décrit est manquant, aucune erreur n'est remontée. missingok # Insertion de la date dans l'archivage des journaux. dateext # Lors de l'archivage de plusieurs fichiers de logues, les scripts pre et post rotate sont # exécuté une fois par fichier. L'option "sharedscripts" fixe l'exécution de ces scripts à # une seule fois. sharedscripts # Lors d'une rotation, un fichier de remplacement est créé avec les droits 0640 appartenant à # root et au groupe root. create 0640 root root # Toutes les archives sont stockées dans /var/log/archives. olddir /mnt/backup2/log # Inclusion des scripts propres aux logs. include /etc/logrotate.d
Le fichier est suffisamment commenté pour comprendre comment il fonctionne. Une option qui est importante pour moi est de sauvegarder les rotations sur mon disque dur externe avec la fonction olddir
. Ces paramètres généraux peuvent etre surchargés par les règles spécifiques à chaque log.
En effet, le plus important maintenant est de créer les régles, que l'on placera dans le répertoire /etc/logrotate.d
. Un fichier par règle, que l'on nommera par le service affecté.
Lighttpd
/var/log/lighttpd/*.log { notifempty olddir /mnt/backup2/log/lighttpd create 640 nobody nobody postrotate systemctl restart lighttpd.service > /dev/null endscript }
Prosody
/var/log/prosody/*.log { notifempty olddir /mnt/backup2/log/prosody postrotate systemctl restart prosody.service > /dev/null endscript }
Syslog
Ce fichier est normalement déjà présent et permet de faire une rotation des logs les plus volumineux.
/var/log/cron /var/log/debug /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler /var/log/syslog { compress rotate 4 postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2>/dev/null` 2>/dev/null || true endscript }
Fail2ban
/var/log/fail2ban.log { notifempty }
Vsftpd
/var/log/vsftpd.log { notifempty postrotate systemctl restart vsftpd.service > /dev/null endscript }
Log des sites hébergés
Pour chaque domaine géré par lighttpd, je fais une rotation des logs également.
/mnt/backup1/log/lighttpd/peupleloup.info/*.log { notifempty olddir /mnt/backup2/log/lighttpd/peupleloup.info create 640 nobody nobody postrotate systemctl restart lighttpd.service > /dev/null endscript }
Test et Mise en place du Cron
Avant de valider tout ça, il vaut mieux tester ce que ça donne, comme le conseille Marius.
logrotate -d /etc/logrotate.conf
J'ai ensuite lancé logrotate en mode forcé pour me libérer de tous ces logs si volumineux avec un `` logrotate -f``. Ce qui m'a permis de gagner plus de 3go sur / !
Normalement, Frugalware fait tout le boulot à l'installation, et vous devriez avoir dans /etc/cron.daily/
un fichier nommé logrotate, contenant la commande pour lancer cet outil :
#!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf
Et voilà, bonne journée. Si je suis motivé, je vous parlerais de l'installation de Fail2ban et Denyhosts, pour bannir les méchantes Ip qui viennent pourrir votre serveur \\o/