Outils pour utilisateurs

Outils du site


sysadmin:linux:logs:rotation-des-logs-via-logrotate

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
sysadmin:linux:logs:rotation-des-logs-via-logrotate [2019/10/24 10:09] yoannsysadmin:linux:logs:rotation-des-logs-via-logrotate [2022/01/20 00:27] (Version actuelle) yoann
Ligne 4: Ligne 4:
 ====== logrotate: rotation des fichiers logs ====== ====== logrotate: rotation des fichiers logs ======
  
-Principal intérêt de logrotate: limiter l'accroissement à l'infini de la taille des fichiers logs.+Principal intérêt de logrotate: limiter l'accroissement à l'infini des fichiers logs.
  
 Pour chaque fichier journal logrotate agit en 2 étapes: Pour chaque fichier journal logrotate agit en 2 étapes:
   - rotation: archive le fichier de log et supprime les anciennes versions.   - rotation: archive le fichier de log et supprime les anciennes versions.
-  - compression: si définit, compression du fichier ar +  - compression: si définit, compression des fichiers archivés. 
  
 <note> <note>
 L'opération de compression diminue l'occupation disque mais accroît les opérations d'I/O et l'usure disque ainsi que la consommation d’énergie. L'opération de compression diminue l'occupation disque mais accroît les opérations d'I/O et l'usure disque ainsi que la consommation d’énergie.
 </note> </note>
 +
 +Le système gère la planification de l’exécution régulière de logrotate, il suffit d'éditer les fichiers de configuration dans /etc/logrotate.d/ et de ne plus s'en soucier.
  
 ===== Principales directives ===== ===== Principales directives =====
Ligne 21: Ligne 23:
 ^ compress, nocompress    | L' archive du log sera compressée ou pas.         | ^ compress, nocompress    | L' archive du log sera compressée ou pas.         |
 ^ delaycompress           | Si la compression est active, elle a lieu lors de la prochaine rotation. | ^ delaycompress           | Si la compression est active, elle a lieu lors de la prochaine rotation. |
-^ missingok               | N’arrête pas le processus et poursuit avec le fichier de log suivant. |+^ missingok               Ne pgénère pas d'erreur si le ficheir de log est manquant. N’arrête pas le processus et poursuit avec le fichier de log suivant. |
 ^ notifempty              | Pas de rotation si le fichier de log est vide. | ^ notifempty              | Pas de rotation si le fichier de log est vide. |
 ^ size                    | Définir une taille limite déclenchant la rotation. Cette directive est prioritaire sur la périodicité de rotation. | ^ size                    | Définir une taille limite déclenchant la rotation. Cette directive est prioritaire sur la périodicité de rotation. |
Ligne 27: Ligne 29:
 ^ postrotate/endscript    | Actions/commandes a exécuter après rotation. | ^ postrotate/endscript    | Actions/commandes a exécuter après rotation. |
 ^ sharedscripts           | Les scripts pre/postrotate sont exécutés une seule fois pour le fichier log considéré et non pas à chaque rotation. | ^ sharedscripts           | Les scripts pre/postrotate sont exécutés une seule fois pour le fichier log considéré et non pas à chaque rotation. |
-^ su user group           | Change l'utilisateur/groupe d’exécution de logrotate+^ su user group           | Change l'utilisateur/groupe d’exécution de logrotate pour la création du fichier archive | 
 +^ dateext                 | Ajouter une date en suffixe au nom du fichier archive. |
  
 ===== Syntaxe ===== ===== Syntaxe =====
Ligne 59: Ligne 62:
 logrotate trace ses actions dans le fichiers **/var/lib/logrotate/status** le fichier texte indique pour chaque entrée le nom du fichier de log et le timestamp de la dernière altération. logrotate trace ses actions dans le fichiers **/var/lib/logrotate/status** le fichier texte indique pour chaque entrée le nom du fichier de log et le timestamp de la dernière altération.
  
-Pour lancer manuellement logrotate+Pour lancer manuellement logrotate utiliser l'option **-f** ou **%%--force%%** avec le fichier de configuration à tester (configuration globale ou dédiée) 
 <code bash> <code bash>
-logrotate --verbose -/etc/logrotate.conf+logrotate --verbose --force /etc/logrotate.d/nextcloud 
 +logrotate --verbose --force /etc/logrotate.conf
 </code> </code>
  
-Pour déboguer/vérifier le bon fonctionnement la configuration courante:+Pour déboguer/vérifier le bon fonctionnement la configuration courante utiliser l'option **-d** ou **%%--debug%%**:
 <code bash> <code bash>
 logrotate -d /etc/logrotate.conf logrotate -d /etc/logrotate.conf
 </code> </code>
 +
 +<note>
 +Avec l'option **-d**, les notifications sont affichées mais aucune modification n'est apportée au système de fichier (exécution dry-run).
 +</note>
 +
  
 ===== Sécurité et droits d'accès ===== ===== Sécurité et droits d'accès =====
Ligne 99: Ligne 108:
 </file> </file>
  
-===== Dépannages =====+===== Exécution par l'utilisateur =====
  
 +**logrotate** peut être lancé périodiquement par un tout utilisateur non privilégié du système. Pour cela l'utilisateur crée son fichier de configuration et utilise cron pour appeler logrotate avec la périodicité qu'il souhaite:
 +
 +<code bash>
 +crontab -e
 +</code>
 +
 +La commande présente dans le fichier cron sera de la forme:
 +
 +<file>
 +# Exemple de contenu du crontab de l'utilisateur
 +15 * * * * /usr/sbin/logrotate /home/username/logrotate.conf --state /home/username/logrotate-state
 +</file>
 +
 +===== Troubleshooting =====
 +
 +==== La rotation des logs ne se produit pas ====
 +
 +Lorsque logrotate est exécuté avec l'argument **-d** les messages ne retournent pas d'anomalies cependant la rotation des logs ne se fait pas.
 +
 +Ceci peut être du à:
 +  * Des problèmes de droits d'accès lorsque logrotate s’exécute sous un autre compte que root (directive su) 
 +  * Si des scripts prerotate existent une erreur d'exécution peut interrompre le processus.
 +
 +Invoquer la commande logrotate avec le fichier de configuration à tester et l'option -f pour forcer l’exécution d'une rotation et déclencher l'appel des scripts. Les erreurs retournées devront être corrigées.
 +
 + 
 ==== Apache n’écrit pas dans le nouveau fichier de log ==== ==== Apache n’écrit pas dans le nouveau fichier de log ====
  
Ligne 111: Ligne 146:
 /usr/sbin/apache2ctl -k graceful /usr/sbin/apache2ctl -k graceful
 endscript endscript
 +</file>
 +
 +<note>
 +L'option **copytruncate** tronque le fichier log courant en place après avoir créer une copie plutôt que de renommer le fichier et de créer un nouveau fichier vide. Elle est nécessaire pour les services pour lesquels on ne peut pas demander la fermeture de leur fichiers de logs. 
 +</note>
 +
 +==== UFW : le fichier ufw.log reste vide après rotation ====
 +
 +Après rotation, le nouveau fichier ufw.log reste vide. Les événements continuent à être écris dans le fichier archive ufw.x.log
 +
 +C'est le daemon rsyslogd qui se charge d'écrire les messages dans le fichier /var/log/ufw.log. Dans le fichier de configuration /etc/logrorate.d/ufw, on peut voir que la commande proposée par défaut retourne une erreur quand elle est exécutée manuellement.
 +
 +<code bash>
 +invoke-rc.d rsyslog rotate
 +* Closing open files rsyslogd                                                            [fail]
 +</code>
 +
 +Cela peut être du au fait que rsyslog géré comme unité  par **systemd**. Les commandes suivantes ont le même effet et ne retourne pas d'erreur:
 +<code bash>
 +# cette commande est aussi utilisée par d'autres fichiers de configuration
 +/usr/lib/rsyslog/rsyslog-rotate
 +
 +# equivalent
 +systemctl kill -s HUP rsyslog.service
 +</code>
 +
 +Ci-dessous un exemple de fichier **''/etc/logrotate.d/ufw''** modifié:
 +
 +<file conf ufw>
 +/var/log/ufw.log
 +{
 +  su root syslog
 +
 +  # Rotation quotidienne
 +  daily 
 +
 +  # Conserve 30 fichiers (un mois) 
 +  rotate 30
 +
 +  # Les fichiers archives ne sont pas compressés
 +  nocompress
 +
 +  # Ne génère pas de message d'erreur si le fichier est manquant
 +  missingok
 +
 +  # droit d'acces et propriétaire du fichier apres rotation
 +  create 0644 syslog adm
 +
 +  sharedscripts
 +  postrotate
 +    /usr/lib/rsyslog/rsyslog-rotate
 +  endscript
 +}
 </file> </file>
  
Ligne 119: Ligne 207:
   * https://www.croc-informatique.fr/2009/06/rotation-des-logs-avec-logrotate/   * https://www.croc-informatique.fr/2009/06/rotation-des-logs-avec-logrotate/
   * https://chasemp.github.io/2013/07/24/su-directive-logrotate/   * https://chasemp.github.io/2013/07/24/su-directive-logrotate/
 +  * https://www.techrepublic.com/article/manage-linux-log-files-with-logrotate/
 +  * https://linoxide.com/setup-log-rotation-logrotate-ubuntu/
 +  * https://www.digitalocean.com/community/tutorials/how-to-manage-logfiles-with-logrotate-on-ubuntu-20-04
sysadmin/linux/logs/rotation-des-logs-via-logrotate.1571911782.txt.gz · Dernière modification : 2021/02/01 21:51 (modification externe)