Dans ma configuration, j'ai rsyslog qui est en charge de suivre les changements d' /home/user/my_app/shared/log/unicorn.stderr.logutilisation 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 -9rsyslog 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) ) ...?