Logrotate : faites tourner vos logs

Après quelques ennuis hier soir sur le serveur, j'ai du éplucher les logs… Ce qui m'a fait un peu halluciner en listant /var/log/ car certains fichiers sont monstrueux en taille ! syslog, et debug faisaient plus du giga chacun. Un fichier de cette taille ne peut donc pas décemment etre lu sans planter, il a fallu remédier à cela. De plus, l'espace disque s'en ressent fortement.

J'avais eu connaissance de logrotate il y a quelque temps, mais je n'avais pas pris le temps de le mettre en place. C'est donc le moment.

Pour l'installation, il suffit sur Frugalware de faire un petit pacman -S logrotate. Le fichier de configuration se trouve dans /etc/logrotate.conf et un dossier /etc/logrotate.d est crée.

Suite à mes recherches sur le net, j'ai trouvé quelques liens intéressants que je vous livre au fil de ce billet. J'ai personnellement modifié le fichier de configuration en pompant allégrement sur ce billet :

  ## logrotate.conf (logrotate)
  #
  # Par FHH le 30 / 08 / 2009
  #
  # Description
  #       Fichier de configuration de logrotate.
  #
   
  # Les logs sont compréssé avant rotation :
  compress
  # Fréquence de rotation par défaut :
  weekly
  # La rotation est effectuée, par défaut, même si le fichier est vide afin de faciliter 
  # les recherches dans les logs au jour le jour
  ifempty
  # Par défaut, une rotation par semaine est effectuée. 52 semaines par an, nous conservons donc
  # une profondeur de 52 semaines, ça laisse un an de log.
  rotate 52
  # En parallèle, si une archive est agée de plus de 52 semaines, elle est détruite :
  maxage 52
  # Envois par mail du fichier sur le point d'expirer.
  maillast
  # Le fichier sur le point d'expirer est envoyé à l'adresse définie ici.
  mail root@wolf.am
  # Si l'un des journaux décrit est manquant, aucune erreur n'est remontée.
  missingok
  # Insertion de la date dans l'archivage des journaux.
  dateext
  # Lors de l'archivage de plusieurs fichiers de logues, les scripts pre et post rotate sont 
  # exécuté une fois par fichier. L'option "sharedscripts" fixe l'exécution de ces scripts à
  # une seule fois.
  sharedscripts
  # Lors d'une rotation, un fichier de remplacement est créé avec les droits 0640 appartenant à 
  # root et au groupe root.
  create 0640 root root
  # Toutes les archives sont stockées dans /var/log/archives.
  olddir /mnt/backup2/log
  # Inclusion des scripts propres aux logs.
  include /etc/logrotate.d

Le fichier est suffisamment commenté pour comprendre comment il fonctionne. Une option qui est importante pour moi est de sauvegarder les rotations sur mon disque dur externe avec la fonction olddir. Ces paramètres généraux peuvent etre surchargés par les règles spécifiques à chaque log.

En effet, le plus important maintenant est de créer les régles, que l'on placera dans le répertoire /etc/logrotate.d. Un fichier par règle, que l'on nommera par le service affecté.

Lighttpd

  /var/log/lighttpd/*.log {
      notifempty
      olddir /mnt/backup2/log/lighttpd
      create 640 nobody nobody
      postrotate
          systemctl restart lighttpd.service > /dev/null
      endscript
  }

Prosody

  /var/log/prosody/*.log {
      notifempty
      olddir /mnt/backup2/log/prosody
      postrotate
          systemctl restart prosody.service > /dev/null
      endscript
  }

Syslog

Ce fichier est normalement déjà présent et permet de faire une rotation des logs les plus volumineux.

  /var/log/cron /var/log/debug /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler /var/log/syslog {
      compress
      rotate 4
      postrotate
  	/bin/kill -HUP `cat /var/run/syslogd.pid 2>/dev/null` 2>/dev/null || true
      endscript
  }

Fail2ban

  /var/log/fail2ban.log {
      notifempty
  }

Vsftpd

  /var/log/vsftpd.log {
      notifempty
      postrotate
          systemctl restart vsftpd.service > /dev/null
      endscript
  }

Log des sites hébergés

Pour chaque domaine géré par lighttpd, je fais une rotation des logs également.

  /mnt/backup1/log/lighttpd/peupleloup.info/*.log {
      notifempty
      olddir /mnt/backup2/log/lighttpd/peupleloup.info
      create 640 nobody nobody
      postrotate
          systemctl restart lighttpd.service > /dev/null
      endscript
  }

Test et Mise en place du Cron

Avant de valider tout ça, il vaut mieux tester ce que ça donne, comme le conseille Marius.

  logrotate -d /etc/logrotate.conf

J'ai ensuite lancé logrotate en mode forcé pour me libérer de tous ces logs si volumineux avec un `` logrotate -f``. Ce qui m'a permis de gagner plus de 3go sur / !

Normalement, Frugalware fait tout le boulot à l'installation, et vous devriez avoir dans /etc/cron.daily/ un fichier nommé logrotate, contenant la commande pour lancer cet outil :

  #!/bin/sh
  
  /usr/sbin/logrotate /etc/logrotate.conf

Et voilà, bonne journée. Si je suis motivé, je vous parlerais de l'installation de Fail2ban et Denyhosts, pour bannir les méchantes Ip qui viennent pourrir votre serveur \\o/

Vus : 2029
Publié par botchchikii : 30