GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Comment configurer la rotation des journaux avec Logrotate sur Ubuntu 18.04/20.04

Les fichiers journaux sont destinés à conserver des informations sur les activités du système pendant une période de temps raisonnable, mais les démons de journalisation du système ne fournissent aucun moyen de contrôler la taille des fichiers journaux. Si rien n'est fait, les fichiers journaux peuvent donc grossir et consommer tout l'espace de partition disponible sur lequel ils résident. Pour éviter que les fichiers journaux ne remplissent complètement votre système, les messages du journal peuvent être alternés, ce qui signifie que lorsqu'un certain seuil est atteint, l'ancien fichier journal est fermé et un nouveau fichier journal est ouvert.

Ici, je vais vous montrer comment faire pivoter les fichiers journaux avec logrotate sur Ubuntu 18.04/20.04.

Qu'est-ce que la rotation des journaux ?

La rotation des journaux est un processus qui résout ces problèmes en archivant périodiquement le fichier journal actuel et en en démarrant un nouveau. Il renomme et éventuellement compresse les fichiers journaux actuels, supprime les anciens fichiers journaux et force le système de journalisation à commencer à utiliser de nouveaux fichiers journaux. Il s'exécute généralement automatiquement via le cron utilitaire. Avec la rotation des journaux, vous pouvez

  • démarrer un nouveau fichier journal selon un calendrier, tel que quotidien, hebdomadaire ou mensuel
  • compresser les anciens fichiers journaux pour économiser de l'espace disque
  • élaguer les anciennes archives afin de ne conserver qu'un certain nombre d'anciens journaux.
  • renommez les anciens fichiers journaux avec un horodatage afin de savoir où rechercher les anciens journaux.
  • exécuter des commandes avant ou après la rotation d'un ensemble de journaux.

Vous pouvez voir la rotation des journaux comme le processus qui renomme un fichier journal actuel et configure un nouveau fichier journal pour les nouvelles entrées de journal. Lorsqu'un fichier journal fait l'objet d'une rotation, l'ancien fichier journal est généralement copié dans un fichier contenant la date de rotation.

1) Les fichiers de configuration de logrotate

Sur Ubuntu 18.04, les fichiers de configuration de logrotate sont /etc/logrotate.conf , ainsi que tous les fichiers dans /etc/logrotate.d Le principal logrotate.conf file spécifie les paramètres par défaut et les fichiers système à faire pivoter. Le fichier contient quelques options qui sont bien expliquées par les commentaires.

cat /etc/logrotate.conf 
# see "man logrotate" for details
# rotate log files weekly
weekly

# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

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

# system-specific logs may be configured here

Les principales options de logrotate sont :

  • hebdomadaire : fait tourner les fichiers journaux une fois par semaine
  • su root syslog : archivera les journaux en utilisant l'utilisateur spécifique (root) et groupe (syslog) pour éviter les problèmes d'autorisations
  • faire pivoter 4 : s'assure que quatre anciennes versions du fichier sont enregistrées. Fait pivoter un journal donné quatre fois avant de le supprimer, ce qui permet de conserver quatre semaines de journaux en ligne.
  • créer : L'ancien fichier est enregistré sous un nouveau nom et un nouveau fichier est créé
  • compresser : compress oblige logrotate à compresser les fichiers journaux pour économiser de l'espace. Cela se fait en utilisant gzip par défaut, mais vous pouvez spécifier un autre programme
  • inclure : Cette option importante garantit que le contenu du répertoire /etc/logrotate.d est inclus. Dans ce répertoire, il existe des fichiers qui spécifient comment gérer certains fichiers journaux individuels.

Chaque fichier dans /etc/logrotate.d est utilisé pour ajouter des paramètres supplémentaires ou remplacer les paramètres par défaut pour des fichiers spécifiques. Le dossier contient également la configuration logrotate de tous les packages que vous installez et qui nécessitent une rotation des journaux

# ls -l /etc/logrotate.d
total 40
-rw-r--r-- 1 root root 120 Nov 2 2017 alternatives
-rw-r--r-- 1 root root 442 Oct 23 2017 apache2
-rw-r--r-- 1 root root 126 Nov 20 16:39 apport
-rw-r--r-- 1 root root 173 Apr 20 10:08 apt
-rw-r--r-- 1 root root 112 Nov 2 2017 dpkg
-rw-r--r-- 1 root root 146 Apr 17 17:35 lxd
-rw-r--r-- 1 root root 845 Jan 12 10:57 mysql-server
-rw-r--r-- 1 root root 501 Jan 14 16:19 rsyslog
-rw-r--r-- 1 root root 178 Aug 15 2017 ufw
-rw-r--r-- 1 root root 235 Apr 17 14:53 unattended-upgrades

Vous pouvez voir par exemple la configuration de logrotate pour le serveur web apache

# cat /etc/logrotate.d/apache2 
/var/log/apache2/*.log {
	daily
	missingok
	rotate 14
	compress
	delaycompress
	notifempty
	create 640 root adm
	sharedscripts
	postrotate
                if invoke-rc.d apache2 status > /dev/null 2>&1; then \
                    invoke-rc.d apache2 reload > /dev/null 2>&1; \
                fi;
	endscript
	prerotate
		if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
			run-parts /etc/logrotate.d/httpd-prerotate; \
		fi; \
	endscript
}

Logrotate contient quelques options supplémentaires que vous pouvez voir ci-dessus :

  • quotidienne : tourne le journal sur la base du jour
  • manquantok : Ne génère pas d'erreur si le journal est manquant
  • delaycompress : Ne compressez pas le fichier tant qu'il n'a pas déjà été pivoté. Cela permet d'éviter la corruption si le démon ne ferme pas le fichier journal immédiatement.
  • notifiervide : Ne faites pas pivoter le fichier journal lorsqu'il est vide
  • créez 640 administrateurs racine : cela créera de nouveaux fichiers journaux avec des autorisations, un propriétaire et un groupe définis
  • scripts partagés : Si le caractère générique correspond à plusieurs fichiers, exécutez tous les scripts une fois pour tous les fichiers
  • postrotation/endscript : Spécifie certaines commandes ou scripts qui doivent être exécutés jusqu'au endscript mot-clé, après la rotation des journaux.
  • prerotate/endscript : comme postrotate/endscript , il spécifie les commandes ou les scripts qui doivent être exécutés avant le début de la rotation des journaux.

Vous pouvez avoir des informations sur les options supplémentaires en utilisant le manuel

man logrotate

2) Configurer la rotation des journaux avec logrotate

La commande logrotate renomme (ou fait pivoter) généralement les fichiers journaux de manière cyclique ; le fichier journal sera renommé pour contenir une extension numérique ou de date, et un nouveau fichier journal sera créé pour accepter les informations système. Si logrotate est configuré pour ne conserver que deux copies des anciens fichiers journaux, après deux rotations de journaux, le fichier journal le plus ancien sera automatiquement supprimé.

Normalement, la commande logrotate est installée par défaut sur votre Ubuntu 18.04 et vous pouvez vérifier la version comme ci-dessous

# logrotate --version
logrotate 3.11.0

Par défaut, logrotate s'exécute quotidiennement en exécutant le script shell /etc/cron.daily/logrotate Vous verrez que les autres fichiers cron ne contiennent aucun fichier logrotate

cat /etc/cron.daily/logrotate 
#!/bin/sh

# Clean non existent log file entries from status file
cd /var/lib/logrotate
test -e status || touch status
head -1 status > status.clean
sed 's/"//g' status | while read logfile date
do
    [ -e "$logfile" ] && echo "\"$logfile\" $date"
done >> status.clean
mv status.clean status

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

Vous pouvez voir ce que ferait la configuration logrotate de l'application si elle était exécutée avec le -d paramètre de la commande

# logrotate -d /etc/logrotate.d/mysql-server 
reading config file /etc/logrotate.d/mysql-server
Reading state from file: /var/lib/logrotate/status
Allocating hash table for state file, size 64 entries

Handling 1 logs

rotating pattern: /var/log/mysql.log /var/log/mysql/*log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/mysql.log
error: skipping "/var/log/mysql.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
Creating new state
considering log /var/log/mysql/error.log
Creating new state
  Now: 2018-05-22 06:02
  Last rotated at 2018-05-22 06:00
  log does not need rotating (log has been already rotated)

Vous pouvez configurer la rotation des journaux en tant qu'utilisateur root et en tant qu'utilisateur non root.

a) Configurer la rotation des journaux pour les packages de serveur installés

Les fichiers de configuration de Logrotate en tant qu'utilisateur root sont créés dans /etc/logrotate.d dossier au quotidien. Par exemple, nous allons configurer la rotation des journaux pour le superviseur de l'outil de surveillance. Dans un premier temps, nous allons créer le fichier de rotation des logs sur lequel nous indiquerons le fichier de configuration qui stockera les logs

# vim /etc/logrotate.d/supervisor
/var/log/supervisor/superviz.log {
        daily
        create 0640 root root
        missingok
        dateext
        rotate 3
        size=1M
        notifempty
        sharedscripts
        mail [email protected]
}

Expliquons quelques options :

  • texte de date : utilise la date comme extension pour les anciennes versions des fichiers journaux
  • taille : enregistre les fichiers dont la taille dépasse la taille spécifiée ici
  • courriel : pour demander à logrotate d'envoyer son contenu par e-mail à l'adresse spécifiée avant de l'écraser. Vous devez avoir un serveur de messagerie fonctionnel

Nous pouvons maintenant tester la configuration en appelant logrotate en mode débogage qui pointe vers la configuration principale contenant notre dossier. La commande affichera quelques informations mais nous ne trierons que celles concernant notre configuration

# logrotate /etc/logrotate.conf --debug
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file alternatives
reading config file apache2
reading config file apport
reading config file apt
reading config file dpkg
reading config file lxd
reading config file mysql-server
reading config file rsyslog
reading config file supervisor
reading config file ufw
reading config file unattended-upgrades
Reading state from file: /var/lib/logrotate/status
...
...
rotating pattern: /var/log/supervisor/supervisord.log  1048576 bytes (3 rotations)
empty log files are not rotated, old logs mailed to [email protected]
switching euid to 0 and egid to 106
considering log /var/log/supervisor/supervisord.log
Creating new state
  Now: 2018-05-22 08:16
  Last rotated at 2018-05-22 08:00
  log does not need rotating (log size is below the 'size' threshold)
switching euid to 0 and egid to 0
....
....

Vous pouvez voir que notre configuration n'a pas encore besoin de rotation. C'est parce que la taille de la condition n'est pas encore vérifiée. Une fois que cette commande s'exécute sans erreur, cela signifie que la configuration semble bonne.

b) Configurer la rotation des journaux pour une application personnalisée

Vous pouvez configurer la rotation des journaux pour les applications personnalisées qui génèrent des journaux et s'exécutent en tant qu'utilisateur non root. Par défaut, logrotate s'exécute quotidiennement. Par conséquent, si nous devons exécuter notre application toutes les heures, nous créerons la configuration de logrotate en dehors du dossier par défaut.

Prenons un exemple en configurant la rotation des logs pour discord. Nous allons créer un dossier personnel qui contiendra le fichier de configuration principal de logrotate et un dossier pour les fichiers journaux. Cette application ne comprend pas la rotation des journaux, donc logrotate s'en chargera en utilisant une implémentation de copie et de troncature

$ vim apps/logrotate.conf
/home/alain/apps/logs/discord.log {
        hourly
        copytruncate
        missingok
        dateext
        rotate 10
        compress
}

Nous avons utilisé les nouvelles options copytruncate qui tronque l'ancien fichier journal en place après avoir créé une copie, au lieu de déplacer l'ancien fichier et d'en créer un nouveau. Ceci est utile pour les services auxquels on ne peut pas dire de fermer leurs fichiers journaux.

Nous pouvons tester notre configuration mais nous devons cependant spécifier un fichier d'état. Ce fichier enregistre ce que logrotate a vu et fait la dernière fois qu'il s'est exécuté afin qu'il sache quoi faire la prochaine fois qu'il s'exécute. Notez que nous exécutons la commande en tant qu'utilisateur non root

$ logrotate /home/alain/apps/logrotate.conf --state /home/alain/apps/logrotate-state --verbose
reading config file /home/alain/apps/logrotate.conf
Reading state from file: /home/alain/apps/logrotate-state
Allocating hash table for state file, size 64 entries

Handling 1 logs

rotating pattern: /home/alain/apps/logs/discord.log  hourly (10 rotations)
empty log files are rotated, old logs are removed
considering log /home/alain/apps/logs/discord.log
Creating new state
  Now: 2018-05-22 10:09
  Last rotated at 2018-05-22 10:00
  log does not need rotating (log has been already rotated)

Si vous essayez la même commande après quelques heures, vous pouvez voir des informations supplémentaires dans la sortie telles que les informations de troncature et de compression

logrotate /home/alain/apps/logrotate.conf --state /home/alain/apps/logrotate-state --verbose
reading config file /home/alain/apps/logrotate.conf
Reading state from file: /home/alain/apps/logrotate-state
Allocating hash table for state file, size 64 entries
Creating new state

Handling 1 logs

rotating pattern: /home/alain/apps/logs/discord.log  hourly (10 rotations)
empty log files are rotated, old logs mailed to [email protected]
considering log /home/alain/apps/logs/discord.log
  Now: 2018-05-22 22:52
  Last rotated at 2018-05-22 10:23
  log needs rotating
rotating log /home/alain/apps/logs/discord.log, log->rotateCount is 10
dateext suffix '-2018052222'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
copying /home/alain/apps/logs/discord.log to /home/alain/apps/logs/discord.log-2018052222
truncating /home/alain/apps/logs/discord.log
compressing log with: /bin/gzip

Vous devez retenir qu'une configuration logrotate est définie par un fichier glob qui correspond aux fichiers journaux, suivi d'une série d'instructions entre accolades. Si une option n'est pas spécifiée dans la strophe attachée au nom du fichier journal, l'option de niveau supérieur de /etc/logrotate.conf est prioritaire. Les fichiers journaux qui ont subi une rotation ne sont stockés nulle part ; ils sont juste partis donc vous devriez penser à prendre des mesures.

Lire aussi :

  • Comment vérifier les journaux Cron sur Ubuntu 18.04
  • lnav - Outil pour afficher et analyser les fichiers journaux depuis un terminal Linux
  • Comment utiliser la commande Systemd journalctl pour gérer les journaux

Ubuntu
  1. Comment configurer un serveur FTP avec VSFTPD sur Ubuntu 20.04

  2. Comment configurer un serveur FTP avec VSFTPD sur Ubuntu 18.04

  3. Comment configurer le cluster Apache Tomcat avec 3 nœuds sur Ubuntu

  4. Comment configurer GlassFish 4.1 avec JAVA 8 dans Ubuntu 15.04

  5. Comment configurer le basculement IP avec KeepAlived sur Ubuntu et Debian

Comment installer MongoDB dans Ubuntu 22.04/20.04

Comment installer PHP 8 sur Ubuntu 22.04/20.04

Comment installer AngularJS sur Ubuntu 22.04/20.04

Comment installer KDE Plasma 5.16 sur Ubuntu 16.04/Ubuntu 18.04, 19.04

Comment installer Logrotate sur Ubuntu 16.04 LTS

Comment configurer et gérer la rotation des journaux à l'aide de Logrotate sous Linux