Einführung in das Systemd Journal

Einführung in das Systemd Journal

Systemd ist heutzutage das init -System, das von fast allen Linux -Verteilungen übernommen wurde, von Red Hat Enterprise Linux bis Debian und Ubuntu. Eines der Dinge, die Systemd zum Ziel vieler Kritiker machten, ist, dass es versucht, viel mehr als ein einfaches Init-System zu sein und einige Linux-Subsysteme neu zu erfinden.

Das traditionelle Protokollierungssystem, das beispielsweise unter Linux verwendet wurde, war beispielsweise rsyslog, Eine moderne Version des Traditionellen Syslog. Systemd hat ein eigenes Protokollierungssystem eingeführt: Es wird von einem Daemon implementiert, Journald, Das speichert Protokolle im binären Format in ein "Journal", das von der abfragt werden kann Journalctl Dienstprogramm.

In diesem Tutorial lernen wir einige Parameter, mit denen wir die ändern können Journald Daemon -Verhalten und einige Beispiele für die Abfrage des Journals und das Format der Ausgabe, die sich aus diesen Abfragen ergeben.

In diesem Tutorial lernen Sie:

  • So ändern Sie Standardjournalald -Einstellungen
  • Wie Journald mit Syslog koexistieren kann
  • So fragen Sie das Journal und einige Möglichkeiten, um die Ausgaben der Abfragen zu formatieren

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Eine Linux -Verteilung mit Systemd (fast alle tun)
Software Es wird keine spezifische Software benötigt
Andere Root -Berechtigungen zu (letztendlich) ändern Standardkonfigurationen
Konventionen # - Linux -Commands, die mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mithilfe von verwendet werden sollen sudo Befehl
$-Linux-Commands, die als regulärer nicht privilegierter Benutzer ausgeführt werden sollen

Journald -Konfigurationsdatei

Das Verhalten der Journald Dämon kann geändert werden, indem die Einstellungen in seiner Konfigurationsdatei geändert werden: /etc/systemd/journald.Conf. Die direkte Änderung dieser Datei wird nicht empfohlen. Stattdessen sollten wir einige separate Konfigurationsdateien erstellen, die die Parameter enthalten, die wir ändern möchten, speichern sie mit dem .Conf Erweiterung und platzieren Sie sie in die /etc/systemd/journald.Conf.D Verzeichnis.

Die in den platzierten Dateien /etc/systemd/journald.Conf.D Verzeichnis hat einen größeren Vorrang als /etc/systemd/journald.Conf: Sie werden nach ihrem Namen sortiert Lexikografische Ordnung und in dieser Reihenfolge analysiert, alle nach der Hauptdatei. Falls dieselbe Optionseinstellung in mehr als einer Datei besteht.

Der /etc/systemd/jourlnald.Conf Die Datei enthält standardmäßig eine kommentierte Liste der Optionen innerhalb der [Tagebuch] Stanza: Sie stellen die Standardwerte dar, die zur Kompilierungszeit verwendet werden (der folgende Inhalt stammt von einem Fedora -System):

[Journal] #Storage = auto #compress = yes #Seal = yes # #splitmode = uid #syncintervalsec = 5m #ratelimitIntervalsec = 30S #ratelimitBurst = 10000 #systemMaxuse = #systemkeepee = #systemmaxFileSize = #systemMaxFiles = 100 #RunTimaxuse = # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #RuntimemaxFileSize = #runtimemaxFiles = 100 #maxretentionec = #maxFilesec = 1month #ForwardTOSYSLog = no #ardtokmsg = nein #tewesToconsole = no # #ForwardTowall = yes # #ttypath =/dev/console #maxlevelstore = debug #mAxlevel #maxlevel #maxlevel #maxLevel MaxLevelConsole = info #maxLewallwall = Emerg #linemax = 48K #readkmsg = yes #panit = ja 


Lassen Sie uns sehen, was einige dieser Optionen bedeuten und wie sie das Verhalten des Journald Dämon.

Die Option "Speicher"

Die erste Option, die wir in der Datei begegnen, ist Lagerung. Diese Option steuert, wo die Journaldaten gespeichert sind. Der Standardwert, der hier zur Kompilierungszeit verwendet wird, ist hier Auto, Aber es ist möglich, sich unter:

  • flüchtig
  • hartnäckig
  • Auto
  • keiner

Wenn wir verwenden flüchtig Als Wert dieser Option werden die Journaldaten nur im Speicher unter gespeichert /run/log/journal (/laufen ist ein tmpfs: Sein Inhalt wird im Speicher gespeichert), sodass er keinen System -Neustart überlebt.

Wenn hartnäckig wird stattdessen verwendet, die Journaldaten werden auf der Festplatte unterspeichert, unter /var/log/journal, Das wird erstellt, wenn es nicht existiert. Wenn die Festplatte aus irgendeinem Grund nicht beschreibbar ist, /run/log/journal wird als Fallback verwendet.

Der Auto Wert für die Lagerung Die Option, die hier als Standard verwendet wird, funktioniert im Grunde genommen wie wie hartnäckig In dem Sinne, dass die Zeitschriftendaten unter dem Gebrauch untergebracht sind /var/log/journal. Der Unterschied besteht darin, dass, wenn der Pfad nicht existiert, nicht erstellt wird und Protokolle nur im Speicher gespeichert werden.

Schließlich, wenn die keiner Der Wert wird verwendet, der gesamte Speicher wird ausgeschaltet: Während der Weiterleitung an andere Protokollierungssysteme wie z Syslog Wird noch funktionieren, alle empfangenen Daten werden fallen gelassen.

Die Option "Komprimierungen"

Die Option „Komprimieren“ steuert, ob Daten, die den Schwellenwert von überschreiten 512 Bytes wird komprimiert, bevor er auf der Festplatte gespeichert wird. Diese Option akzeptiert zwei Arten von Werten: a boolean Wie im obigen Fall (Ja) oder eine Zahl, die die Komprimierungsschwelle selbst festlegt. Wenn der letztere bereitgestellt wird, wird die Komprimierung implizit aktiviert. Der Schwellenwert wird standardmäßig in Bytes ausdrücken, aber der K, M oder G Suffixe können stattdessen verwendet werden.

Die Option „VorwärtsTosyslog“

Wie bereits erwähnt, in der Zeit vor dem System, die Protokolle, die von der verwaltet wurden Syslog Protokollierungssystem (rsyslog Genau genommen). Dieses Protokollierungssystem kann Protokolle an viele Ziele wie Textdateien, Terminals oder sogar andere Maschinen im Netzwerk weiterleiten. Systemd hat ein eigenes Protokollierungssystem implementiert, das Objekt dieses Tutorials ist: Journald.

Die beiden Systeme können koexistieren (dies ist manchmal notwendig, da Journald einige Funktionen wie das Verpacken von Features wie Zentralisierte Protokollierung, Oder nur, weil wir, da Administratoren mögen, dass Protokolle in Textdateien und nicht im Binärformat gespeichert werden, damit sie mit Standard -UNIX -Tools manipuliert werden können.

Das Vorwärtstosyslog Option nimmt a boolean Wert: Wenn auf festgelegt Ja, Nachrichten werden an die weitergeleitet /run/systemd/journal/syslog Socket, wo kann gelesen werden von Syslog. Dieses Verhalten kann auch über die auf den Start eingestellt werden systemd.Journald.vorwärts_to_syslog Möglichkeit.

Ähnliche Optionen können verwendet werden, um Nachrichten an weiterzuleiten kmsg (Kernel -Protokollpuffer), Konsole oder an „Wand“ (gesendet als Protokollnachrichten an protokollierte Benutzer). Nur letzteres ist auf eingestellt Ja standardmäßig.

Das Tagebuch abfragen

Das Tool, mit dem wir die Systemprotokolle untersuchen und das Systemd Journal abfragen können Journalctl. Wenn der Befehl ohne weitere Parameter aufgerufen wird, werden alle Inhalte des Journals angezeigt. Glücklicherweise können mehrere Strategien implementiert werden, um die Protokolle zu filtern. Lassen Sie uns einige von ihnen sehen.

Filtermeldungen durch Einheiten filtern

Eine der nützlichsten Optionen, an die wir übergehen können Journalctl Ist -u, Welches ist die Kurzversion von --Einheit. Mit dieser Option können wir den Inhalt des Journals so filtern, so dass nur Nachrichten aus dem spezifischen Systemd-Einheit als Option -Argument übergeben, wird zurückgegeben. Zum Beispiel nur Nachrichten anzeigen, die aus dem stammen Netzwerk Manager.Service Einheit, wir können rennen:

$ journalctl -U networkManager-Protokolle beginnen am Mittwoch 2020-07-01 21:47:23 CEST, enden am SAT 2020-07-25 15:26:59 CEST. -- Jul 01 21:48:07 ERU SYSTEMD [1]: Startnetzwerkmanager… 01. Juli 21:48:07 ERU NetworkManager [1579]: [1593632887.7408] NetworkManager (Version 1.22.10-1.FC32) beginnt… (zum ersten Mal) 01. Juli 21:48:07 ERU NetworkManager [1579]: [1593632887.7413] Lesen Sie die Konfiguration:/etc/networkManager/networkManager.conf Juli 01 21:48:07 ERU SYSTEMD [1]: Startnetzwerkmanager gestartet. 

Darüber hinaus ist eine bestimmte Option dem Filtern nur Kernel -Nachrichten bestimmt: -k, Welches ist die Kurzform von --dmesg.

Filterprotokolle nach Datum

Wenn wir nach Datum in der Zeitschrift gespeicherte Nachrichten filtern möchten, können wir zwei dedizierte Optionen verwenden: -S (kurz für --seit) Und -U (kurz für --bis). Beide Optionen akzeptieren ein Datum im Format Yjyy-mm-dd hh: mm: ss. Der "Zeit" -Teil des Datums kann weggelassen werden und in diesem Fall 00:00:00 wird angenommen. Angenommen, wir möchten die Protokolle ab dem aktuellen Datum filtern. Wir würden den folgenden Befehl ausführen:

$ journalctl-Since 2020-07-25 


Die Protokolle mit einer Zeit weiter einschränken 16:04:21 Zu 16:04:26:

$ journalctl-S-Since "2020-07-25 16:04:21"-bis "2020-07-25 16:04:26" 

Es gibt auch eine Reihe von Aliase: Sie können anstelle von einfachen Daten verwendet werden:

Saite Bedeutung
"gestern" 00:00:00 des Tages vor dem aktuellen
"Heute" Der aktuelle Tag
"morgen" am Tag nach dem aktuellen
"Jetzt" die aktuelle Zeit

Nur die neuesten Protokolle anzeigen

Wenn wir die starten Journalctl Befehl mit dem -F (--folgen) Option können wir nur die neuesten empfangenen Protokolle visualisieren und immer noch beobachten, da neue Protokolle angehängt sind (sie ist im Grunde genommen wie das Anruf Schwanz mit dem -F Möglichkeit). Andererseits können wir die verwenden, wenn wir nur das Ende des Journals visualisieren wollen -e Möglichkeit (--Pager-Ende).

Formatierung der JournalCtl -Ausgabe

Die Ausgabe, die wir bei der Verwendung erhalten Journalctl kann einfach mit einer dedizierten Option formatiert werden: , oder seine lange Version, --Ausgang. Wenn wir diese Option verwenden, können wir eine Reihe von „Stilen“ angeben. Unter den (vielen) anderen:

  • kurz
  • ausführlich
  • Json-Pretty

Der kurz Das Format ist die Standardeinstellung: Eine Zeile pro Eintrag wird in einer Ausgabe angezeigt, die der des herkömmlichen Syslogs ähnelt:

Jul 01 21:48:07 ERU SYSTEMD [1]: Network Manager starten… 

Der ausführlich Das Format stellt stattdessen alle Felder des Eintrags aus:

Mi 2020-07-01 21:48:07.603130 CEST [s=d61cdf3710e84233bda460d931ebc3bb;i=6be;b=1c06b8c553624a5f94e1d3ef384fb50d;m=2e82666;t=5a966922b0155;x=6668aad5e895da03] PRIORITY=6 _BOOT_ID=1c06b8c553624a5f94e1d3ef384fb50d _MACHINE_ID=afe15f1a401041f4988478695a02b2bf _HOSTNAME=eru SYSLOG_FACILITY=3 SYSLOG_IDENTIFIER=systemd _UID=0 _GID= 0 _transport = journal _cap_effective = 3fffffffff code_file = src/core/Job.c CODE_LINE=574 CODE_FUNC=job_log_begin_status_message JOB_TYPE=start MESSAGE_ID=7d4958e842da4a758f6c1cdc7b36dcc5 _PID=1 _COMM=systemd _EXE=/usr/lib/systemd/systemd _SYSTEMD_CGROUP=/init.Scope _Systemd_unit = init.SCOPE _SYSTEMD_SLICE =-.Slice _selinux_context = system_u: system_r: init_t: s0 _cmdline =/usr/lib/systemd/systemd-switched-root--System-Deserialize 34 Message = Start Network Manager… Job_id = 243 Unit = NetworkManager.Service Invocation_ID = 6416439E51FF4543A76Bded5984c6cf3 _Source_RealTime_Timestamp = 1593632887603130 


Der Json-Pretty Format zeigt die Einträge als an JSON Objekte auf menschlich lesbare Weise. In diesem Format werden die Einträge durch eine neue Linie getrennt:

"__Realtime_timestamp": "1593632887603541", "Priority": "6", "_Systemd_unit": "Init.Scope "," _Systemd_cgroup ":"/init.Scope "," _UID ":" 0 "," _comm ":" systemd "," _Systemd_Slice ":"-.slice", "_CAP_EFFECTIVE" : "3fffffffff", "_BOOT_ID" : "1c06b8c553624a5f94e1d3ef384fb50d", "_SELINUX_CONTEXT" : "system_u:system_r:init_t:s0", "__CURSOR" : "s=d61cdf3710e84233bda460d931ebc3bb;i=6be;b=1c06b8c553624a5f94e1d3ef384fb50d; m=2e82666;t=5a966922b0155;x=6668aad5e895da03", "_HOSTNAME" : "eru", "_PID" : "1", "MESSAGE_ID" : "7d4958e842da4a758f6c1cdc7b36dcc5", "CODE_FUNC" : "job_log_begin_status_message", "MESSAGE" : " Starten von Network Manager… "," _exe ":"/usr/lib/systemd/systemd "," __monotonic_timestamp ":" 48768614 "," _transport ":" Journal "," syslog_facility ":" 3 "," Einheit ":": ":": ":": ":": ":": ":": ":": ":": ":": ":": " Netzwerk Manager.Service "," job_id ":" 243 "," job_type ":" start "," _gid ":" 0 "," code_file ":" src/core/job.C "," _Machine_id ":" Afe15f1a401041f4988478695a02b2bf "," _cmdline ":"/usr/lib/systemd/systemd--switched-root--system--Deserialize 34 "," "574", "Invocation_ID": "6416439e51ff4543a76bded5984c6cf3", "_Source_Realtime_timestamp": "1593632887603130" 

Schlussfolgerungen

In diesem Tutorial näherten wir uns Journald Der Systemd -Daemon, der das Protokollierungsjournal implementiert. Dieses Protokollierungssystem soll anstelle von Syslog verwendet werden, das das herkömmliche System unter Linux verwendet wurde. Bei vielen Verteilungen koexistiert die beiden Systeme aus dem einen oder anderen Grund immer noch zusammen.

Wir haben gesehen, was das ist Journald Konfigurationsdatei und was bedeutet einige wichtige Optionen, mit denen das Verhalten geändert werden kann, und wir haben gelernt, wie wir das Systemd Journal mit dem abfragen können Journalctl Dienstprogramm. Wenn Sie mehr darüber erfahren möchten Journald Und Journalctl. Ich empfehle Ihnen, die jeweiligen Handbücher zu lesen (Mann Journald.Conf Und Man Journalctl sind die Befehle, nach denen Sie suchen).

Verwandte Linux -Tutorials:

  • Erweiterte Protokollierung und Prüfung unter Linux
  • Dinge zu installieren auf Ubuntu 20.04
  • Linux -Konfigurationsdateien: Top 30 am wichtigsten
  • Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
  • Linux -Download
  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Dinge zu tun nach der Installation Ubuntu 22.04 Jammy Quallen…
  • Kann Linux Viren bekommen?? Erforschung der Verwundbarkeit von Linux…
  • Beste Linux -Distribution für Entwickler
  • Dinge zu installieren auf Ubuntu 22.04