MaDoVi - Le wiki

Machines - Données - Virtualisation

Outils pour utilisateurs

Outils du site


services:admin:logrotate

Table des matières

La conservation des logs

Par défaut sur un OS GNU/Linux de nombreux logs sont disponibles, ils conservent ce qu'il se passe sur le sytème. Selon le réglage cela va de la simple INFO à l'alarme CRITIQUE ou aux infos de DEBUG très détaillées pour les développeurs et testeurs.

Si les journaux sont écrits pendant toute la durée de vie du système, leur contenu n'est pas toujours important lorsque tout se passe bien. Il faut donc paramétrer un effacement régulier des anciens journaux pour les remplacer par de nouveaux: la rotation des logs. Par défaut sur la plupart des distributions Linux cela est assuré par:

Logrotate

… même si ce système de journaux est petit à petit remplacé par l'ensemble “systemd” et son “journalctl”. Rien ne nous empêche de comprendre comment fonctionne l'ancien système, il est toujours actif même dans les Debian récentes (Buster)

Logrotate est un démon lancé à intervalle régulier, 1 fois par jour par le cron.daily. Il va lire sa configuration puis exécuter les tâches correspondantes dans les journaux, généralement enregistrés dans /var/log

Ses fichiers de configuration sont /etc/logrotate.conf pour le principal et /etc/logrotate.d/* pour le reste. Nous n'allons nous intéresser qu'au répertoire logrotate.d puisque les logs système s'y trouvent et si nous voulions ajouter la gestion des logs d'un autre logiciel (nginx par exemple) il faudrait ajouter un fichier de configuration à cet endroit.

Que trouvons-nous dans ce répertoire:

total 172K
-rw-r--r-- 1 root root 443 avril  8  2015 apache2
-rw-r--r-- 1 root root 126 févr.  7  2015 apport
-rw-r--r-- 1 root root 207 févr. 26  2015 apt
-rw-r--r-- 1 root root 117 févr. 26  2015 aptitude
-rw-r--r-- 1 root root 156 mars   7  2017 consolekit
-rw-r--r-- 1 root root 413 sept.  5  2014 cups-daemon
-rw-r--r-- 1 root root 232 mars   7  2014 dpkg
-rw-r--r-- 1 root root 109 janv. 13  2012 forked-daapd
-rw-r--r-- 1 root root 165 janv.  7  2015 libvirtd
-rw-r--r-- 1 root root 162 janv.  7  2015 libvirtd.lxc
-rw-r--r-- 1 root root 163 janv.  7  2015 libvirtd.qemu
-rw-r--r-- 1 root root 162 janv.  7  2015 libvirtd.uml
-rw-r--r-- 1 root root 439 févr. 26  2015 logitechmediaserver
-rw-r--r-- 1 root root 114 avril  8  2015 mediatomb
-rw-r--r-- 1 root root 109 août  24  2010 minidlna
-rw-r--r-- 1 root root 703 avril  8  2015 mysql-server
-rw-r--r-- 1 root root 713 juil. 17  2015 plexmediaserver
-rw-r--r-- 1 root root 157 juil. 15  2014 pm-utils
-rw-r--r-- 1 root root 133 févr. 26  2015 ppp
-rw-r--r-- 1 root root 554 févr. 26  2015 rsyslog
-rw-r--r-- 1 root root 295 août  26  2011 sabnzbdplus
-rw-r--r-- 1 root root 217 févr. 26  2015 ufw
-rw-r--r-- 1 root root 177 déc.   6  2013 unattended-upgrades
-rw-r--r-- 1 root root 122 avril 11  2014 upstart
-rw-r--r-- 1 root root  94 avril  8  2015 v-album
-rw-r--r-- 1 root root 405 avril  8  2015 v-apache2-users
-rw-r--r-- 1 root root 162 sept. 25  2015 v-btsync
-rw-r--r-- 1 root root 201 avril  8  2015 v-events
-rw-r--r-- 1 root root  94 avril  8  2015 v-execd
-rw-r--r-- 1 root root  91 août   4  2011 v-grabbers
-rw-r--r-- 1 root root  91 août   4  2011 v-grabcore
-rw-r--r-- 1 root root  95 août   4  2011 v-grabdb
-rw-r--r-- 1 root root  90 août   4  2011 v-grabphp
-rw-r--r-- 1 root root  95 avril  8  2015 v-jsonrpc
-rw-r--r-- 1 root root 157 déc.  21  2010 v-mediatomb
-rw-r--r-- 1 root root  90 mars  14  2012 v-mirror
-rw-r--r-- 1 root root 715 avril  8  2015 v-mysql-sys
-rw-r--r-- 1 root root 721 avril  8  2015 v-mysql-users
-rw-r--r-- 1 root root 165 févr. 26  2015 vsftpd
-rw-r--r-- 1 root root 112 août  26  2013 vsftpd2
-rw-r--r-- 1 root root  98 avril  8  2015 v-transaction
-rw-r--r-- 1 root root 114 avril  8  2015 v-website-template-installer
-rw-r--r-- 1 root root 151 juil.  9  2014 xbmc

Ici ce sont ceux d'un système VHS d'origine, les développeurs et admins ont déjà ajouté de nombreux fichiers de configuration pour toutes les modifications apportées à la distribution Ubuntu Server.

Ouvrons en un standard, existant sur toutes les Ubuntu et Debian par défaut

/etc/logrotate.d/rsyslog
/var/log/syslog
{
        rotate 4
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}
 
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
        rotate 4
        daily
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}

Ce fichier indique à logrotate de s'occuper de toute cette liste de logs, chaque bloc délimité par { et } concerne tous les fichiers au dessus, le bloc suivant concerne les fichiers indiqués juste avant et ainsi de suite.

  • Il est possible d'en indiquer autant que voulu, mais pensez à découper dans d'autres fichiers de configuration pour plus de lisibilité !
  • Vous pouvez utiliser * pour définir l'ensemble des logs d'un répertoire, par exemple /var/log/nginx/site/* pour tous les logs de votre site web, mais attention. :!:

Toutes les primitives de configuration sont expliquées dans le man mais voyons les plus importantes:

  • daily peut aussi être remplacé par hourly, weekly, monthly, yearly indique la fréquence de rotation
  • rotate X indique la période de rotation, par exemple rotate 4 avec daily fera une rotation sur 4 jours (4 fichiers d'1 jour chacun), rotate 2 avec weekly fera une rotation sur 2 semaines (2 fichiers d'une semaine chacun)
  • missingok il n'y aura pas d'erreur levée si le log n'existe pas
  • notifempty le fichier de log ne sera pas traité s'il est vide
  • compress compresse les logs anciens avec gzip: xxx.1.gz, xxxx.2.gz
  • delaycompress utilisé avec compress permet de ne pas compresser le premier journal archivé, il sera conservé xxx.1 alors que les autres seront compressés normalement
  • size xxM: (pas présent dans cet exemple mais très importante): permet de définir une taille à partir de laquelle le log sera traité (renommé, compressé selon réglage). La première des deux occurrences rencontrée entre l'âge défini ci-dessus et la taille déclenchera la rotation. M = Megabytes, cela peut aussi être rien = bytes, k = kilobytes, G = Gigabytes

Ce dernier paramètre est crucial lorsque vous rencontrez une saturation de la partition /var, il permet de limiter la taille d'un log qui parfois explose d'un coup lors d'une erreur, lors d'une attaque par le web pour nginx etc.

Voilà, avec ces informations à vous de déterminer quelle sera la meilleure rotation des journaux pour chaque service disponible sur votre serveur en fonction de leur utilisation, de la fréquence de vos consultations, de la fréquence et du risque de panne …

Il est très important et intéressant de prendre en main les logs de son système, même si on peut être tenté de supprimer un maximum de fichiers pour garder de la place cela vous empêchera de savoir ce qui a pu se passer ou de vous faire aider pour comprendre. Lorsque l'OS démarre en mode limité, un accès aux logs permet de résoudre rapidement le problème.

Serveur syslog

Une fonctionnalité très intéressante des logs sur Linux est de pouvoir envoyer ces journaux sur un serveur qui va centraliser ceux de tous les serveurs du réseau, c'est ce qu'on nomme un serveur Syslog.

Et des applications utilisées ensemble permettent de lire facilement, trier, filtrer dans toutes ces informations. Un exemple avec la suite Elastic: ElasticSearch Logstash et Kibana

Je ne vais pas rentrer dans ce niveau de détail pour le moment.

services/admin/logrotate.txt · Dernière modification: 19/03/2020 22:25 de Cram28