Sitedetout - Tutoriels informatiques

La rotation des logs avec logrotate

Les fichiers logs, appelés aussi  fichiers de traces ou fichiers journaux, sont des fichiers qui conservent la trace de toutes les requêtes qui ont été adressées à un serveur donné.

Un fichier log est généralement un fichier texte classique. Son contenu regroupe de manière chronologique l’ensemble des événements et actions affectant un système informatique (en l’occurrence, notre serveur).

Ces fichiers sont importants lorsqu’il s’agit d’analyser l’utilisation d’une application ou diagnostiquer un problème rencontré, et puisqu’un fichier log trace de manière continu les événements générés par le serveur, sa taille grandit rapidement au fil du temps et peut atteindre des tailles importantes.

Avoir des fichiers logs de tailles importantes sur une machine peut dégrader ses performances et rend difficile de diagnostiquer un problème donné (trouver une ligne parmi un million d’enregistrements, est-ce facile ?)

Pour ces raisons et d’autres, il est primordiale de garder ses fichiers logs sous une taille facile à gérer et supprimer les fichiers qui sont très anciens et n’ont plus de grande importance.

Plusieurs serveurs et applications implémentent leurs propres mécanismes de rotations des logs, mais ce n’est pas toujours le cas, c’est pourquoi, il faudra trouver une alternative.

Heureusement, les systèmes GNU/Linux offrent un outil nommé Logrotate qui permet d’effectuer cette tâche avec finesse.

Cet outil permet d’automatiser la rotation, la compression, la suppression, et l’envoi des fichiers logs.

Vous avez le choix de traiter vos fichier soit quotidiennement, hebdomadairement, mensuellement, ou selon la taille du fichier (10 Mo, 50 Mo …).

Comment fonctionne Logrotate

L’outil est exécuté par le système chaque jour moyennant le tâche cron disponible sous

/etc/cron.daily/logrotate

Son contenu contient la ligne suivante :

/usr/sbin/logrotate /etc/logrotate.conf

Quand ce script est déclenché, il cherche dans son fichier de configuration (logrotate.conf) et détermine l’emplacement des fichiers logs à analyser et effectuer une rotation si nécessaire, ceci dépendra des informations que vous avez mentionné.

Que contient logrotate.conf ?

C’est le fichier de configuration principal et contient les paramètres par défaut qu’utilise Logrotate au moment de la rotation.

# see "man logrotate" for details
# rotate log files weekly
weekly    : Effectuer la recherche chaque jour.
# keep 4 weeks worth of backlogs
rotate 4  : Conserver au maximum 30 fichiers logs 
            (au-delà de 30, on commence à supprimer les plus anciens).
# create new (empty) log files after rotating old ones
create    : Créer un nouveau fichier vide après la rotation.

# use date as a suffix of the rotated file
dateext   : Ajouter la date actuelle comme suffixe au fichiers traités.

# uncomment this if you want your log files compressed
#compress : Compresser les fichiers traités.

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d : Inclure les fichiers de configuration diponibles sous ce répertoire

/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}

Si on essaye de traduire cet exemple, ce sera quelque chose du genre :
Recherche moi les fichiers logs disponibles sous le répertoire /var/log/btmp, si tu ne trouves
aucun fichier, ne fais rien (missingok), sinon:
pour chaque fichier trouvé, copie son contenu dans un nouveau fichier et crée moi un fichier vide ayant les permissions 0600, appartenant à l’utilisateur root et le groupe utmp.
Ne garde qu’une seule copie de ce fichier, c’est à dire, à la prochaine rotation, supprime l’ancienne copie avant d’exécuter le traitement.

Ainsi, pour que logrotate analyse et éventuellement effectue une rotation sur vos fichiers logs, il faut créer un ou des fichiers de paramètres (selon vos besoins) dans le répertoire /etc/logrotate.d/ portant un nom quelconque, et bien sur respecter la syntaxe précédente.

Exemple de rotation du fichier mysql.log ?

On crée un fichier /etc/logrotate.d/mysql ayant le contenu suivant :

/var/log/mysqld.log {
        create 640 mysql mysql
        notifempty
        missingok
        postrotate
                # just if mysqld is really running
                if test -x /usr/bin/mysqladmin && \
                   /usr/bin/mysqladmin --defaults-extra-file=/root/mysql/logrotate.cnf ping &>/dev/null
                then
                   /usr/bin/mysqladmin --defaults-extra-file=/root/mysql/logrotate.cnf flush-logs
                fi
                /usr/bin/chcon -u system_u -r object_r -t mysqld_log_t /var/log/mysqld.log
        endscript
}


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Menu Title
Chargement...

Powered by sitedetout.com