Ubuntu 16.04 Xenial Xerus
systemd verwendet standardmäßig ein zentrales Protokoll bzw. Journal, in das von journald alle Logmeldungen geschrieben werden. Zur Abfrage des Journals dient der Kommandozeilen-Befehl journalctl.
Da systemd ab Ubuntu 15.04 integraler Bestandteil des Systems ist (und dieses ohne systemd nicht lauffähig ist), sind alle benötigten Komponenten bereits installiert.
Die allgemeine Syntax von journalctl lautet[1]:
journalctl [OPTIONEN]
Sind mehrere Journal-Dateien vorhanden, führt journalctl diese für die Ausgabe automatisch zusammen.
Ruft man journalctl ohne Optionen auf, so erscheinen als erstes einige Zeilen, wie groß die aktuelle Logdatei ist und wie groß diese maximal werden kann. Dann erscheinen alle Logmeldungen.
Bei der Anzeige der Logeinträge wird standardmäßig ein Pager ähnlich dem vom less verwendet, d.h. dass die Ausgabe automatisch hält automatisch an, wenn die maximale Zeilenanzahl des Bildschirms erreicht ist. Mit der Leertaste blättert man eine Seite weiter, mit ↑ oder ↓ zeilenweise zurück oder vor.
Außerdem wird die Ausgabe eingefärbt. So sind Logeinträge der Priorität "Error" rot, die der Priorität "Warning" und "Notice" weiß und die der niedrigen Prioritäten wie "Info" und "Debug" grau.
Jede Logzeilen hat einen Aufbau wie im Folgenden gezeigt:
Jan 16 21:28:38 RECHNERNAME NetworkManager[706]: <info> monitoring kernel firmware directory '/lib/firmware'.
Zum Beginn der Zeile stehen Datum und Uhrzeit, gefolgt vom Rechnernamen, dem "Identifier", dem Loglevel und der Logmeldung an sich.
journalctl kennt eine Vielzahl von Optionen, um die angezeigten Logmeldungen zu filtern:
Optionen von journalctl | |
Option | Erklärung |
-e , --pager-end | springt direkt ans Ende des Journals, d.h. die neuesten Einträge werden angezeigt |
-r , --reverse | sortiert die Logeinträge in umgekehrter Reihenfolge, d.h. die neuesten werden zuerst angezeigt |
-f , --follow | Springt direkt ans Ende des Journals und zeigt neue Einträge "live" an. Der Follow-Modus kann mit Strg + C verlassen werden. |
-b , --boot | Zeigt alle Logeinträge seit dem letzten Booten an. |
--since DATUM | Zeigt alle Logeinträge ab dem Datum DATUM an. Datum hat folgendes Format "JJJJ-MM-TT HH:MM:SS" , also z.B. "2016-01-17 12:00:00" |
--since=yesterday | Zeigt alle Logeinträge ab 00:00:00 Uhr des Vortages an. |
--until DATUM | Wie --since DATUM , nur das Logeinträge bis zum Datum DATUM angezeigt werden. |
-k , --dmesg | zeigt nur Logmeldungen des Kernels an |
-u UNITNAME , --unit UNITNAME | Zeigt nur Logmeldungen der Unit UNITNAME an. Es kann ein kompletter Unitname oder ein Muster angegeben werden. So würde z.B. journalctl -u an* nur Logeinträge von Units anzeigen, deren Name mit an beginnt. |
-t IDENTIFIER , --identifier IDENTIFIER | Zeigt nur Logeinträge an, die den Identifier IDENTIFIER zugeordnet sind |
-p PRIORITÄT , --priority PRIORITÄT | Zeigt nur Logeinträge mit der Priorität PRIORITÄT an. Mögliche Werte sind: emerg , alert , crit , err , warning , notice , info und debug . Alternativ können die Prioritäten als Zahl angegeben werden. 0 entspricht emerg , 1 entspricht alert usw. |
-o verbose | Zeigt zu jedem Logeintrag alle verfügbaren Metadaten an. Dadurch wird die Ausgabe sehr detailliert - und sehr lang. |
journalctl kennt noch eine ganze Reihe weitere Optionen. Eine vollständige Übersicht mit Erklärung über alle Optionen liefert der Aufruf von journalctl -h
oder die Dokumentation .
Standardmäßig wird unter Ubuntu das Journal gelöscht, wenn der Computer neu gestartet oder heruntergefahren wird. Ist das dauerhafte Speichern aktiviert, kann man sich mit journalctl auch gezielt ältere Journaldateien anzeigen lassen. Dazu dient die Option -b BOOTNUMMER
bzw. --boot=BOOTNUMMER
. Der neuste (=der aktuelle) Systemstart hat dabei die Nummer 0
(null), der vorherige die Nummer -1
usw.
Alle ältere Journaldateien lassen sich über den Befehl:
journalctl --list-boots
anzeigen.
Gibt es zusätzlich zur Journal-Datei des Systems zusätzlich eine Journal-Datei pro Benutzer, kann man die Einträge der eigenen Logdatei über die Option --user
abrufen.
Verwendung der Option -p.
Alle Meldungen mit Kennzeichnung error, critical, alert oder emergency anzeigen:
journalctl -p err -b
Verwendung der Option -u.
Es ist erlaubt mehrere Units gleichzeitig anzugeben:
journalctl -u home.mount -u networking.service
Um eine Unit live zu verfolgen:
journalctl -f -u apache
Verwendung der Optionen --since und --until.
Dabei ist die Verwendung absoluter Zeiten im YYYY-MM-DD HH:MM:SS-Format erlaubt, als auch Wörter wie yesterday, 1 hour ago,etc. Eine Übersicht findet sich in der Manpage von systemd.time. Der --until-Parameter ist optional.
journalctl --since "2016-07-01" --until "2 minutes ago"
Erfolgt keinerlei Ausgabe von Logmeldungen oder zeigt journalctl eine Meldung an, dass die Rechte unzureichend sind, so muss man sich bzw. den Benutzer, der die entsprechenden Rechte bekommen soll, der Gruppe systemd-journal hinzufügen [1][2]:
sudo usermod -aG systemd-journal BENUTZERNAME
Falls im fraglichen (z.B. defekten) System die persistente Speicherung für das Journal aktiviert war , können die Logs von außen mit einem Live oder Rettungssystem mit strings und egrep ausgelesen werden. Alternativ kann man journalctl der Option -D
oder --directory=
den Pfad zur Journaldatei angeben. Wenn man z.B. die Festplatte eines defekten Systems unter /mnt/hd1/ eingebunden hat und dort die Logdatei an normaler Stelle liegt, sollte man dieses mit
journalctl -D /mnt/hd1/var/log/journal/UUID_DES_VERZEICHNISSES/
betrachten können.
Dokumentation des systemd-Journals
Erklärung , welche Metadaten im systemd-Journal mit gespeichert werden
Diese Revision wurde am 3. Januar 2017 13:48 von aasche erstellt.