11 votes

Cronolog vs logrotate

Quel outil de rotation des journaux préférez-vous ?

14voto

Tom Feiner Points 16168

D'après mon expérience, logrotate est excellent. Il est très flexible et fonctionne bien avec la plupart des logiciels.

Cependant, il y a quelques problèmes avec lui, et comme cronolog est principalement une installation de rotation de journaux web, je vais écrire mon expérience avec logrotate + apache qui était problématique :

Lors de la rotation des journaux, nous devons informer apache qu'un journal est en cours de rotation, car même si logrotate renomme access.log en access.log.1, apache continuera d'écrire sur access.log.1, car il écrit sur l'inode, et renommer le fichier n'affecte pas le numéro d'inode.

Sur debian etch (et probablement beaucoup d'autres distros), logrotate est utilisé pour faire tourner les journaux d'apache. Or, apache a un redémarrage gracieux qui conseille aux processus enfants d'apache de se terminer une fois qu'ils ont fini de servir les connexions existantes, apache relit alors sa configuration, génère de nouveaux processus enfants, qui commencent à écrire dans un nouveau fichier journal (au cas où le précédent aurait été tourné).

Cela semble être une excellente solution, mais le redémarrage en douceur ne fonctionne pas toujours dans certaines conditions (comme une charge importante). Les développeurs de Debian ont donc décidé d'utiliser un redémarrage d'apache au lieu d'un redémarrage en douceur, dans la configuration de apache logrotate. Malheureusement, cela entraîne l'abandon de toutes les connexions en même temps, ce qui est très mauvais pour les sites très chargés. En outre, le redémarrage d'apache peut également causer des problèmes comme l'arrêt et le non-démarrage d'apache (également dans certaines situations de charge), voir les liens de bogue ci-dessous pour plus de détails.

L'essentiel est que logrotate est génial, mais peut conduire à certains problèmes pour certains programmes. Je n'ai pas beaucoup d'expérience avec cronolog, mais comme il écrit les journaux par un tuyau, il ne nécessite aucun rechargement d'apache lorsqu'il fait tourner les fichiers journaux, ce qui résout essentiellement tout ce qui est décrit ci-dessus.

Bogues connexes de logrotate/apache debian :

  1. Bogue de Debian #301702
  2. Bogue de Debian #400455

2 votes

La solution pour ce qui précède est d'utiliser truncate ! ce qu'il fait est de copier le contenu de access.log vers access.log.1 puis de vider access.log (comme vous le voyez l'inode reste de access_log reste le même). En général, les journaux ne dépassent pas quelques Go (dans le pire des cas), donc l'ensemble du processus ne prendra pas beaucoup de temps !

3voto

jammus Points 1796

Je préfère cronolog, mais ce n'est pas une préférence très marquée.

logrotate où est lancé par cron, et si un système est en panne pour une raison quelconque lorsque la rotation aurait dû avoir lieu, alors vos fichiers journaux ne seront pas tournés.

J'aime aussi que les fichiers journaux aient la date (%Y%m.combined.access.log) dans leur nom car je garde ces journaux pendant longtemps. Sur la plupart des systèmes, apache logrotate nomme par défaut les fichiers access.log, access.log.1, etc. Il est peut-être possible d'utiliser une date dans les fichiers journaux avec logrotate, mais je n'ai pas trouvé comment faire la dernière fois que j'ai regardé.

2 votes

Le problème où logrotate ne fonctionne pas si l'heure du cron est dépassée peut être résolu en installant le paquet "anacron".

0 votes

Ou encore mieux, vous pouvez enregistrer vos logs dans le format désiré - cela peut être fait avec des modèles dans rsyslog - (%year%-%month%-%day%_lala.log) . dans ce cas, vous n'avez même pas besoin de faire tourner les logs, car chaque jour le nom est changé !

2voto

David Pashley Points 22851

Je n'ai jamais utilisé que logrotate. C'est ce que Debian utilise par défaut et je n'ai jamais eu à m'en plaindre.

2voto

Marc DM Points 21

J'utilise presque exclusivement cronolog sur logrotate . logrotate est fourni avec Debian, et je l'autorise à continuer à fonctionner pour les services système comme les journaux du serveur de courrier. Mais pour Apache et lighttpd les fichiers journaux, c'est tout cronolog .

Une des raisons pour lesquelles j'utilise cronolog est que toute la configuration se fait dans la ligne log-file de la configuration du serveur web.

par exemple, dans un lighttpd vous pourriez mettre :

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"

Et tous obtiennent un nouveau fichier journal chaque semaine sans autre configuration. Ou vous pouvez être créatif et faire quelque chose comme :

accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"

Et obtenez un fichier journal qui montre le trafic par jour de la semaine. Par exemple, tous les dimanches, tous les mardis.

Mieux encore, même si le serveur est arrêté pendant un certain temps, le fichier journal correct sera utilisé au redémarrage.

1 votes

Cela ressemble beaucoup à svlogd (de la lignée de runit et daemontools).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X