Logrotate

De Justine's wiki
Aller à la navigation Aller à la recherche

Utilité

Logrotate sert à faire tourner les fichiers de logs sous Linux, en les compressant et / ou en les effaçant.

J'en parle déjà Ici

Créer un script de logrotate

https://www.thegeekstuff.com/2010/07/logrotate-examples/

D'abord, l'emplacement des différents élements:

* /usr/bin/logrotate: La commande en elle même
* /etc/cron.daily/logrotate : Le script shell qui execute logrotate tous les jours
* /etc/logrotate.conf : La configuration de rotation des logs est spécifiée ici
* /etc/logrotate.d : Les paquets installés sur le systèmes lâchent leur configuration logrotate ici.

Lancer la commande logrotate à la main

logrotate -s /var/log/logstatus logrotate.conf
# -s : on écrit le statut de la rotation dans logstatus

Exemples

/tmp/output.log {
        size 1k #On rotate au dela de 1ko
        monthly  #On rotate tous les mois (marche avec weekly, daily...)
        create 700 justine admins #Nouveau fichier créé avec autorisation 700, user justine, groupe admins
        rotate 4 #Combien de fichiers ayant déjà tourné on garde
        copytruncate #Pas compris... Aide le programme à loguer au bon endroit
        compress #Compresser les archives
        dateext #Mettre la date dans le nom des archives
        postrotate #Faire des choses après la compression
             /home/justine/script.sh
        maxage 100 #Toutes les archives + de 100 jours sont supprimées
        missingok #Pas de message d'erreur si le fichier n'existe pas
        compresscmd /bin/bzip2 #On précise la commande de compression...
        compressext #...et l'extension
}

Un exemple fonctionnel (les commentaires ne sont pas acceptés)

/var/log/blogpull.log {
        size 1k 
        weekly 
        create 644 root root
        rotate 10
        copytruncate 
        compress
        dateext
        maxage 100
        missingok
        compresscmd /bin/bzip2
        compressext .bz2
}

Tester mon fichier de conf

logrotate -f /mon/fichier/de/conf

Compression multithread avec pigz

Par défaut, logrotate utilise gzip pour la compression des logs. Cet utilitaire suffit la plupart du temps, mais il a le défaut d'être monothread. Il n'est pas très efficace dans le cas de fichiers volumineux.

On peut vouloir une alternative multi-thread si on de gros fichiers de logs, comme c'est mon cas par exemple avec mon serveur syslog. On peut alors utiliser pigz, qui est une variante multi-threadée de gzip.

Une version de logrotate supérieure ou égale à 3.8.1-5 est nécessaire pour gérer correctement les arguments dans compressoptions.

/data/syslog/*/*.log {

# Fréquence de rotation par défaut :
    daily

# Si l'un des journaux décrit est manquant, aucune erreur n'est remontée.
    missingok

# Les logs sont compressés après rotation avec pigz sur 4 threads (-p4) :
    compress
    compresscmd /usr/bin/pigz
    compressoptions -p5

# Compression le jour suivant
    delaycompress

# Insertion de la date dans l'archivage des journaux.
    dateext

# Prise en compte de la date de la veille pour plus de cohérence
    dateyesterday

# Conservation de l'extension .log après rotation "-YYYYMMDD.log.gz"
    extension .log

# Une rotation par jour est effectuée
    rotate 366

# Si une archive est agée de plus de 366 jours, elle est détruite :
    maxage 366

# Lors d'une rotation, un fichier de remplacement est créé avec les droits 0640 appartenant à root et au groupe root.
    create 640 root root

# Indique au service rsyslog qu'une rotation des logs a été faite
    postrotate
          invoke-rc.d rsyslog rotate > /dev/null
    endscript
}