Logrotate, ou comment gérer ses logs!

logrotate

Aujourd’hui nous allons étudier la façon dont linux gère la journalisation par défaut et comment créer des règles personnalisées pour nos logs issues du reverse proxy traefik.

Si vous avez déjà analysé les logs d’une machine linux, vous êtes vous demandés pourquoi la journalisation syslog, wtmp ou autres btmp ne remonte pas à la date d’installation de la machine?

Bien sûr, probablement pour une histoire de stockage, mais qui a configuré cela? Et surtout, comment?

C’est ce que nous allons voir ici.

Syslog

Nous appuierons nos propos en prenant les logs syslog comme exemple.

Allons les voir:

root[email protected]:/ ls -lh /var/log/syslog*
-rw-r----- 1 root adm  98M mai   10 11:13 /var/log/syslog
-rw-r----- 1 root adm 209M mai   10 00:00 /var/log/syslog.1
-rw-r----- 1 root adm 2,1M mai    9 00:00 /var/log/syslog.2.gz
-rw-r----- 1 root adm 2,2M mai    8 00:00 /var/log/syslog.3.gz
-rw-r----- 1 root adm 2,3M mai    7 00:00 /var/log/syslog.4.gz
-rw-r----- 1 root adm 2,2M mai    6 00:00 /var/log/syslog.5.gz
-rw-r----- 1 root adm 2,2M mai    5 00:00 /var/log/syslog.6.gz
-rw-r----- 1 root adm 1,1M mai    4 00:00 /var/log/syslog.7.gz

Qu’avons nous donc ici…

  • 8 fichiers syslog*
  • Le premier n’a pas de numérotation
  • Le second n’a pas d’extension “gz”, il n’est pas archivé
  • Les 7 autres sont numérotés et son archivés. Notez au passage le ratio de compression assez hallucinant.
  • Ces fichiers sont crées tous les jours à 00h00 (4 mai pour le syslog.7, 5 mai pour le syslog.6, etc…)
  • Ils appartiennent à l’utilisateur root, et au groupe adm.

Bon, on a à peu près fait le tour. Allons voir comment tout cela est configuré…

Logrotate

Sauf exception, la journalisation sous linux est gérée par l’outil “logrotate“, qui, comme son nom l’indique, va faire “tourner” les logs.

Comme d’habitude, la configuration va se trouver dans /etc/:

[email protected]:/etc ll logrot*
-rw-r--r-- 1 root root  435 août  22  2018 logrotate.conf

logrotate.d:
-rw-r--r--   1 root root   120 avril 19  2019 alternatives
-rw-r--r--   1 root root   173 sept. 13  2017 apt
-rw-r--r--   1 root root   130 août  29  2018 btmp
-rw-r--r--   1 root root   112 avril 19  2019 dpkg
-rw-r--r--   1 root root    94 déc.   4  2015 ppp
-rw-r--r--   1 root root   501 févr. 26  2019 rsyslog
-rw-r--r--   1 root root   145 févr. 19  2018 wtmp

Nous avons donc un fichier “logrotate.conf” et un répertoire “logrotate.d” qui contient quelques noms connus (apt, btmp, rsyslog, etc…). Remarquez les droits de ces derniers fichiers (-rw-r–r–) qui correspond à 644.

Commençons par jeter un oeil à logrotate.conf qui contient une configuration par défaut:

[email protected]:/etc cat logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
#dateext
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# system-specific logs may be also be configured here.

Ok, cela nous indique que par défaut:

  • Les journaux de logs sont crées toutes les semaines.
  • L’on ne garde que 4 rotations (4 semaines donc).
  • On crée un nouveau fichier blanc à chaque rotation.
  • L’on inclue le contenu du répertoire logrotate.d pour les configurations spécifiques.

Alors allons voir les configurations spécifiques, notamment le fichier “rsyslog” pour notre exemple:

[email protected]:/etc cat logrotate.d/rsyslog
/var/log/syslog
{
        rotate 7
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                /usr/lib/rsyslog/rsyslog-rotate
        endscript
}

Ah, c’est un peu plus complet…

  • /var/log/syslog” est spécifié, on sait de quoi ça parle.
  • rotate 7” = 7 rotations.
  • daily” = rotation quotidienne.
  • missingok” = on ne s’arrête pas en cas d’erreur.
  • notifempty” = on ne crée rien si le fichier est vide.
  • delaycompress” = on attend une rotation complète pour compresser.
  • compress” = on archive les rotations.
  • postrorate” ** “endscript” = on exécute le script spécifié après chaque rotation.

Bien… Mais est-ce que cela correspond à ce nos syslog* ? On avait pas 8 fichiers?

Et bien si, mais cela s’explique par le fait que notre fichier “syslog” tout court est celui en cours d’écriture, il ne compte donc pas encore dans la rotation.

Ce soir a minuit, la rotation aura lieu, c’est à dire que le fichier le plus ancien (syslog.7.gz) va disparaître, mais le syslog.6.gz va être renommé en syslog.7.gz, le syslog.5.gz va être renommé en syslog.6.gz, et ainsi de suite… Le syslog.1 va être renommé en syslog.2.gz, le syslog en syslog.1 et un nouveau fichier vide nommé syslog va être créé.

Customisation

Ok, tout ça c’est bien, mais on peut le modifier? Encore mieux, on va créer une nouvelle règle…

Si vous vous souvenez, ici ou la, nous avons crée un répertoire ou sont stockés les logs de notre reverse proxy traefik.

Nous avons des access.log, ainsi que des traefik.log. Si on laisse ça comme cela, nous allons vite avoir deux fichiers texte de plusieurs gigas qu’il sera difficile d’exploiter en cas de besoin…

Maintenant que l’on sait comment fonctionne l’outil logrotate, on va créer notre propre règle.

Je vais donc créer un fichier nommé traefik que je vais déposer dans le répertoire /etc/logrotate.d/ et a qui je vais donner les droits 644.

####################################################################
# LOGROTATE SCRIPT TO PUSH IN /etc/logrotate.d/traefik && chmod 644#
####################################################################
# TRAEFIK ACCESSLOG
###################
/mnt/traefik/logs/access.log {
        rotate 52
        weekly
        compress
        delaycompress
        dateext
        notifempty
        missingok
}

###################
# TRAEFIK LOG
###################
/mnt/traefik/logs/traefik.log {
        rotate 4
        weekly
        compress
        delaycompress
        dateext
        notifempty
        missingok
}

Bien, dans ce fichier, je distingue deux configurations différentes en faisant référence aux deux fichiers.

En cas de problème de sécurité, avoir l’antériorité d’accès web est très important. Je décide donc de garder un an d’access.log (52 semaines). Par contre je n’ai pas besoin d’avoir un long historique des logs de l’outil traefik lui même. Si il ne fonctionne plus, je m’en rendrai vite compte. Un mois semble suffisant.

Une fois notre fichier créé avec les bons droits, dans le bon répertoire, il sera pris en compte lors de la prochaine rotation…

Logrotate, ou comment gérer ses logs!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to top