Wie zeige ich Protokollmeldungen von früheren Startvorgängen unter CentOS 7 an?

78

Bei der Ausführung journalctlunter einem CentOS 7-System werden nur Meldungen gedruckt, die nach dem letzten Start generiert wurden.

Der Befehl

# journalctl --boot=-1

druckt

Failed to look up boot -1: Cannot assign requested address

und wird mit Status 1 beendet.

Vergleicht man es mit einem aktuellen Fedora-System, fällt mir auf, dass das CentOS 7 nicht über /var/log/journal(und journalctlnicht über --list-boots) verfügt.

Also meine Frage, wie man Logmeldungen anzeigt, die vor dem letzten Bootdatum geschrieben wurden.

Oder muss diese Funktionalität unter CentOS 7 aktiviert werden?

(Die journalctlManpage listet 'systemd 208' als Versionsnummer auf.)

maxschlepzig
quelle

Antworten:

99

tl; dr

Unter CentOS 7 müssen Sie die dauerhafte Speicherung von Protokollnachrichten aktivieren:

# mkdir /var/log/journal
# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald

Andernfalls werden die Journalprotokollnachrichten zwischen den Startvorgängen nicht beibehalten.

Einzelheiten

journaldÜber wird konfiguriert, ob Protokollnachrichten von früheren Startvorgängen beibehalten werden /etc/systemd/journald.conf. Die Standardeinstellung unter CentOS 7 ist:

[Journal]
Storage=auto

Wo die Manpage journald.conf erklärt auto:

Einer von "volatile", "persistent", "auto" und "none". Bei "flüchtig" werden Journalprotokolldaten nur im Speicher gespeichert, dh unter der Hierarchie / run / log / journal (die bei Bedarf erstellt wird). Wenn "persistent", werden die Daten vorzugsweise auf der Festplatte gespeichert, dh unter der Hierarchie / var / log / journal (die bei Bedarf erstellt wird), mit einem Fallback auf / run / log / journal (die bei Bedarf erstellt wird) früh booten und wenn die Festplatte nicht beschreibbar ist. " auto " ähnelt "persistent", aber das Verzeichnis / var / log / journal wird bei Bedarf nicht erstellt, sodass seine Existenz steuert, wohin die Protokolldaten gehen .

(betone meins)

In der Manpage systemd-journald.service heißt es daher:

Standardmäßig speichert das Journal Protokolldaten in / run / log / journal /. Da / run / flüchtig ist, gehen die Protokolldaten beim Neustart verloren. Um die Daten persistent zu machen, ist es ausreichend, / var / log / journal / zu erstellen, wo systemd-journald die Daten dann speichert.

Anscheinend wurde der Standard in Fedora 19 (auf persistenten Speicher) geändert, und da CentOS 7 von Fedora 18 abgeleitet ist, ist es dort standardmäßig immer noch nicht persistent. Die Persistenz wird standardmäßig außerhalb von Journald via /var/log/messagesund den gedrehten Versionen implementiert, die von rsyslogd /var/log/messages-YYYYMMDDgeschrieben wurden (das standardmäßig ausgeführt wird und seine Eingabe von Journald erhält).

Um also unter RHEL / CentOS 7 eine dauerhafte Protokollierung mit journald zu ermöglichen, muss dies geschehen

# mkdir /var/log/journal

und dann Berechtigungen korrigieren und Journald neu starten, z. B. über

# systemd-tmpfiles --create --prefix /var/log/journal
# systemctl restart systemd-journald
maxschlepzig
quelle
6
A systemctl restart systemd-journaldsollte es tun. Es ist also kein Neustart erforderlich.
xx4h
@ xx4h, hat die Antwort aktualisiert
maxschlepzig
9
In Debian ist dies dokumentiert an /usr/share/doc/systemd/README.Debian: install -d -g systemd-journal /var/log/journal.
Pevik
@pevik, ich habe mir ein CentOS 7-System angesehen (wo ich gerade mkdir verwendet habe) und die aktuellen Berechtigungen sind drwxr-sr-x. 3 root systemd-journal- vielleicht behebt Journald die Berechtigungen / Eigentumsrechte während der Initialisierung.
Maxschlepzig
8
Ein netter Trick gelernt: Wenn Sie ein USR1Signal senden , anstatt neu zu starten, verlieren Sie nicht den aktuellen Journald-Inhalt. killall -USR1 systemd-journald
James B
1
systemctl restart systemd-journald

Sie können Ihre Protokolle verlieren: siehe https://github.com/systemd/systemd/issues/2236

mkdir /var/log/journal

Es gibt eine Änderung in v208:

systemd-journald passt die Gruppe der von ihm erstellten Journaldateien nicht mehr an die Gruppe "systemd-journal" an. Stattdessen verlassen wir uns darauf, dass das Journalverzeichnis der Gruppe "systemd-journal" gehört und das Bit "setgid" gesetzt ist, damit die Kernel-Dateisystemebene diese Gruppenzuordnung automatisch für die Journaldateien erbt.

Ein in systemd enthaltenes Snippet "tmpfiles.d (5)" stellt sicher, dass das Bit "setgid" und "group" ordnungsgemäß im Journalverzeichnis festgelegt sind, sofern es bei jedem Start vorhanden ist.

Also, sollten Sie so etwas wie laufen systemd-tmpfiles --create --prefix /var/log/journalnachmkdir /var/log/journal

Siehe auch :

Evgeny Vereshchagin
quelle
Hm, oder mach ein `chmod 4755 / var / log / journal; chown root: systemd-journal!: 2 '- oder starten Sie einfach neu. Ich werde meine Antwort aktualisieren.
Maxschlepzig
@maxschlepzig, nur Neustart funktioniert nicht: github.com/systemd/systemd/pull/1398#issuecomment-144247498
Evgeny Vereshchagin
chmod 4755 /var/log/journal; chown root:systemd-journal !:2funktioniert gut. aber tmpfiles: Verwenden Sie ACL-Magie für Journalverzeichnisse
Evgeny Vereshchagin
ok, noch ein Bug :) - Ich habe meine Antwort aktualisiert.
Maxschlepzig