Rotation des logs avec logrotate

De Wiki Amis SH
Aller à la navigation Aller à la recherche



Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack


Rotation des logs avec logrotate

# Logrotate est un éléments important pour maintenir un serveur.
# Lors de tests de sécurité, la présence de logrotate pourra être vérifiée.
# Si les fichiers de journalisation de sont pas recréés avec logrotate, ils risquent de prendre un volume trop important ce qui dégradera les performances du système, jusqu'au plantage du système.

Configuration générale

# Configuration générale :
sudo nano /etc/logrotate.conf

Envoyer un mail à chaque rotation

# Les journaux seront conservés jusqu'à 3 rotations.
# Une rotation de 0 supprime les journaux immédiatement après leur rotation.
# La directive mail enverra un mail une fois les x premières rotations effectuées.
# Le système aura besoin d'un agent de transfert de courrier fonctionnel pour pouvoir envoyer des mails.
rotate 3
# Ajouter le mail de l'administrateur à contacter :
# Le fonctionnement de la directive mail dépend de la valeur de la directive rotate !
# Le dernier journal existant qui va être supprimé est envoyé par mail.
mail mail@visionduweb.com

Notes sur la compression des fichiers de journalisation

# La compression des archives réalisera d'avantage d'échanges avec le support de stockage et consommera d'avantage le processeur et la mémoire.
# Cela entraînera une augmentation de l'usure du disque et de la consommation d'énergie globale.

Consulter le manuel de logrotate

man logrotate

Afficher la version de logrotate

sudo logrotate --version
logrotate 3.14.0
Default mail command:    /usr/bin/mail
Default compress command:   /bin/gzip
Default uncompress command: /bin/gunzip
Default compress extension: .gz
Default state file path: /var/lib/logrotate/status
ACL support:    yes
SELinux support:   yes

Lister les fichiers qui font partie de la rotation

# S'assurer qu'un fichier de logs effectue correctement ses rotations, ou, vérifier la date et l'heure de sa dernière rotation.
cat /var/lib/logrotate/status

Supprimer un fichier dans la liste des rotations

# Après avoir supprimé une configuration, il me semble que certains fichiers puissent rester dans la liste des fichiers surveillés pour la rotation.
# Supprimer directement les fichiers à ne pas suivre depuis le fichier status semblerait être cohérent.
sudo nano /var/lib/logrotate/status

Ajouter ou supprimer une configuration pour journaliser un fichier

# Il n'est pas nécessaire de redémarrer logrotate pour que la configuration soit prise en compte car logrotate est une tâche planifiée qui s'exécute à intervalles réguliers.
cd /etc/logrotate.d

Exemples de configurations pour logrotate

Configurer la rotation du fichier de log access.log

# Les logs d'accès doivent être conservés une année, soit, 52 semaines.

Configurer la rotation du fichier de log auth.log

# Vérifier que le fichier de rotation des logs /etc/logrotate.d/rsyslog mentionne bien le fichier /var/log/auth.log sinon ce fichier n’arrêtera pas de prendre du volume.

Configurer la rotation du fichier de log iptables.log

# Utiliser logrotate pour archiver régulièrement le contenu du fichier de journalisation /var/log/iptables.log pour le pare-feu Iptables.
# Ce fichier est obtenu suite à la configuration de Rsyslog qui permet de filtrer les informations du kernel correspondantes aux commentaires ajoutés dans chaque règle Iptables.
/var/log/iptables.log {
        # Script avant la rotation :
        prerotate
                # Envoi de mail :
                # echo "Commencement de la rotation Iptables : $(date)" | mail -s "Commencement de la rotation Iptables depuis le serveur." mail@visionduweb.com
        endscript

        # Périodicité de la rotation : yearly monthly weekly daily hourly :
        hourly
        # Le poids maximum autorisé avant une rotation. Size est prioritaire, ainsi, si le fichier atteint 4Mo en 10 minutes, il y aura une rotation :
        maxsize 1M
        # Les journaux seront conservés jusqu'à 3 rotations.
        # Une rotation de 0 supprime les journaux immédiatement après leur rotation.
        # La directive mail enverra un mail une fois les x premières rotations effectuées.
        # Le système aura besoin d'un agent de transfert de courrier fonctionnel pour pouvoir envoyer des mails.
        rotate 3
        # 'missingok' permet au processus de ne pas s'arrêter à chaque erreur et de poursuivre avec le fichier de log suivant :
        missingok
        # Ajouter le mail de l'administrateur à contacter :
        # Le fonctionnement de la directive mail dépend de la valeur de la directive rotate !
        # Le dernier journal existant qui va être supprimé est envoyé par mail.
        mail mail@visionduweb.com
        # Utiliser la directive nomail pour ne pas envoyer de mail :
        # nomail
        # 'notifempty' empêche la rotation de s'effectuer si le fichier de log est vide :
        notifempty
        # Si le fichier n'existe pas, il est créé avec le propriétaire, le groupe et les droits indiqués, après la rotation des logs :
        create 640 root adm
        #  Les fichiers de logs peuvent être compressés au format gzip en spécifiant 'compress' :
        compress
        # Avec l'option nocompress, logrotate renomme fichier.log en 'fichier.log.1'
        # nocompress
        # Par défaut, logrotate compresse les fichiers à l'aide de la commande gzip.
        # Utiliser un autre choix de compression comme bzip2 ou xz en l'ajoutant en argument de la directive compresscmd :
        # compresscmd bzip2
        # compresscmd xz
        # Si compression est activé, le fichier de log compressé sera renommé.
        # Par défaut, "fail2ban.log.1.gz".
        # Avec la valeur ".log", fichier.1.log.gz :
        # Avec la valeur ".", conserve le modèle appliqué par défaut. 
        extension .
        # 'delaycompress' retarde le processus de compression jusqu'à la prochaine rotation.
        # 'delaycompress' ne fonctionne que si l'option 'compress' est spécifiée :
        delaycompress
        # Compresse immédiatement le fichier qui a tourné.
        # nodelaycompress

        # Script après la rotation :
        postrotate
                # Forcer Rsyslog à rouvrir les fichiers qu'il utilise pour écrire sur les nouveaux journaux une fois la rotation effectuée.
                # Après que logrotate ait déplacé les anciens fichiers, Rsyslog commencera à écrire dans les nouveaux.

                # Quand Rsyslog va effectuer la rotation du fichier "/var/log/syslog", il va le déplacer vers "/var/log/syslog.1" et créer un nouveau fichier "/var/log/syslog" vide.
                # Rsyslog n'écrit pas directement dans le fichier nommé "/var/log/syslog", mais dans un descripteur de fichier qu'il a obtenu la première fois qu'il a ouvert le fichier.
                # Lors du déplacement de "/var/log/syslog" vers "/var/log/syslog.1", Rsyslog continue d'écrire dans "/var/log/syslog.1" car c'est vers ce fichier que pointe son descripteur.
                # On pourrait supprimer le fichier "/var/log/syslog.1" mais Rsyslog continuerait d'y écrire.
                # C'est ce qui se passe quand des fichiers supprimés semblent toujours occuper de l'espace.
                # Tant que les descripteurs de fichiers restent ouverts, l'espace n'est pas libéré.
                # Cela se produit uniquement lorsque la dernière référence au fichier est fermée.

                # L'argument "rotate" indique à Rsyslog qu'il doit rouvrir les fichiers pour obtenir de nouveaux descripteurs de fichiers vers les nouveaux fichiers.
                # Les anciens fichiers pourront être correctement fermés.

                # Forcer la rotation pour un seul fichier de journalisation :
                # sudo logrotate -f /etc/logrotate.d/iptables

                # Les commandes suivantes ne me permettent pas la réécriture dans le nouveau journal :
                # invoke-rc.d rsyslog rotate > /dev/null
                # kill -HUP $(cat /var/run/rsyslogd.pid)
                # service rsyslog rotate >/dev/null 2>&1 || true

                # Relancer Rsyslog permet l'écriture dans le nouveau fichier iptables.log :
                /usr/lib/rsyslog/rsyslog-rotate

                # Envoi de mail :
                # echo "Fin de la rotation Iptables : $(date)" | mail -s "Fin de la rotation Iptables depuis le serveur." mail@visionduweb.com
        endscript
}

Forcer la rotation

# Forcer la rotation pour faire tourner tous les fichiers de journalisation qui utiliseront un nouveau fichier vide, qui se rempliera à nouveau :
sudo logrotate -f /etc/logrotate.conf
# Forcer la rotation pour faire tourner tous les fichiers de journalisation qui utiliseront un nouveau fichier vide, qui se rempliera à nouveau :
# Verbose pour voir ce qui est fait en détail :
sudo logrotate -vf /etc/logrotate.conf
# Forcer la rotation pour faire tourner tous les fichiers de journalisation qui utiliseront un nouveau fichier vide, qui se rempliera à nouveau :
# Utiliser le mode debug :
sudo logrotate -vfd /etc/logrotate.conf
# Forcer la rotation pour un seul fichier de journalisation :
# Pour garantir la réécriture dans le nouveau fichier de journalisation, ajouter le script suivant dans postrotate pour fermer correctement l'ancien fichier ! 
# Relancer Rsyslog permet l'écriture dans le nouveau fichier iptables.log :
/usr/lib/rsyslog/rsyslog-rotate 
# Lancer la rotation :
sudo logrotate -f /etc/logrotate.d/iptables

La rotation des logs peut être gérée avec une tâche cron

# Créer une entrée dans "/etc/cron.daily/logrotate", la rotation des logs sera alors effectuée tous les jours.
# Créer et ouvrir le fichier logrotate pour ajouter la configuration suivante.
sudo nano /etc/cron.daily/logrotate
#!/bin/sh
logrotate /etc/logrotate.conf
# Le script suivant est créé automatiquement par logrotate :
#!/bin/sh

# skip in favour of systemd timer
if [ -d /run/systemd/system ]; then
   exit 0
fi

# this cronjob persists removals (but not purges)
if [ ! -x /usr/sbin/logrotate ]; then
    exit 0
fi

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit $EXITVALUE

Erreurs rencontrées

Erreur de rotation des logs php

NOTICE: php7.2-fpm : error log file re-opened

NOTICE: php7.2-fpm : error log file re-opened.

Bibliographie

 Documentation Ubuntu pour logrotate : http://doc.ubuntu-fr.org/logrotate
 Le manuel de logrotate : http://www.delafond.org/traducmanfr/man/man8/logrotate.8.html
 Les options de logrotate : https://uubu.fr/html/logrotate.conf.html

NAVIGATION

PARTICIPER ET PARTAGER

Bienvenue sur le wiki de Amis SH.
De nombreuses pages sont partagées sur ce wiki.
Créer un compte utilisateur pour participer sur le wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Utiliser la recherche interne du wiki pour trouver votre contenu.
La page de discussion de Amis SH vous permet de poser vos questions.
Consulter le site amis-sh.fr pour installer votre propre serveur web.
Améliorer le contenu des pages avec vos retours depuis l'onglet discussion.
Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique.
Protéger votre système Linux ou Windows avec cette page dédiée à la sécurité.

SOUTENIR CE WIKI

Soutenir le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Miner de la cryptomonnaie.