Wie konfiguriere ich die Protokollspeicherrichtlinie pro Einheit mit Journald?

12

Ich habe einen bestimmten Dienst, der seltene, aber wichtige Informationen protokolliert. Ich habe es vor einigen Monaten eingerichtet und bin heute journalctl -n 50 --unit=my-servicenur gelaufen , um festzustellen, dass es keine Einträge gibt.

Ich bin mit diesem Verhalten für die meisten Einheiten vollkommen zufrieden - ich brauche entweder etwas, das sofort passiert ist (oder höchstens vor ein paar Tagen), und mir sind monatelange Aufzeichnungen egal.

Gibt es jedoch eine Möglichkeit, journaldeine unabhängige Speicher- und Aufbewahrungsrichtlinie für die Datensätze einer einzelnen Einheit festzulegen? Ich möchte diese speziellen Protokolle beispielsweise 5 Jahre lang beibehalten - unabhängig von der Größe, die sie benötigen würden. Die Protokolle der anderen Einheiten sollten davon nicht betroffen sein und ihr vorhandenes Verhalten beibehalten.

Ich habe irgendwie das Verständnis verloren journald.conf(5)und kann nicht herausfinden, wann eine Konfiguration pro Einheit überhaupt möglich ist. Wenn ja, würde ich mich über ein kurzes konkretes Beispiel freuen, welche Datei ich bearbeiten / erstellen und was ich schreiben soll. Oder wenn Sie sicher wissen, dass dies sicherlich nicht machbar ist, wäre dies auch eine gute Antwort.

HINWEIS: Mein spezieller Fall betrifft den Arch Linux-Host, aber ich denke, das sollte nicht viel ausmachen.

Drdaeman
quelle
Ich kann die obige Antwort nicht kommentieren, um diesen Link zu einem Problem über das Hinzufügen dieser Funktion zu journald hinzuzufügen. Hier ist sie als weitere Antwort: github.com/systemd/systemd/issues/4751
swoop81

Antworten:

7

Scheint, dass ich mit Journald höchstwahrscheinlich kein Glück habe. Es sei denn, ich werde einen Weg finden, um ein unabhängiges "Langzeitspeicher" -Journal zu erstellen (wie derzeit verschiedene Benutzerjournale), aber ich bin mir nicht sicher, ob dies ein praktikabler und vernünftiger Ansatz ist. Ich denke, das Einrichten eines Syslogd (und eines Logrotats) wäre einfacher.

Das Feature war Ende 2014 nicht vorhanden , wie Lennart selbst bestätigt hat.

Und es scheint, dass es noch nicht hier ist. Zumindest befindet sich die Zeile "Journald: Aufbewahrungszeiten pro Priorität und pro Service beim Drehen / Staubsaugen zulassen" noch in der TODO-Datei (Link zur Überarbeitung vom 11.07.2016).

Drdaeman
quelle
3
Dies scheint ein sehr großer Designfehler zu sein, der fast verkrüppelt. Vor allem, wenn man die Retention oder zumindest den Log-Level von sehr gesprächigen Einheiten verringern möchte, die die Logs verstopfen.
Orion
1
Für alle, die über diese Frage stolpern, ist die referenzierte Zeile im TODO ab diesem Kommentar (26.03.18) noch vorhanden: github.com/systemd/systemd/blob/…
timss
1
In dem Versuch, etwas Traktion zu bekommen, habe ich es als Problem mit dem Projekt angesprochen - github.com/systemd/systemd/issues/9519 .
slm
1

Es ist bemerkenswert einfach, die Protokolldatei zu generieren. Standardmäßig geht die gesamte Protokollierung in Journald auch in Syslog, und diese Standardeinstellung muss vorhanden sein. Die rsyslog.conf steuert, wie die an syslog übergebenen Einträge behandelt werden. Außerdem werden SyslogFacilitystandardmäßig daemondie Protokolleinträge für jeden Dienst in der daemon.logDatei in gespeichert /var/log.

Fügen Sie in Ihrer Servicedatei den Abschnitt [Service] hinzu

SyslogFacility=local2

(Die Anzahl kann zwischen 0 und 7 liegen.) https://www.freedesktop.org/software/systemd/man/systemd.exec.html

Ändern Sie die Datei /etc/rsyslog.conf (suchen Sie die zu ändernden vorhandenen Zeilen) so, dass local2 in einer bestimmten Datei (erste Zeile) protokolliert und im Idealfall nicht local2.nonewie gezeigt in syslog protokolliert wird (sie befindet sich bereits im Journal).

local2.*                        /var/log/your-service-name.log
*.*;auth,authpriv.none,local2.none          -/var/log/syslog

[bearbeiten] Sie müssen auch den Fang alle ändern

*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none,local2.none      -/var/log/messages

Natürlich muss die eigentliche Aufbewahrung dann per Logrotate erfolgen.

HTH

Brian
quelle