Logrotate

Logrotate permet de limiter la taille des fichiers journaux présents dans /var/log.

Pour chaque fichier journal, logrotate réalise 2 opérations simultanées :

la rotation : il archive le fichier journal sous un autre nom et supprime la plus ancienne archive
la compression : il compresse éventuellement le fichier journal avant de l’archiver

La compression diminue :

  • l’espace disque utilisé

mais augmente :

  • la quantité de données lues et écrites sur le disque : usure du disque
  • la consommation d’énergie

Installer Logrotate

Top of Form

Bottom of Form

Step 1 : Update System and System Packages

Run the following command to update the package lists from apt-get and get the information on the newest versions of packages and their dependencies.

sudo apt-get update

Top of Form

Bottom of Form

Step 2 : Install Logrotate

If logrotate is not already on your VPS, install it now through apt-get.

sudo apt-get install logrotate

Top of Form

Bottom of Form

Step 3 : Confirmation

To verify that logrotate was successfully installed, run this in the command prompt.

logrotate

Since the logrotate utility is based on configuration files, the above command will not rotate any files and will show you a brief overview of the usage and the switch options available.

Top of Form

Bottom of Form

Step 4 : Configure Logrotate

Configurations and default options for the logrotate utility are present in:

/etc/logrotate.conf

Some of the important configuration settings are : rotation-interval, log-file-size, rotation-count and compression.

Application-specific log file information (to override the defaults) are kept at:

/etc/logrotate.d/

We will have a look at a few examples to understand the concept better.

Top of Form

Bottom of Form

Step 5 : Example

An example application configuration setting would be the dpkg (Debian package management system), that is stored in /etc/logrotate.d/dpkg. One of the entries in this file would be:

/var/log/dpkg.log {

monthly

rotate 12

compress

delaycompress

missingok

notifempty

create 644 root root

}

What this means is that:

  • the logrotation for dpkg monitors the /var/log/dpkg.log file and does this on a monthly basis – this is the rotation interval.
  • ‘rotate 12’ signifies that 12 days worth of logs would be kept.
  • logfiles can be compressed using the gzip format by specifying ‘compress’ and ‘delaycompress’ delays the compression process till the next log rotation. ‘delaycompress’ will work only if ‘compress’ option is specified.
  • ‘missingok’ avoids halting on any error and carries on with the next log file.
  • ‘notifempty’ avoid log rotation if the logfile is empty.
  • ‘create <mode> <owner> <group>’ creates a new empty file with the specified properties after log-rotation.

Though missing in the above example, ‘size’ is also an important setting if you want to control the sizing of the logs growing in the system.

A configuration setting of around 100MB would look like:

size 100M

Note that If both size and rotation interval are set, then size is taken as a higher priority. That is, if a configuration file has the following settings:

monthly

size 100M

then the logs are rotated once the file size reaches 100M and this need not wait for the monthly cycle.

Top of Form

Bottom of Form

Step 6 : Cron Job

You can also set the logrotation as a cron so that the manual process can be avoided and this is taken care of automatically. By specifying an entry in /etc/cron.daily/logrotate , the rotation is triggered daily.

Top of Form

Bottom of Form

Step 7 : Status Check and Verification

To verify if a particular log is indeed rotating or not and to check the last date and time of its rotation, check the /var/lib/logrotate/status file. This is a neatly formatted file that contains the log file name and the date on which it was last rotated.

cat /var/lib/logrotate/status

A few entries from this file, for example:

« /var/log/lpr.log » 2013-4-11
« /var/log/dpkg.log » 2013-4-11
« /var/log/pm-suspend.log » 2013-4-11
« /var/log/syslog » 2013-4-11
« /var/log/mail.info » 2013-4-11
« /var/log/daemon.log » 2013-4-11
« /var/log/apport.log » 2013-4-11

Top of Form

Bottom of Form

La rotation

Si l’on regarde le fichier syslog, on voit qu’il a d’autres fichiers similaires avec une extension ajoutée :

~$ ls -l /var/log/syslog*

-rw-r—– 1 syslog adm 45432 2011-09-24 10:12 /var/log/syslog

-rw-r—– 1 syslog adm 44442 2011-09-21 19:45 /var/log/syslog.1

-rw-r—– 1 syslog adm 31536 2011-09-19 21:04 /var/log/syslog.2.gz

-rw-r—– 1 syslog adm 72503 2011-09-18 15:45 /var/log/syslog.3.gz

-rw-r—– 1 syslog adm 21218 2011-09-17 09:45 /var/log/syslog.4.gz

-rw-r—– 1 syslog adm 10859 2011-09-16 18:28 /var/log/syslog.5.gz

-rw-r—– 1 syslog adm 74381 2011-09-07 23:15 /var/log/syslog.6.gz

~$

Le fichier sans extension est le fichier en cours d’utilisation. Les archives sont numérotés de la plus récente à la plus ancienne (extensions « 1 », « 2 », « 3 », …).

Lors d’une nouvelle rotation, le fichier le plus ancien est supprimé puis chaque archive a un numéro d’extension qui est incrémenté. Le fichier courant qui vient d’être archivé reçoit alors l’extension « 1 ». Un nouveau fichier journal est créé pour permettre à l’application correspondante de continuer à enregistrer ses informations.

En définissant le nombre maximum d’archives ainsi que la fréquence de rotation (journalière, hebdomadaire, mensuelle, …), on limite la taille occupée par un journal.

Top of Form

Bottom of Form

La compression

La compression permet de réduire la taille des archives qui subissent une rotation.

Cependant la compression n’est pas forcément un avantage compte tenu de la baisse du coût de stockage.

En effet, la compression des archives réalise plus d’échange avec le support de stockage et utilise plus de processeur et de mémoire. Cela entraîne une augmentation de l’usure du disque et de la consommation d’énergie globale.

Pour réduire l’espace utilisé par le stockage des journaux, vous pouvez réduire le nombre d’archives (numéro maximum) et augmenter la fréquence de rotation.

La compression peut être paramétrée globalement dans le fichier /etc/logrotate.conf.

Un paramétrage pour chaque application peut être redéfinit dans les fichiers présents dans le répertoire /etc/logrotate.d.

Avec l’option « nocompress« , logrotate renomme simplement le fichier en ‘nom_de_fichier_journal.log.1’, avec très peu d’échange disque puisque seul le nom du fichier est changé dans le système de fichier, le contenu reste inchangé.

Avec les options « compress« , logrotate lit le contenu du fichier à compresser (lecture du disque), le compresse (utilisation du processeur), puis écrit tout le contenu compressé (écriture sur le disque) dans un nouveau fichier du type ‘nom_de_fichier_journal.log.1.gz’.

Les options « delaycompress » et « nodelaycompress » sont similaires respectivement aux options « compress » et « nocompress » à la différence que la compression ne s’opère qu’à partir de la deuxième rotation d’un fichier journal (lors du passage du numéro « 1 » à « 2 »).

Man Logrotate :

logrotate – permute, compresse, et envoie les journaux système  

SYNOPSIS

logrotate [-dv] [-f|–force] [-s|–state fichier d’étatfichier_config+  

DESCRIPTION

logrotate est conçu pour faciliter l’administration des systèmes qui génèrent un grand nombre de journaux. Il automatise la permutation, la compression, la suppression, et l’envoi des journaux. Chaque journal peut être traité quotidiennement, hebdomadairement, mensuellement, ou quand il devient trop volumineux.

Normalement, logrotate est lancé comme un travail quotidien de cron. Il ne modifie pas un journal plusieurs fois dans la même journée à moins que le critère ne soit basé sur la taille du journal et que logrotate ne soit lancé plusieurs fois chaque jour, ou à moins que l’option -f ou -force ne soit utilisée.

Un nombre variable de fichiers de configuration peut être donné en ligne de commande. Les derniers fichiers de configuration peuvent outrepasser les options données dans les précédents, ainsi l’ordre dans lequel les fichiers de configuration de logrotate sont listés est important. Normalement, il faudrait utiliser un unique fichier de configuration qui inclut tous les autres fichiers de configuration nécessaires. Regardez ci-dessous pour plus d’informations sur la façon d’utiliser la directive include dans ce but. Si un répertoire est donné en ligne de commande, chaque fichier de ce répertoire est utilisé comme fichier de configuration.

OPTIONS

-d

Passe en mode débugage et implique -v. En mode débugage, aucun changement ne sera fait sur les journaux ou sur le fichier d’état de logrotate.

-f, –force

Indique à logrotate de forcer la permutation, même si il n’estime pas que c’est nécessaire. Quelques fois, cela est utile après ajout de nouvelles entrées à logrotate, ou si d’anciens journaux on été supprimés à la main, les nouveaux fichier seront créés, et la journalisation continuera correctement.

-s, –state <fichier d’état>

Indique à logrotate d’utiliser un autre fichier d’état. Cela est utile si logrotate est lancé par différents utilisateurs pour des groupes de journaux distincts. Le fichier d’état par défaut est /var/lib/logrotate.status.

–usage

Affiche un court résumé du manuel, le numéro de version, et les informations légales.

FICHIER DE CONFIGURATION

logrotate lit tout à propos des journaux qu’il est censé traiter à partir de la série de fichiers de configuration spécifiée en ligne de commande. Chaque fichier de configuration peut définir des options globales (les options locales outrepassent les globales, et les dernières définitions outrepassent les précédentes) et précise le journal à permuter. Un fichier de configuration simple ressemble à :

# exemple de fichier de configuration de logrotate

errors sysadmin@my.org

compress

/var/log/messages {

rotate 5

weekly

postrotate

/sbin/killall -HUP syslogd

endscript

}

« /var/log/httpd/access.log » {

rotate 5

mail www@my.org

errors www@my.org

size=100k

postrotate

/sbin/killall -HUP httpd

endscript

}

/var/log/news/* {

monthly

rotate 2

missingok

errors newsadmin@my.org

postrotate

kill -HUP `cat /var/run/inn.pid`

endscript

nocompress

}

Les premières lignes définissent les options globales ; chaque erreur apparaissant durant le traitement des journaux est envoyée à sysadmin@my.org et les fichiers sont compressés après être permutés. Remarquez que les commentaires peuvent apparaître n’importe où dans le fichier de configuration à partir du moment où le premier caractère non blanc de la ligne est un #.

La section suivante du fichier de configuration décrit comment traiter le journal /var/log/messages. Le journal passera par cinq rotations hebdomadaires avant d’être supprimé. Une fois que le journal aura été permuté (mais avant que l’ancienne version du journal ne soit compressée), la commande /sbin/killall -HUP syslogd sera exécutée.

La section suivante décrit les paramètres pour /var/log/httpd/access.log. Il est permuté dès que sa taille dépasse 100 ko, et les anciens journaux sont envoyés (sans compression) à www@my.org après être passés par 5 rotations, au lieu d’être supprimés. De la même manière, toutes les erreurs apparaissant durant le traitement du journal sont envoyées à www@my.org (outrepassant la directive globale errors). Remarquez que les doubles guillemets autour du nom de fichier au début de cette section permettent à logrotate de permuter des journaux dont le nom comprend des espaces.

La dernière section décrit les paramètres pour tous les fichiers dans /var/log/news. Chaque fichier est permuté sur une base mensuelle, et les erreurs sont envoyées à newsadmin@my.org. Ceci est considéré comme une unique directive, et si des erreurs se produisent pour plus d’un fichier elle sont envoyées dans un unique message. Dans ce cas, les journaux ne sont pas compressés.

Vous trouverez ici plus d’informations sur les directives que vous pouvez inclure dans un fichier de configuration de logrotate :

compress

Compresse les anciens journaux avec gzip. Voir aussi nocompress.

copytruncate

Tronque le journal original en place après en avoir créé une copie, au lieu de déplacer l’ancien journal et optionnellement d’en créer un. Cela peut être utilisé quand il n’est pas possible de demander à un programme de fermer son journal, et par conséquent que l’écriture (l’ajout) puisse continuer sur le précédent journal. Remarquez qu’il existe une très courte période entre la copie du fichier et sa troncature, aussi des données journalisées peuvent être perdues. Quand cette option est utilisée, l’option create est sans effet, attendu que le journal reste en place.

create mode propriétaire groupe

Immédiatement après la permutation (avant que le script postrotate ne soit exécuté), un journal est créé (du même nom que le journal juste permuté). mode précise les permissions du journal en octal (de la même façon que pour chmod(2)), propriétaire précise le nom de l’utilisateur propriétaire du journal, et group précise le groupe auquel appartient le journal. Chacun des attributs du journal peut être omis, auquel cas ces attributs omis pour le nouveau journal prendront les même valeurs que pour le journal original. Cette option peut être désactivée en utilisant l’option nocreate.

daily

Les journaux sont permutés chaque jour.

delaycompress

Reporte la compression du journal précédent au prochain cycle de permutation. Ceci n’a un effet qu’utilisé en combinaison avec l’option compress. Elle peut être utilisée quand il n’est pas possible de demander à un programme de fermer son journal et qu’il puisse par conséquent continuer à écrire pour un moment dans le journal précédent.

errors adresse

Toutes les erreurs se produisant durant le traitement des journaux sont envoyées à l’adresse donnée.

extension ext

Les journaux se voient attribuer le suffixe ext après permutation. Si la compression est utilisée, le suffixe de compression (normalement .gz) apparaît après ext.

ifempty

Permute le journal même s’il est vide, outrepassant l’option notifempty (ifempty est l’option par défaut).

include fichier_ou_répertoire

Lit le fichier donné en argument comme s’il était inclus littéralement à l’endroit où la directive include apparaît. Si un répertoire est donné, la plupart des fichiers de ce répertoire sont lus avant de continuer le traitement. Les seuls fichiers ignorés sont les fichiers non réguliers (tels que les répertoires et les tubes nommés) et les fichiers dont les noms se terminent par une des extensions taboues, comme précisé par la directive tabooext. La directive include ne devrait pas apparaître dans la définition d’un fichier journal.

mail adresse

Quand un journal est permuté, il est envoyé à adresse. Si aucun mail ne devrait être généré pour un journal particulier, la directive nomail peut être utilisée.

mailfirst

Lors de l’utilisation de la commande mail, envoie le journal juste permuté, au lieu d’envoyer le journal sur le point d’expirer.

maillast

Lors de l’utilisation de la commande mail, envoie le journal sur le point d’expirer, au lieu d’envoyer le journal juste permuté (ceci est l’option par défaut).

missingok

Si le journal est manquant, continue avec le suivant sans produire de message d’erreur. Voir aussi nomissingok.

monthly

Les journaux sont permutés la première fois que logrotate est lancé dans le mois (c’est normalement le premier jour du mois).

nocompress

Les anciennes versions des journaux ne sont pas compressées avec gzip. Voir aussi compress.

nocopytruncate

Ne tronque pas le journal original en place après avoir créé une copie (ceci outrepasse l’option copytruncate).

nocreate

Les nouveaux journaux ne sont pas créés (ceci outrepasse l’option create).

nodelaycompress

Ne reporte pas la compression du journal précédent au prochain cycle de permutation (ceci outrepasse l’option delaycompress).

nomail

N’envoie aucun ancien journal.

nomissingok

Si un journal n’existe pas, produit une erreur (ceci est la valeur par défaut).

noolddir

Les journaux sont permutés dans le répertoire où ils résident normalement (ceci outrepasse l’option olddir).

notifempty

Ne permute pas le journal s’il est vide (ceci outrepasse l’option ifempty).

olddir répertoire

Les journaux sont déplacés dans répertoire pour permutation. Le répertoire doit être sur le même périphérique physique que le journal en cours de permutation. Quand cette option est utilisée, toutes les anciennes versions des journaux terminent dans répertoire. Cette option peut être outrepassée par l’option noolddir.

postrotate/endscript

Les lignes entre postrotate et endscript (chacun devant apparaître sur une ligne isolée) sont exécutées après permutation du journal. Ces directives doivent apparaîtrent dans la définition d’un journal. Voir aussi prerotate.

prerotate/endscript

Les lignes entre prerotate et endscript (chacun devant apparaître sur une ligne isolée) sont exécutées avant permutation du journal. Ces directives doivent apparaîtrent dans la définition d’un journal. Voir aussi postrotate.

rotate nombre

Les journaux sont permutés <nombre> fois avant d’être supprimés ou envoyés à l’adresse précisée dans une directive mail. Si nombre est 0, les anciennes versions sont supprimées au lieu d’être permutés.

size taille

Les journaux sont permutés quand leur taille dépasse taille octets. Si taille est suivi par M, la taille est supposée être en mégaoctets. Si k est utilisé, la taille est en kilooctets. Ainsi size 100, size 100k, et size 100M sont tous valides.

tabooext [+] liste

Change la liste courante des extensions taboues (voir la directive include pour les informations sur les expressions taboues). Si un + précède la liste d’extensions, la liste courante des expressions taboues est augmentée, sinon elle est remplacée. Au démarrage, la liste des extensions taboues contient .rpmorig, .rpmsave, .v et ~.

weekly

Les journaux sont permutés si le jour courant est plus petit que le jour de la dernière permutation ou si plus d’une semaine s’est écoulée depuis la dernière permutation. Ceci est normalement identique à permuter les journaux le premier jour de chaque semaine, mais fonctionne mieux si logrotate n’est pas lancé chaque nuit.

FICHIERS

/var/lib/logrotate.status

Fichier d’état par défaut.

Exemple sur le serveur BRAWNDO

root@brawndo:/etc/logrotate.d# ls -alF

total 72

drwxr-xr-x 2 root root 4096 déc. 22 16:29 ./

drwxr-xr-x 88 root root 4096 janv. 6 14:06 ../

-rw-r–r– 1 root root 326 oct. 31 2012 apache2

-rw-r–r– 1 root root 173 oct. 16 2012 apt

-rw-r–r– 1 root root 79 nov. 7 2012 aptitude

-rw-r–r– 1 root root 84 juin 29 2010 backrotate

-rw-r–r– 1 root root 91 juil. 1 2010 backserver2extern

-rw-r–r– 1 root root 232 oct. 20 2012 dpkg

-rw-r–r– 1 root root 146 oct. 25 2012 exim4-base

-rw-r–r– 1 root root 126 oct. 25 2012 exim4-paniclog

-rw-r–r– 1 root root 92 juin 29 2010 machine2backserver

-rw-r–r– 1 root root 268 juin 1 2012 monit

-rw-r–r– 1 root root 880 oct. 29 2012 mysql-server

-rw-r–r– 1 root root 82 juin 4 2013 rebootMe

-rw-r–r– 1 root root 515 sept. 26 2012 rsyslog

-rw-r–r– 1 root root 322 août 5 2012 samba

-rw-r–r– 1 root root 83 juin 4 2013 snapnight

-rw-r–r– 1 root root 191 avril 16 2013 winbind

root@brawndo:/etc/logrotate.d# more backserver2extern

/var/log/backserver2extern.log {

weekly

rotate 7

compress

missingok

notifempty

}

root@brawndo:/etc/logrotate.d# more monit

/var/log/monit.log {

rotate 4

weekly

minsize 1M

missingok

create 640 root adm

notifempty

compress

delaycompress

postrotate

invoke-rc.d monit reload > /dev/null

endscript

}