====== Logrotate ====== ====== Généralités ====== ===== A quoi sert la rotation des logs ? ===== La rotation des logs sert à éviter de se retrouver avec des fichiers de logs d’une application qui font 2 Go ! En effet, la totalité des applications disposent d’un fichier de logs qui retrace les actions. En règle générale, la rotation est automatique pour tous les paquetages Red Hat intégrés à la distribution. L’installeur se chargeant de paramétrer l’outil nommé logrotate à cet effet. La où on a réellement besoin de mettre les mains dans le cambouis c’est quand on ajoute manuellement un log particulier à un endroit particulier ou tout simplement qu’on installe un paquetage depuis ses sources et non avec la commande RPM. Ainsi, on choisit les emplacements des logs mais aucune rotation n’est positionnée dessus par défaut. Il faut donc l’ajouter et c’est l’objet de cette documentation. ====== Configuration ====== ===== Configuration générale ===== ^ Emplacement ^ Fonction ^ | /etc/cron.daily/logrotate | Cron exécuté tout les jours à 4h02 du matin. | | /etc/logrotate.conf | Fichier de configuration du service logrotate. | | /etc/logrotate.d/ | Dossier qui contient les fichiers de configurations inclus. | ===== Configuration spécifique ===== Ajout d’un log. Par exemple pour un service que nous venons d'installer ou des logs de scripts persos, nous avons besoins que ces scripts soient rotationnés. Voici ce qu’il faut comprendre et ajouter pour rotationner les logs. ==== Logrotate tous les jours ==== Logrotate est le logiciel qui permet de gérer la rotation. Il est exécuté par défaut tous les jours à 4h02 du matin via cron. Voici le fichier ''/etc/cron.daily/logrotate''. #!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0 ==== Configuration globale de logrotate ==== La configuration globale de logrotate se situe dans ''/etc/logrotate.conf''. Voici le fichier par défaut que je n’ai pas modifié. # see "man logrotate" for details # rotate log files weekly weekly # 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 # RPM packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp -- we'll rotate them here /var/log/wtmp { monthly minsize 1M create 0664 root utmp rotate 1 } # system-specific logs may be also be configured here. Attention lorsqu’on modifie ce fichier, cela modifie la configuration par défaut de la totalité des rotations de logs de tous les services qui s’en servent. Dans notre cas, ne pas y toucher. On va spécifier la configuration spécifique à chaque log que nous voulons gérer. La configuration spécifique prévaut sur la configuration globale. C’est un principe unanimement appliqué sous Linux. Le fichier ''logrotate.conf'' inclus le dossier ''logrotate.d'' qui contient en général, un fichier par services. C’est en fait ici qu’il faut ajouter un fichier qui contiendra les directives que nous voulons pour chacun des fichiers de logs. ==== Exemple détaillé ==== /usr/application/log/*.log { daily rotate 1 size=1M compress dateext missingok notifempty } * ''compress'' - compression des journaux utilisant gzip. * ''create mode owner group'' - spécifie les permissions (comme chmod) et le propriétaire pour créer les journaux. * ''daily'' (chaque jour), ''weekly'' (chaque semaine), ''monthly'' (chaque mois) - intervalle de temps de rotation. * ''size size[G|M|k]'' - faire tourner le journal, si il sa taille dépasse size(taille) bit / Kilobit / Megabit / Gigabit. * ''mail address'' - envoyer le journal à l'adresse email spécifiée. * ''olddir directory'' - déplacer le journal vers le répertoire spécifié. * ''rotate count'' - conserver les count anciens journaux. * ''dateext'' - archive les anciennes versions de logs en ajoutant la date de rotation sous la forme YYYMMDD à la place d’ajouter un nombre. Exemple ''access_log-20090529.gz'' au lieu de ''access_log.1.gz''. ==== Rotation logs sauvegarde ==== Pour un log de sauvegarde, j’ai créé dans /etc/logrotate.d/ le fichier suivant. /opt/scripts/log/*.log { daily rotate 3 size=1M compress dateext missingok notifempty } ==== Rotation logs Apache ==== Exemple de rotation des logs Apache mis en place par défaut. /var/log/httpd/*_log /var/log/httpd/apache_runtime_status /var/log/httpd/ssl_mutex { rotate 5 monthly missingok notifempty nocompress prerotate /etc/rc.d/init.d/httpd closelogs > /dev/null 2>&1 endscript postrotate /etc/rc.d/init.d/httpd closelogs > /dev/null 2>&1 endscript } Avec cet outil, on peut facilement rotationner les nombreux logs auxquels on a à faire face. ===== Test de logrotate ==== Pour exécuter immédiatement la rotation de tous les logs systèmes. /usr/sbin/logrotate /etc/logrotate.conf