Différences entre les versions de « Logrotate »

De UnixManiax
Aller à la navigation Aller à la recherche
(Page créée avec « Category:linux =Présentation= Logrotate est la partie de syslog qui gère la rotation des fichiers de log, évitant ainsi qu'ils ne deviennent trop gros ou trop nom... »)
 
 
(5 versions intermédiaires par le même utilisateur non affichées)
Ligne 33 : Ligne 33 :
Remarque : ce changement de droits ne sera effectué qu'à la prochaine rotation du fichier log.
Remarque : ce changement de droits ne sera effectué qu'à la prochaine rotation du fichier log.


Attention : si les logs sont dans un répertoire qui est accessible en écriture à un groupe autre que root, logrotate va renvoyer une erreur. Dans ce cas, il faut ajouter une ligne '''su'''.
Exemple :
$ ls -ld /var/log/mon_appli/
drwxrwxr-x 6 appli_user appli_grp 20480  4 juin  15:08 /var/log/mon_appli/
$ cat /etc/logrotate.d/mon_appli.conf
/var/log/mon_appli.log
{
  create 644 root root
  su root root
  ...
}


=Exemple plus complet=
=Exemple plus complet=
Ligne 43 : Ligne 57 :
     compress   
     compress   
     daily     
     daily     
     delaycompress 2
     delaycompress
     rotate 7
     rotate 7
     missingok
     missingok
Ligne 57 : Ligne 71 :
* '''create 644 apache apache''' => les fichiers appartiendront à apache:apache avec les droits 644 (il ne faut pas mettre les ":" entre le user et le group.
* '''create 644 apache apache''' => les fichiers appartiendront à apache:apache avec les droits 644 (il ne faut pas mettre les ":" entre le user et le group.
* '''compress''' => les fichiers seront compressés...
* '''compress''' => les fichiers seront compressés...
* '''delaycompress 2''' => ... sauf les deux plus récents
* '''delaycompress''' => ... sauf le log courant et le précédent
* '''daily''' => la rotation se fait tous les jours
* '''daily''' => la rotation se fait tous les jours
* '''rotate 7''' => on garde 7 logs en archive (en plus du log courant)
* '''rotate 7''' => on garde 7 logs en archive (en plus du log courant)
* '''missingok''' => si un fichier de log est manquant, on passe au suivant sans générer d'erreur
* '''missingok''' => si un fichier de log est manquant, on passe au suivant sans générer d'erreur
* '''notifyempty''' => la rotation ne se fait pas si le log est vide
* '''notifempty''' => la rotation ne se fait pas si le log est vide
* '''sharedscripts''' => les scripts qui suivent ne seront exécutés qu'une seule fois par rotation, et non une fois par rotation et par fichier rencontré
* '''sharedscripts''' => les scripts qui suivent ne seront exécutés qu'une seule fois par rotation, et non une fois par rotation et par fichier rencontré
* '''postrotate/endscript''' => les lignes qui se trouvent entre ''postrotate'' et ''endscript'' seront exécutées après la rotation du fichier de log.
* '''postrotate/endscript''' => les lignes qui se trouvent entre ''postrotate'' et ''endscript'' seront exécutées après la rotation du fichier de log.
Ligne 88 : Ligne 102 :
  -rw-r--r-- 1 root root  717 Jun  1 04:02 error_log.7.gz
  -rw-r--r-- 1 root root  717 Jun  1 04:02 error_log.7.gz


=Les autres options de logrotate=
Au lieu de faire une rotation quotidienne, comme c'est le cas dans l'exemple précédent, une option courante est d'effectuer la rotation dès que le log atteint une certaine taille. Dans ce cas on utilise l'option "size" suivie de la taille en octets. Exemple :
size 300M
Sinon, la page man est tellement bien faite qu'il n'est pas utile de tout refaire. Vous trouverez tout ici : [http://www.delafond.org/traducmanfr/man/man8/logrotate.8.html http://www.delafond.org/traducmanfr/man/man8/logrotate.8.html]
=Compléments=
Logrotate est normalement appelé par la crontab. Sinon, vous pouvez le forcer manuellement avec l'option "-f" :


=Les autres options de logrotate=
logrotate -f /etc/logrotate.conf
 
Ceci va forcer l'exécution de toutes les confs logrotate. Si on veut juste forcer un script, par exemple pour tester sa syntaxe, on spécifie le fichier :


La page man est tellement bien faite qu'il n'est pas utile de tout refaire. Vous trouverez tout ici : [http://www.delafond.org/traducmanfr/man/man8/logrotate.8.html http://www.delafond.org/traducmanfr/man/man8/logrotate.8.html]
logrotate -f /etc/logrotate.d/mon_logrotate

Version actuelle datée du 17 août 2020 à 15:50


Présentation

Logrotate est la partie de syslog qui gère la rotation des fichiers de log, évitant ainsi qu'ils ne deviennent trop gros ou trop nombreux. Chaque log est paramétrable indépendament des autres.

Logrotate possède un fichier de configuration principal : /etc/logrotate.conf.

En général, logrotate.conf inclue tout le répertoire /etc/logrorate.d/, ce qui permet d'avoir autant de sous-fichiers de configuration que l'on veut dans ce répertoire. La totalité du sous-répertoire est parcourue. On peut en inclure d'autres. La syntaxe pour inclure /etc/logrotate.d est :

include /etc/logrotate.d

Donc quand on veut ajouter une configuration, on peut au choix modifier logrotate.conf ou ajouter un nouveau fichier dans logrotate.d, pour ne pas surcharger le fichier principal.


Exemple : modifier les droits des logs

Il peut être intéressant de modifier les droits de certains fichiers de log pour les rendre lisibles à certains comptes, par exemple un compte de surveillance, qui a besoin d'un accès en lecture seule sur des logs qui ne sont nativements accessibles qu'à root.

Bien sûr, on peut faire un chmod directement dessus, mais à la prochaine rotation de fichier, le nouveau log reprendra les droits par défaut.

Voici justement comment modifier les droits par défaut du fichier /var/log/maillog.

Editer le fichier /etc/logrotate.conf, et ajouter les lignes suivantes :

# ajout des droits 644 sur maillog 				
/var/log/maillog { 				
  create 644 root root				
}

Les options après le mot create sont, dans l'ordre, les droits, le propriétaire, le groupe. Ici le fichier appartiendra à root:root avec les droits 644.

Remarque : ce changement de droits ne sera effectué qu'à la prochaine rotation du fichier log.

Attention : si les logs sont dans un répertoire qui est accessible en écriture à un groupe autre que root, logrotate va renvoyer une erreur. Dans ce cas, il faut ajouter une ligne su.

Exemple :

$ ls -ld /var/log/mon_appli/
drwxrwxr-x 6 appli_user appli_grp 20480  4 juin  15:08 /var/log/mon_appli/

$ cat /etc/logrotate.d/mon_appli.conf
/var/log/mon_appli.log
{
  create 644 root root
  su root root
  ...
}

Exemple plus complet

Voici notre fichier d'exemple :

# cat /etc/logrotate.d/httpd 
/var/log/httpd/*log {
    create 644 apache apache
    compress  
    daily     
    delaycompress
    rotate 7
    missingok
    notifempty
    sharedscripts
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

Explications :

  • /var/log/httpd/*log { => ce qui va être contenu entre les { } concernera tous les fichiers /var/log/httpd/*log
  • create 644 apache apache => les fichiers appartiendront à apache:apache avec les droits 644 (il ne faut pas mettre les ":" entre le user et le group.
  • compress => les fichiers seront compressés...
  • delaycompress => ... sauf le log courant et le précédent
  • daily => la rotation se fait tous les jours
  • rotate 7 => on garde 7 logs en archive (en plus du log courant)
  • missingok => si un fichier de log est manquant, on passe au suivant sans générer d'erreur
  • notifempty => la rotation ne se fait pas si le log est vide
  • sharedscripts => les scripts qui suivent ne seront exécutés qu'une seule fois par rotation, et non une fois par rotation et par fichier rencontré
  • postrotate/endscript => les lignes qui se trouvent entre postrotate et endscript seront exécutées après la rotation du fichier de log.
  • } => fin


Voici à quoi ressemblent les fichiers de logs après quelques semaines :

# ls -lh /var/log/httpd/
total 158M
-rw-r--r-- 1 root root  47M Jun  6 15:29 access_log
-rw-r--r-- 1 root root  91M Jun  6 04:02 access_log.1
-rw-r--r-- 1 root root 3.9M Jun  6 04:02 access_log.2.gz
-rw-r--r-- 1 root root 1.9M Jun  5 04:02 access_log.3.gz
-rw-r--r-- 1 root root 2.1M Jun  4 04:02 access_log.4.gz
-rw-r--r-- 1 root root 4.0M Jun  3 04:02 access_log.5.gz
-rw-r--r-- 1 root root 3.9M Jun  2 04:02 access_log.6.gz
-rw-r--r-- 1 root root 5.1M Jun  1 04:02 access_log.7.gz
-rw-r--r-- 1 root root 1.6K Jun  6 14:55 error_log
-rw-r--r-- 1 root root  578 Jun  6 04:02 error_log.1
-rw-r--r-- 1 root root  11K Jun  6 04:02 error_log.2.gz
-rw-r--r-- 1 root root  363 Jun  5 04:02 error_log.3.gz
-rw-r--r-- 1 root root  276 Jun  4 04:02 error_log.4.gz
-rw-r--r-- 1 root root  521 Jun  3 04:02 error_log.5.gz
-rw-r--r-- 1 root root  480 Jun  2 04:02 error_log.6.gz
-rw-r--r-- 1 root root  717 Jun  1 04:02 error_log.7.gz

Les autres options de logrotate

Au lieu de faire une rotation quotidienne, comme c'est le cas dans l'exemple précédent, une option courante est d'effectuer la rotation dès que le log atteint une certaine taille. Dans ce cas on utilise l'option "size" suivie de la taille en octets. Exemple :

size 300M

Sinon, la page man est tellement bien faite qu'il n'est pas utile de tout refaire. Vous trouverez tout ici : http://www.delafond.org/traducmanfr/man/man8/logrotate.8.html


Compléments

Logrotate est normalement appelé par la crontab. Sinon, vous pouvez le forcer manuellement avec l'option "-f" :

logrotate -f /etc/logrotate.conf

Ceci va forcer l'exécution de toutes les confs logrotate. Si on veut juste forcer un script, par exemple pour tester sa syntaxe, on spécifie le fichier :

logrotate -f /etc/logrotate.d/mon_logrotate