In meiner Konfiguration habe ich rsyslog, das für die folgenden Änderungen der /home/user/my_app/shared/log/unicorn.stderr.log
Verwendung verantwortlich ist imfile
. Der Inhalt wird mithilfe von TCP an einen anderen Remote-Protokollierungsserver gesendet.
Wenn sich die Protokolldatei dreht, sendet rsyslog keine Daten mehr an den Remote-Server.
Ich habe versucht, rsyslog neu zu laden, ein HUP-Signal zu senden und es insgesamt neu zu starten, aber nichts hat funktioniert.
Die einzigen Möglichkeiten, die ich finden konnte, die tatsächlich funktionierten, waren schmutzig:
- Beenden Sie den Dienst, löschen Sie die rsyslog-Statistikdateien und starten Sie rsyslog erneut. All das in einem Postrotate-Hook in meiner Logrotate-Datei.
kill -9
rsyslog und neu starten.
Gibt es eine richtige Möglichkeit für mich, dies zu tun, ohne die Interna von rsyslog zu berühren?
Rsyslog-Datei
$ ModLoad immark $ ModLoad imudp $ ModLoad imtcp $ ModLoad imuxsock $ ModLoad imklog $ ModLoad imfile $ template WithoutTimeFormat, "[Umgebung] [% syslogtag%] -% msg%" $ WorkDirectory / var / spool / rsyslog $ InputFileName /home/user/my_app/shared/log/unicorn.stderr.log $ InputFileTag unicorn-stderr $ InputFileStateFile stat-unicorn-stderr $ InputFileSeverity-Informationen $ InputFileFacility local8 $ InputFilePollInterval 1 $ InputFilePersistStateInterval 1 $ InputRunFileMonitor # An Remote-Server weiterleiten Wenn $ syslogtag 'apache-' enthält, dann @@ my_server: 5000; WithoutTimeFormat : syslogtag, enthält "apache-" ~ *. * @@ my_server: 5000; SyslFormat
Logrotate-Datei
/home/user/my_app/shared/log/*.log { Täglich Missingok Datumsangabe 30 drehen komprimieren notifempty Erweiterung gz copytruncate Erstellen Sie 640 Benutzer Benutzer Sharedscripts nachdrehen (Stoppen Sie rsyslog && rm / var / spool / rsyslog / stat- * && starten Sie rsyslog 2> & 1) || wahr Endschrift }}
Zu Ihrer Information, die Datei ist für den Benutzer von rsyslog lesbar, mein Server ist erreichbar und andere Protokolldateien, die sich nicht im selben Zyklus drehen, werden weiterhin ordnungsgemäß verfolgt.
Ich verwende Ubuntu 12.04.
post-rotate
(was keine Sache ist) verwendet habenpostrotate
, da das ursprüngliche Logrotate-Skript, das Sie hatten, mit rsyslog gut hätte funktionieren sollen (wenn das Postrotate-Skript ausgeführt worden wäre ) ...?post-rotate
fürlastaction
. Ihr Kommentar ist immer noch sehr vernünftig und hat möglicherweise mein Problem zu der Zeit gelöst :). Für die Aufzeichnung werde ich es jedochcopytruncate
in Zukunft sowieso vermeiden, da es langsam ist und mit Dateihandles spielt.Ihre Protokolldatei enthält einen Eintrag für
/home/user/shared/log/*.log
, der nicht mit Ihrer Protokolldatei übereinstimmt/home/user/my_app/shared/log/unicorn.stderr.log
. Sie müssen einen Logrotate-Eintrag für dieses Verzeichnis hinzufügen und sicherstellen, dass er enthält. Socopytruncate
wie es ist, benennt rsyslog die aktuelle Datei um und erstellt eine neue. Imfile folgt weiterhin dem Dateihandle der jetzt umbenannten Datei.quelle