logrotate : exemple vite fait
Aujourd'hui, un peu de configuration pour la rotation de ses logs, en utilisant Logrotate.
Sur un système Unix, bon nombre de programmes génèrent des fichiers de log. La rotation de ceux permet de séparer régulièrement les fichiers afin de les empêcher de devenir trop gros (et difficile à exploiter), et à effacer ceux qui sont trop vieux pour empêcher qu'ils ne saturent l'espace disque. La rotation des logs peut aussi être intéressante d'un point de vue légal, si on doit conserver un minimum ou maximum de temps les logs d'accès d'un serveur web, par exemple.
Continuons d'ailleurs sur l'exemple du serveur web. Je vais me baser sur une configuration proche de celle que j'utilise pour le serveur web qui rend ce blog accessible :
/srv/www/*/*/log/*.log {
compress
compresscmd /usr/bin/xz
compressext .xz
uncompresscmd /usr/bin/unxz
delaycompress
daily
rotate 9999
create 644 root wheel
sharedscripts
missingok
prerotate
/usr/pkg/bin/perl /usr/pkg/awstats/bin/awstats_updateall.pl now -awstatsprog=/usr/pkg/awstats/cgi-bin/awstats.pl -configdir=/usr/pkg/etc/awstats/ > /dev/null
endscript
postrotate
/usr/pkg/sbin/apachectl restart > /dev/null 2>/dev/null || true
endscript
}
Dans cet exemple, on peut remarquer que les logs sont compressés (directive compress), mais pas immédiatement lors de la rotation (directive delaycompress). Il s'agit d'un compromis entre la facilité de recherche dans les logs, et l'espace occupé. Autre information intéressante, l'utilisation de xz, déjà abordé dans un billet précédent, au lieu de Gzip (paramétrage par défaut). La plupart des options sont faciles à comprendre.
Attardons-nous cependant sur les dernières lignes de configuration, en particulier sur les directives prerotate et postrotate. Comme leur nom l'indique, elles permettent d'agir juste avant la rotation et juste après. Ainsi, j'ai choisi dans cette configuration de lancer Awstats pour gérer les statistiques de visites de tous les sites hébergés. Concernant l'action après rotation, la relance du serveur web est obligatoire, car sinon ce dernier continue à écrire dans l'ancien fichier (car l'inode ne bouge pas, lui).
Vous avez aimé cet article ? Alors partagez-le sur les réseaux sociaux ! Si en plus vous avez des remarques, ou des propositions d'améliorations, n'hésitez pas : les commentaires sont là pour ça !
Crédit photo : Intermountain Region USFS - logs ET5A3073.