[[Vorlage(Getestet, focal, jammy)]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis()]] [[Bild(Wiki/Icons/terminal.png, 48, align=left)]] [:systemd:] verwendet standardmäßig ein zentrales Protokoll bzw. Journal, in das von [:systemd/journald: journald] alle Logmeldungen geschrieben werden. Zur Abfrage des Journals dient der Kommandozeilen-Befehl '''journalctl'''. = Installation = 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. = Benutzung = Die allgemeine Syntax von journalctl lautet[1]: {{{#!vorlage Befehl journalctl [OPTIONEN] }}} Sind mehrere Journal-Dateien vorhanden, führt journalctl diese für die Ausgabe automatisch zusammen. {{{#!vorlage Hinweis Um alle Einträge des Journals zu sehen, muss der aufrufende Nutzer [:Benutzer und Gruppen:Mitglied der Gruppe] `adm` oder `systemd-journal` sein. Ansonsten sieht man lediglich Einträge, die den eigenen Nutzer betreffen, aber keine Einträge des Systems und anderer Nutzer. }}} Ruft man journalctl ohne Optionen auf, so sieht man alle Einträge im Journal, die zur Zeit vom System gespeichert sind. Bei der Anzeige der Logeinträge wird standardmäßig ein Pager ähnlich dem vom [:less:] verwendet, d.h. die Ausgabe hält automatisch an, wenn die maximale Zeilenanzahl des Bildschirms erreicht ist. Mit der Leertaste [[Vorlage(tasten, space)]] blättert man eine Seite weiter, mit [[Vorlage(Tasten, hoch)]] oder [[Vorlage(Tasten, runter)]] zeilenweise zurück oder vor. Möchte man journalctl beenden, so drückt man einfach [[Vorlage(Tasten, ctrl+c)]]. 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]: 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: {{{#!vorlage Tabelle <-2 rowclass="titel">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 [[Vorlage(Tasten, 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 dass 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 Logeinträge '''bis zur''' 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 [http://www.freedesktop.org/software/systemd/man/journalctl.html Dokumentation] {en}. == Ältere Logs abfragen == Standardmäßig ist unter Ubuntu das dauerhafte speichern des Journal aktiviert. 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: {{{#!vorlage Befehl journalctl --list-boots }}} anzeigen. == Logs benutzerabhängig abfragen == Gibt es zusätzlich zur Journal-Datei des Systems zusätzlich eine [:systemd/journald#zusaetzliche-Journal-Dateien-pro-Benutzer:Journal-Datei pro Benutzer], kann man die Einträge der eigenen Logdatei über die Option `--user` abrufen. ==Beispiele== ===Gefiltert nach Priorität=== Verwendung der Option ''-p''. Alle Meldungen mit Kennzeichnung ''error'', ''critical'', ''alert'' oder ''emergency'' anzeigen: {{{#!vorlage Befehl journalctl -p err -b }}} ===Gefiltert nach Unit=== Verwendung der Option ''-u''. Es ist erlaubt mehrere Units gleichzeitig anzugeben: {{{#!vorlage Befehl journalctl -u home.mount -u networking.service }}} Um eine Unit live zu verfolgen: {{{#!vorlage Befehl journalctl -f -u apache }}} ===Gefiltert nach Datum=== 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. {{{#!vorlage Befehl journalctl --since "2023-07-01" --until "2 minutes ago" }}} = Problembehebung = == Logmeldungen mit einem Live-/Rettungssystem auslesen == 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 [:systemd/journald/#strings-und-grep: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 {{{#!vorlage Befehl journalctl -D /mnt/hd1/var/log/journal/UUID_DES_VERZEICHNISSES/ }}} betrachten können. == Logdaten belegen zu viel Speicherplatz == Wenn sich zu viele Logdaten ansammeln und die /-Partition "vollläuft", droht die Gefahr, dass das System dann nicht mehr startet. Den von den Journalen belegten Speicherplatz zeigt dieser Befehl an: {{{#!vorlage Befehl journalctl --disk-usage }}} Beispielhafte Ausgabe: {{{Archived and active journals take up 168.0M in the file system. }}} Man kann dann den aktuell belegten Speicherplatz teilweise durch Löschen von Journale wieder freigeben, das ist nach Zeit oder Größe steuerbar: * Der Befehl {{{#!vorlage Befehl sudo journalctl --vacuum-time 90d }}} löscht alles, was mehr als die angegebene Dauer (im Beispiel 90 Tage) zurück liegt. * Der Befehl {{{#!vorlage Befehl sudo journalctl --vacuum-size 100M }}} löscht, angefangen von den ältesten Einträgen, alles bis nur noch die angegebenen Menge (im Beispiel 100MB) an Journalen verbleibt. Die beiden Angaben darf man auch kombinieren und es sind auch die üblichen anderen Maßeinheiten verwendbar. Für eine dauerhafte Größenbegrenzung siehe [:systemd/journald/#Konfiguration:]. = Links = * [http://www.freedesktop.org/software/systemd/man/systemd-journald.service.html Dokumentation] {en} des systemd-Journals * [http://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html Erklärung] {en}, welche Metadaten im systemd-Journal mit gespeichert werden #tag: System, systemd