Dans ma configuration, j'ai rsyslog qui est en charge de suivre les changements d' /home/user/my_app/shared/log/unicorn.stderr.log
utilisation imfile
. Le contenu est envoyé à un autre serveur de journalisation distant à l'aide de TCP.
Lorsque le fichier journal tourne, rsyslog cesse d'envoyer des données au serveur distant.
J'ai essayé de recharger rsyslog, d'envoyer un signal HUP et de le redémarrer complètement, mais rien n'a fonctionné.
Les seuls moyens que j'ai pu trouver qui fonctionnaient réellement étaient sales:
- arrêtez le service, supprimez les fichiers statistiques rsyslog et redémarrez rsyslog. Tout cela dans un crochet postrotate dans mon fichier logrotate.
kill -9
rsyslog et recommencez.
Existe-t-il un moyen approprié de le faire sans toucher aux composants internes de rsyslog?
Fichier rsyslog
$ ModLoad immark $ ModLoad imudp $ ModLoad imtcp $ ModLoad imuxsock $ ModLoad imklog Imfile $ ModLoad $ template WithoutTimeFormat, "[environnement] [% syslogtag%] -% msg%" $ WorkDirectory / var / spool / rsyslog $ InputFileName /home/user/my_app/shared/log/unicorn.stderr.log $ InputFileTag unicorn-stderr $ InputFileStateFile stat-unicorn-stderr $ InputFileSeverity info $ InputFileFacility local8 $ InputFilePollInterval 1 $ InputFilePersistStateInterval 1 $ InputRunFileMonitor # Transférer au serveur distant si $ syslogtag contient 'apache-' alors @@ mon_serveur: 5000; WithoutTimeFormat : syslogtag, contient, "apache-" ~ *. * @@ mon_serveur: 5000; SyslFormat
Fichier Logrotate
/home/user/my_app/shared/log/*.log { du quotidien missingok dateext tourner 30 compresse notifempty extension gz copiertronquer créer 640 utilisateur utilisateur sharedscripts post-rotation (arrêter rsyslog && rm / var / spool / rsyslog / stat- * && démarrer rsyslog 2> & 1) || vrai script de fin }
Pour info, le fichier est lisible pour l'utilisateur rsyslog, mon serveur est accessible et d'autres fichiers journaux qui ne tournent pas sur le même cycle continuent d'être suivis correctement.
J'utilise Ubuntu 12.04.
post-rotate
(ce qui n'est pas une chose) au lieu depostrotate
, car ce script logrotate d'origine que vous aviez aurait dû fonctionner correctement avec rsyslog (si le script postrotate avait été en cours d'exécution) ) ...?post-rotate
pourlastaction
. Votre commentaire est toujours très sensé et il a peut-être résolu mon problème à l'époque :). Pour mémoire cependant, je vais éviter de l'utilisercopytruncate
à l'avenir de toute façon car il est lent et joue avec les poignées de fichier.Votre fichier logrotate contient une entrée pour
/home/user/shared/log/*.log
, qui ne correspond pas à votre fichier journal/home/user/my_app/shared/log/unicorn.stderr.log
. Vous devez ajouter une entrée logrotate pour ce répertoire et vous assurer qu'il contientcopytruncate
- tel quel, rsyslog renomme le fichier actuel et en crée un nouveau, et imfile continue de suivre le descripteur de fichier du fichier maintenant renommé.la source