Contenu | Rechercher | Menus

Logrotate

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

Pour chaque fichier journal, logrotate réalise 2 opération 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

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

Step 2 : Install Logrotate

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

sudo apt-get install logrotate

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.

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.

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.

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.

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

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.

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 entraine 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").



Le contenu de ce wiki est sous licence : CC BY-SA v3.0