Verwendung von Journalctl zum Anzeigen und Bearbeiten von Systemd-Protokollen

Einführung

Einige der überzeugendsten Vorteile vonsystemd sind die mit der Prozess- und Systemprotokollierung verbundenen. Wenn Sie andere Tools verwenden, werden Protokolle normalerweise im gesamten System verteilt und von verschiedenen Daemons und Prozessen verarbeitet. Ihre Interpretation kann schwierig sein, wenn sie mehrere Anwendungen umfassen. Systemdversucht, diese Probleme zu beheben, indem eine zentralisierte Verwaltungslösung zum Protokollieren aller Kernel- und Userland-Prozesse bereitgestellt wird. Das System, das diese Protokolle sammelt und verwaltet, wird als Journal bezeichnet.

Das Journal wird mit dem Daemonjournald implementiert, der alle vom Kernel, initrd, services usw. erzeugten Nachrichten verarbeitet. In diesem Handbuch wird erläutert, wie Sie das Dienstprogrammjournalctlverwenden, mit dem Sie auf die im Journal enthaltenen Daten zugreifen und diese bearbeiten können.

Grund Idee

Einer der Impulse hinter dem Journalsystemdist die Zentralisierung der Verwaltung von Protokollen, unabhängig davon, woher die Nachrichten stammen. Da ein Großteil des Startprozesses und der Dienstverwaltung vomsystemd-Prozess übernommen wird, ist es sinnvoll, die Art und Weise zu standardisieren, in der Protokolle gesammelt und auf sie zugegriffen wird. Derjournald-Daemon sammelt Daten aus allen verfügbaren Quellen und speichert sie zur einfachen und dynamischen Bearbeitung in einem Binärformat.

Dies bringt uns eine Reihe bedeutender Vorteile. Durch die Interaktion mit den Daten mit einem einzigen Dienstprogramm können Administratoren Protokolldaten dynamisch entsprechend ihren Anforderungen anzeigen. Dies kann so einfach sein, wie die Startdaten von vor drei Starts anzuzeigen oder die Protokolleinträge nacheinander von zwei verwandten Diensten zu kombinieren, um ein Kommunikationsproblem zu beheben.

Das Speichern der Protokolldaten in einem Binärformat bedeutet auch, dass die Daten in beliebigen Ausgabeformaten angezeigt werden können, je nachdem, was Sie gerade benötigen. Für die tägliche Protokollverwaltung können Sie beispielsweise daran gewöhnt sein, die Protokolle im Standardformatsysloganzuzeigen. Wenn Sie jedoch später Dienstunterbrechungen grafisch darstellen möchten, können Sie jeden Eintrag als JSON-Objekt ausgeben, um ihn als Verbrauchsmaterial zu verwenden Ihr Grafikdienst. Da die Daten nicht im Nur-Text-Format auf die Festplatte geschrieben werden, ist keine Konvertierung erforderlich, wenn Sie ein anderes On-Demand-Format benötigen.

Das Journalsystemdkann entweder mit einer vorhandenen Implementierung vonsyslogverwendet werden oder die Funktionalität vonsyslogje nach Ihren Anforderungen ersetzen. Dassystemd-Journal deckt zwar die meisten Protokollierungsanforderungen des Administrators ab, kann jedoch auch vorhandene Protokollierungsmechanismen ergänzen. Beispielsweise verfügen Sie möglicherweise über einen zentralisiertensyslog-Server, mit dem Sie Daten von mehreren Servern kompilieren. Möglicherweise möchten Sie jedoch auch die Protokolle mehrerer Dienste auf einem einzelnen System mit demsystemd-Journal verschachteln. Sie können beides tun, indem Sie diese Technologien kombinieren.

Einstellen der Systemzeit

Einer der Vorteile der Verwendung eines Binärjournals für die Protokollierung besteht in der Möglichkeit, Protokolldatensätze nach Belieben in UTC oder Ortszeit anzuzeigen. Standardmäßig zeigtsystemd die Ergebnisse in der Ortszeit an.

Aus diesem Grund stellen wir sicher, dass die Zeitzone korrekt eingerichtet ist, bevor wir mit dem Journal beginnen. Diesystemd-Suite enthält tatsächlich ein Tool namenstimedatectl, das dabei helfen kann.

Überprüfen Sie zunächst, welche Zeitzonen mit der Optionlist-timezones verfügbar sind:

timedatectl list-timezones

Dadurch werden die auf Ihrem System verfügbaren Zeitzonen aufgelistet. Wenn Sie den gefunden haben, der dem Standort Ihres Servers entspricht, können Sie ihn mithilfe der Optionset-timezone festlegen:

sudo timedatectl set-timezone zone

Verwenden Sie den Befehltimedatectl allein oder mit der Optionstatus, um sicherzustellen, dass Ihr Computer jetzt die richtige Zeit verwendet. Die Anzeige ist dieselbe:

timedatectl status
      Local time: Thu 2015-02-05 14:08:06 EST
  Universal time: Thu 2015-02-05 19:08:06 UTC
        RTC time: Thu 2015-02-05 19:08:06
       Time zone: America/New_York (EST, -0500)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

Die erste Zeile sollte die richtige Uhrzeit anzeigen.

Grundlegende Protokollanzeige

Verwenden Sie den Befehljournalctl, um die Protokolle anzuzeigen, die der Daemon vonjournaldgesammelt hat.

Bei alleiniger Verwendung wird jeder Journaleintrag im System in einem Pager (normalerweiseless) angezeigt, damit Sie ihn durchsuchen können. Die ältesten Einträge werden oben angezeigt:

journalctl
-- Logs begin at Tue 2015-02-03 21:48:52 UTC, end at Tue 2015-02-03 22:29:38 UTC. --
Feb 03 21:48:52 localhost.localdomain systemd-journal[243]: Runtime journal is using 6.2M (max allowed 49.
Feb 03 21:48:52 localhost.localdomain systemd-journal[243]: Runtime journal is using 6.2M (max allowed 49.
Feb 03 21:48:52 localhost.localdomain systemd-journald[139]: Received SIGTERM from PID 1 (systemd).
Feb 03 21:48:52 localhost.localdomain kernel: audit: type=1404 audit(1423000132.274:2): enforcing=1 old_en
Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 2048 avtab hash slots, 104131 rules.
Feb 03 21:48:52 localhost.localdomain kernel: SELinux: 2048 avtab hash slots, 104131 rules.
Feb 03 21:48:52 localhost.localdomain kernel: input: ImExPS/2 Generic Explorer Mouse as /devices/platform/
Feb 03 21:48:52 localhost.localdomain kernel: SELinux:  8 users, 102 roles, 4976 types, 294 bools, 1 sens,
Feb 03 21:48:52 localhost.localdomain kernel: SELinux:  83 classes, 104131 rules

. . .

Sie müssen wahrscheinlich durch Seiten und Seiten mit Daten scrollen, die Zehntausende oder Hunderttausende von Zeilen lang sein können, wennsystemd schon lange auf Ihrem System ist. Dies zeigt, wie viele Daten in der Journaldatenbank verfügbar sind.

Das Format ist denjenigen bekannt, die an die Standardprotokollierung vonsysloggewöhnt sind. Dadurch werden jedoch tatsächlich Daten aus mehr Quellen erfasst, als dies mit herkömmlichensyslog-Implementierungen möglich ist. Es enthält Protokolle des frühen Startvorgangs, des Kernels, der initrd und des Anwendungsstandardfehlers und -ausgangs. Diese sind alle im Journal verfügbar.

Möglicherweise stellen Sie fest, dass alle angezeigten Zeitstempel die Ortszeit sind. Dies ist für jeden Protokolleintrag verfügbar, nachdem die Ortszeit auf unserem System korrekt eingestellt wurde. Alle Protokolle werden mit diesen neuen Informationen angezeigt.

Wenn Sie die Zeitstempel in UTC anzeigen möchten, können Sie das Flag--utc verwenden:

journalctl --utc

Journal nach Zeit filtern

Während der Zugriff auf eine so große Sammlung von Daten auf jeden Fall nützlich ist, kann es schwierig oder unmöglich sein, eine so große Menge an Informationen geistig zu überprüfen und zu verarbeiten. Aus diesem Grund sind die Filteroptionen eines der wichtigsten Merkmale vonjournalctl.

Anzeigen von Protokollen aus dem aktuellen Systemstart

Das grundlegendste davon, das Sie täglich verwenden können, ist das-b-Flag. Hier werden alle Journaleinträge angezeigt, die seit dem letzten Neustart erfasst wurden.

journalctl -b

Auf diese Weise können Sie Informationen identifizieren und verwalten, die für Ihre aktuelle Umgebung relevant sind.

In Fällen, in denen Sie diese Funktion nicht verwenden und mehr als einen Tag Boot anzeigen, sehen Sie, dassjournalctl eine Zeile eingefügt hat, die bei jedem Systemausfall so aussieht:

. . .

-- Reboot --

. . .

Auf diese Weise können Sie die Informationen logisch in Startsitzungen unterteilen.

Vergangene Stiefel

Normalerweise möchten Sie die Informationen des aktuellen Startvorgangs anzeigen, aber manchmal sind auch frühere Startvorgänge hilfreich. Das Journal kann Informationen aus vielen vorherigen Starts speichern, sodassjournalctl verwendet werden können, um Informationen einfach anzuzeigen.

Einige Distributionen ermöglichen standardmäßig das Speichern vorheriger Startinformationen, während andere diese Funktion deaktivieren. Um persistente Startinformationen zu aktivieren, können Sie entweder das Verzeichnis zum Speichern des Journals erstellen, indem Sie Folgendes eingeben:

sudo mkdir -p /var/log/journal

Oder Sie können die Journal-Konfigurationsdatei bearbeiten:

sudo nano /etc/systemd/journald.conf

Setzen Sie im Abschnitt[Journal] die OptionStorage= auf "persistent", um die persistente Protokollierung zu aktivieren:

/etc/systemd/journald.conf

. . .
[Journal]
Storage=persistent

Wenn das Speichern früherer Starts auf Ihrem Server aktiviert ist, bietetjournalctl einige Befehle, mit denen Sie mit Starts als Teilungseinheit arbeiten können. Verwenden Sie die Option--list-boots mitjournalctl, um die Stiefel anzuzeigen, diejournald kennt:

journalctl --list-boots
-2 caf0524a1d394ce0bdbcff75b94444fe Tue 2015-02-03 21:48:52 UTC—Tue 2015-02-03 22:17:00 UTC
-1 13883d180dc0420db0abcb5fa26d6198 Tue 2015-02-03 22:17:03 UTC—Tue 2015-02-03 22:19:08 UTC
 0 bed718b17a73415fade0e4e7f4bea609 Tue 2015-02-03 22:19:12 UTC—Tue 2015-02-03 23:01:01 UTC

Dies zeigt eine Zeile für jeden Start an. Die erste Spalte ist der Versatz für den Start, mit dem der Start mitjournalctl einfach referenziert werden kann. Wenn Sie eine absolute Referenz benötigen, befindet sich die Boot-ID in der zweiten Spalte. Sie können die Uhrzeit, auf die sich die Boot-Sitzung bezieht, anhand der beiden am Ende aufgeführten Zeitangaben ermitteln.

Zum Anzeigen von Informationen aus diesen Startvorgängen können Sie Informationen aus der ersten oder zweiten Spalte verwenden.

Verwenden Sie beispielsweise den relativen Zeiger-1mit dem Flag-b, um das Journal vom vorherigen Start anzuzeigen:

journalctl -b -1

Sie können die Boot-ID auch verwenden, um die Daten von einem Boot abzurufen:

journalctl -b caf0524a1d394ce0bdbcff75b94444fe

Zeitfenster

Während das Anzeigen von Protokolleinträgen nach dem Startvorgang unglaublich nützlich ist, möchten Sie möglicherweise häufig Zeitfenster anfordern, die nicht gut mit Systemstarts übereinstimmen. Dies kann insbesondere dann der Fall sein, wenn es sich um Server mit langer Laufzeit und hoher Verfügbarkeit handelt.

Sie können nach beliebigen Zeitlimits filtern, indem Sie die Optionen--since und--until verwenden, die die angezeigten Einträge auf diejenigen nach bzw. vor der angegebenen Zeit beschränken.

Die Zeitwerte können in verschiedenen Formaten vorliegen. Für absolute Zeitwerte sollten Sie das folgende Format verwenden:

YYYY-MM-DD HH:MM:SS

Beispielsweise können wir alle Einträge seit dem 10. Januar 2015 um 17:15 Uhr anzeigen, indem wir Folgendes eingeben:

journalctl --since "2015-01-10 17:15:00"

Wenn Komponenten des obigen Formats weggelassen werden, werden einige Standardeinstellungen angewendet. Wenn beispielsweise das Datum weggelassen wird, wird das aktuelle Datum angenommen. Wenn die Zeitkomponente fehlt, wird „00:00:00“ (Mitternacht) ersetzt. Das Sekundenfeld kann ebenfalls deaktiviert werden (Standardeinstellung ist "00"):

journalctl --since "2015-01-10" --until "2015-01-11 03:00"

Das Journal versteht auch einige relative Werte und benannte Verknüpfungen. Beispielsweise können Sie die Wörter "gestern", "heute", "morgen" oder "jetzt" verwenden. Sie machen relative Zeiten, indem Sie einem nummerierten Wert ein "-" oder "+" voranstellen oder Wörter wie "vor" in einer Satzkonstruktion verwenden.

Um die Daten von gestern zu erhalten, können Sie Folgendes eingeben:

journalctl --since yesterday

Wenn Sie Berichte über eine Dienstunterbrechung erhalten haben, die um 9:00 Uhr beginnt und bis vor einer Stunde andauert, können Sie Folgendes eingeben:

journalctl --since 09:00 --until "1 hour ago"

Wie Sie sehen, ist es relativ einfach, flexible Zeitfenster zu definieren, um die Einträge zu filtern, die Sie sehen möchten.

Filtern nach Nachrichteninteresse

Wir haben oben einige Möglichkeiten kennengelernt, wie Sie die Journaldaten mithilfe von Zeitbeschränkungen filtern können. In diesem Abschnitt wird erläutert, wie Sie basierend auf dem gewünschten Service oder der gewünschten Komponente filtern können. Das Journalsystemdbietet hierfür verschiedene Möglichkeiten.

Nach Einheit

Möglicherweise ist die nützlichste Art der Filterung nach dem Gerät, an dem Sie interessiert sind. Wir können die Option-u verwenden, um auf diese Weise zu filtern.

Um beispielsweise alle Protokolle einer Nginx-Einheit auf unserem System anzuzeigen, können Sie Folgendes eingeben:

journalctl -u nginx.service

In der Regel möchten Sie wahrscheinlich auch nach der Zeit filtern, um die Zeilen anzuzeigen, die Sie interessieren. Um beispielsweise zu überprüfen, wie der Dienst heute ausgeführt wird, können Sie Folgendes eingeben:

journalctl -u nginx.service --since today

Diese Art der Fokussierung ist äußerst hilfreich, wenn Sie die Möglichkeit des Journals nutzen, Datensätze aus verschiedenen Einheiten zu verschachteln. Wenn Ihr Nginx-Prozess beispielsweise mit einer PHP-FPM-Einheit verbunden ist, um dynamischen Inhalt zu verarbeiten, können Sie die Einträge aus beiden in chronologischer Reihenfolge zusammenführen, indem Sie beide Einheiten angeben:

journalctl -u nginx.service -u php-fpm.service --since today

Dies kann es viel einfacher machen, die Wechselwirkungen zwischen verschiedenen Programmen und Debug-Systemen zu erkennen, als einzelne Prozesse.

Nach Prozess-, Benutzer- oder Gruppen-ID

Einige Dienste rufen eine Vielzahl von untergeordneten Prozessen für die Arbeit hervor. Wenn Sie die genaue PID des Prozesses ermittelt haben, an dem Sie interessiert sind, können Sie auch danach filtern.

Dazu können wir filtern, indem wir das Feld_PIDangeben. Wenn die PID, an der wir interessiert sind, beispielsweise 8088 ist, können wir Folgendes eingeben:

journalctl _PID=8088

In anderen Fällen möchten Sie möglicherweise alle Einträge anzeigen, die von einem bestimmten Benutzer oder einer bestimmten Gruppe protokolliert wurden. Dies kann mit den Filtern_UID oder_GID erfolgen. Wenn Ihr Webserver beispielsweise unter dem Benutzerwww-dataausgeführt wird, können Sie die Benutzer-ID ermitteln, indem Sie Folgendes eingeben:

id -u www-data
33

Anschließend können Sie die zurückgegebene ID verwenden, um die Journalergebnisse zu filtern:

journalctl _UID=33 --since today

Das Journalsystemdenthält viele Felder, die zum Filtern verwendet werden können. Einige davon werden aus dem zu protokollierenden Prozess übergeben, andere werden vonjournald unter Verwendung von Informationen angewendet, die zum Zeitpunkt der Protokollierung vom System erfasst wurden.

Der führende Unterstrich zeigt an, dass das Feld_PIDvom letzteren Typ ist. Das Journal zeichnet die PID des Prozesses, der zur späteren Filterung protokolliert wird, automatisch auf und indiziert sie. Sie können sich über alle verfügbaren Journalfelder informieren, indem Sie Folgendes eingeben:

man systemd.journal-fields

Wir werden einige davon in diesem Handbuch besprechen. Im Moment gehen wir jedoch auf eine weitere nützliche Option ein, die mit dem Filtern nach diesen Feldern zu tun hat. Mit der Option-F können alle verfügbaren Werte für ein bestimmtes Journalfeld angezeigt werden.

Um beispielsweise zu sehen, für welche Gruppen-IDs das JournalsystemdEinträge enthält, können Sie Folgendes eingeben:

journalctl -F _GID
32
99
102
133
81
84
100
0
124
87

Dies zeigt Ihnen alle Werte, die das Journal für das Gruppen-ID-Feld gespeichert hat. Dies kann Ihnen beim Aufbau Ihrer Filter helfen.

Nach Komponentenpfad

Wir können auch filtern, indem wir einen Pfad angeben.

Wenn der Pfad zu einer ausführbaren Datei führt, zeigtjournalctl alle Einträge an, die die betreffende ausführbare Datei betreffen. Um beispielsweise die Einträge zu finden, an denen die ausführbare Dateibashbeteiligt ist, können Sie Folgendes eingeben:

journalctl /usr/bin/bash

Wenn eine Unit für die ausführbare Datei verfügbar ist, ist diese Methode in der Regel übersichtlicher und bietet bessere Informationen (Einträge aus zugeordneten untergeordneten Prozessen usw.). Manchmal ist dies jedoch nicht möglich.

Kernel-Meldungen anzeigen

Kernel-Nachrichten, die normalerweise in der Ausgabe vondmesgenthalten sind, können ebenfalls aus dem Journal abgerufen werden.

Um nur diese Meldungen anzuzeigen, können wir unserem Befehl die Flags-k oder--dmesg hinzufügen:

journalctl -k

Standardmäßig werden die Kernelmeldungen des aktuellen Startvorgangs angezeigt. Sie können einen alternativen Start mithilfe der oben beschriebenen normalen Startauswahlflags angeben. Um beispielsweise die Nachrichten von vor fünf Starts abzurufen, können Sie Folgendes eingeben:

journalctl -k -b -5

Nach Priorität

Ein Filter, an dem Systemadministratoren häufig interessiert sind, ist die Nachrichtenpriorität. Während es oft nützlich ist, Informationen auf einer sehr ausführlichen Ebene zu protokollieren, können Protokolle mit niedriger Priorität ablenkend und verwirrend sein, wenn die verfügbaren Informationen tatsächlich verarbeitet werden.

Mitjournalctl können Sie nur Nachrichten mit einer bestimmten Priorität oder höher anzeigen, indem Sie die Option-p verwenden. Auf diese Weise können Sie Nachrichten mit niedrigerer Priorität herausfiltern.

Um beispielsweise nur Einträge anzuzeigen, die auf der Fehlerebene oder höher protokolliert wurden, können Sie Folgendes eingeben:

journalctl -p err -b

Dies zeigt Ihnen alle Meldungen an, die als Fehler, kritisch, Alarm oder Notfall markiert sind. Das Journal implementiert die Standardnachrichtenebenensyslog. Sie können entweder den Prioritätsnamen oder den entsprechenden numerischen Wert verwenden. In der Reihenfolge der höchsten bis niedrigsten Priorität sind dies:

  • 0: emerg

  • 1: wachsam

  • 2: krit

  • 3: err

  • 4: Warnung

  • 5: beachten Sie

  • 6: info

  • 7: debuggen

Die obigen Nummern oder Namen können austauschbar mit der Option-p verwendet werden. Wenn Sie eine Priorität auswählen, werden Nachrichten angezeigt, die auf der angegebenen Ebene und darüber markiert sind.

Journalanzeige ändern

Oben haben wir die Eintragsauswahl durch Filtern demonstriert. Es gibt aber auch andere Möglichkeiten, die Ausgabe zu ändern. Wir können die Anzeige vonjournalctlan verschiedene Anforderungen anpassen.

Ausgabe kürzen oder erweitern

Wir können anpassen, wiejournalctl Daten anzeigt, indem wir sie anweisen, die Ausgabe zu verkleinern oder zu erweitern.

Standardmäßig zeigtjournalctl den gesamten Eintrag im Pager an, sodass die Einträge rechts auf dem Bildschirm angezeigt werden. Auf diese Informationen kann durch Drücken der rechten Pfeiltaste zugegriffen werden.

Wenn Sie die Ausgabe lieber abschneiden lassen möchten und eine Ellipse einfügen möchten, in der Informationen entfernt wurden, können Sie die Option--no-fullverwenden:

journalctl --no-full
. . .

Feb 04 20:54:13 journalme sshd[937]: Failed password for root from 83.234.207.60...h2
Feb 04 20:54:13 journalme sshd[937]: Connection closed by 83.234.207.60 [preauth]
Feb 04 20:54:13 journalme sshd[937]: PAM 2 more authentication failures; logname...ot

Sie können damit auch in die entgegengesetzte Richtung gehen undjournalctl anweisen, alle Informationen anzuzeigen, unabhängig davon, ob sie nicht druckbare Zeichen enthalten. Wir können dies mit dem Flag-atun:

journalctl -a

Ausgabe auf Standard Out

Standardmäßig zeigtjournalctl die Ausgabe in einem Pager an, um den Verbrauch zu vereinfachen. Wenn Sie jedoch vorhaben, die Daten mit Textbearbeitungswerkzeugen zu verarbeiten, möchten Sie wahrscheinlich die Standardausgabe verwenden können.

Sie können dies mit der Option--no-pagertun:

journalctl --no-pager

Dies kann je nach Bedarf sofort in ein Verarbeitungsdienstprogramm weitergeleitet oder in eine Datei auf der Festplatte umgeleitet werden.

Ausgabeformate

Wenn Sie Journaleinträge wie oben erwähnt verarbeiten, fällt es Ihnen wahrscheinlich leichter, die Daten zu analysieren, wenn sie in einem konsumierbaren Format vorliegen. Glücklicherweise kann das Journal je nach Bedarf in verschiedenen Formaten angezeigt werden. Sie können dies mit der Option-o mit einem Formatbezeichner tun.

Beispielsweise können Sie die Journaleinträge in JSON ausgeben, indem Sie Folgendes eingeben:

journalctl -b -u nginx -o json
{ "__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635", "__REALTIME_TIMESTAMP" : "1422990364739502", "__MONOTONIC_TIMESTAMP" : "27200938", "_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d", "PRIORITY" : "6", "_UID" : "0", "_GID" : "0", "_CAP_EFFECTIVE" : "3fffffffff", "_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee", "_HOSTNAME" : "desktop", "SYSLOG_FACILITY" : "3", "CODE_FILE" : "src/core/unit.c", "CODE_LINE" : "1402", "CODE_FUNCTION" : "unit_status_log_starting_stopping_reloading", "SYSLOG_IDENTIFIER" : "systemd", "MESSAGE_ID" : "7d4958e842da4a758f6c1cdc7b36dcc5", "_TRANSPORT" : "journal", "_PID" : "1", "_COMM" : "systemd", "_EXE" : "/usr/lib/systemd/systemd", "_CMDLINE" : "/usr/lib/systemd/systemd", "_SYSTEMD_CGROUP" : "/", "UNIT" : "nginx.service", "MESSAGE" : "Starting A high performance web server and a reverse proxy server...", "_SOURCE_REALTIME_TIMESTAMP" : "1422990364737973" }

. . .

Dies ist nützlich zum Parsen mit Dienstprogrammen. Sie können das Formatjson-prettyverwenden, um die Datenstruktur besser in den Griff zu bekommen, bevor Sie sie an den JSON-Consumer weitergeben:

journalctl -b -u nginx -o json-pretty
{
    "__CURSOR" : "s=13a21661cf4948289c63075db6c25c00;i=116f1;b=81b58db8fd9046ab9f847ddb82a2fa2d;m=19f0daa;t=50e33c33587ae;x=e307daadb4858635",
    "__REALTIME_TIMESTAMP" : "1422990364739502",
    "__MONOTONIC_TIMESTAMP" : "27200938",
    "_BOOT_ID" : "81b58db8fd9046ab9f847ddb82a2fa2d",
    "PRIORITY" : "6",
    "_UID" : "0",
    "_GID" : "0",
    "_CAP_EFFECTIVE" : "3fffffffff",
    "_MACHINE_ID" : "752737531a9d1a9c1e3cb52a4ab967ee",
    "_HOSTNAME" : "desktop",
    "SYSLOG_FACILITY" : "3",
    "CODE_FILE" : "src/core/unit.c",
    "CODE_LINE" : "1402",
    "CODE_FUNCTION" : "unit_status_log_starting_stopping_reloading",
    "SYSLOG_IDENTIFIER" : "systemd",
    "MESSAGE_ID" : "7d4958e842da4a758f6c1cdc7b36dcc5",
    "_TRANSPORT" : "journal",
    "_PID" : "1",
    "_COMM" : "systemd",
    "_EXE" : "/usr/lib/systemd/systemd",
    "_CMDLINE" : "/usr/lib/systemd/systemd",
    "_SYSTEMD_CGROUP" : "/",
    "UNIT" : "nginx.service",
    "MESSAGE" : "Starting A high performance web server and a reverse proxy server...",
    "_SOURCE_REALTIME_TIMESTAMP" : "1422990364737973"
}

. . .

Die folgenden Formate können zur Anzeige verwendet werden:

  • cat: Zeigt nur das Nachrichtenfeld selbst an.

  • export: Ein Binärformat, das zum Übertragen oder Sichern geeignet ist.

  • json: Standard-JSON mit einem Eintrag pro Zeile.

  • json-pretty: JSON formatiert für eine bessere Lesbarkeit

  • json-sse: JSON-formatierte Ausgabe, um das Hinzufügen eines vom Server gesendeten Ereignisses kompatibel zu machen

  • short: Die Standardausgabe vonsyslog

  • short-iso: Das Standardformat wurde erweitert, um Zeitstempel für die Wanduhr nach ISO 8601 anzuzeigen.

  • short-monotonic: Das Standardformat mit monotonen Zeitstempeln.

  • short-precise: Das Standardformat mit Mikrosekundengenauigkeit

  • verbose: Zeigt jedes für den Eintrag verfügbare Journalfeld an, einschließlich der normalerweise intern ausgeblendeten.

Mit diesen Optionen können Sie die Journaleinträge in dem Format anzeigen, das Ihren aktuellen Anforderungen am besten entspricht.

Aktive Prozessüberwachung

Der Befehljournalctl ahmt nach, wie viele Administratorentail zur Überwachung aktiver oder aktueller Aktivitäten verwenden. Diese Funktionalität ist injournalctl integriert, sodass Sie auf diese Funktionen zugreifen können, ohne zu einem anderen Tool weiterleiten zu müssen.

Anzeigen der letzten Protokolle

Um eine festgelegte Anzahl von Datensätzen anzuzeigen, können Sie die Option-n verwenden, die genau wietail -n funktioniert.

Standardmäßig werden die letzten 10 Einträge angezeigt:

journalctl -n

Sie können die Anzahl der Einträge angeben, die Sie mit einer Zahl nach-n sehen möchten:

journalctl -n 20

Folgende Protokolle

Um die Protokolle beim Schreiben aktiv zu verfolgen, können Sie das Flag-fverwenden. Auch dies funktioniert wie erwartet, wenn Sie Erfahrung mittail -f haben:

journalctl -f

Journalpflege

Möglicherweise fragen Sie sich, welche Kosten für die Speicherung aller Daten anfallen, die wir bisher gesehen haben. Außerdem könnten Sie daran interessiert sein, ältere Protokolle zu bereinigen und Speicherplatz freizugeben.

Ermitteln der aktuellen Datenträgernutzung

Mithilfe des Flags--disk-usagekönnen Sie den Speicherplatz ermitteln, den das Journal derzeit auf der Festplatte belegt:

journalctl --disk-usage
Journals take up 8.0M on disk.

Alte Protokolle löschen

Wenn Sie Ihr Tagebuch verkleinern möchten, können Sie dies auf zwei verschiedene Arten tun (verfügbar mitsystemd Version 218 und höher).

Wenn Sie die Option--vacuum-size verwenden, können Sie Ihr Tagebuch verkleinern, indem Sie eine Größe angeben. Dadurch werden alte Einträge entfernt, bis der gesamte auf der Festplatte belegte Journalspeicher die angeforderte Größe hat:

sudo journalctl --vacuum-size=1G

Eine andere Möglichkeit, das Journal zu verkleinern, besteht darin, mit der Option--vacuum-timeeine Grenzzeit bereitzustellen. Alle darüber hinausgehenden Einträge werden gelöscht. Auf diese Weise können Sie die Einträge, die nach einer bestimmten Zeit erstellt wurden, beibehalten.

Um beispielsweise Einträge aus dem letzten Jahr beizubehalten, können Sie Folgendes eingeben:

sudo journalctl --vacuum-time=1years

Begrenzung der Journalerweiterung

Sie können Ihren Server so konfigurieren, dass der für das Journal verfügbare Speicherplatz begrenzt wird. Dies kann durch Bearbeiten der/etc/systemd/journald.conf-Datei erfolgen.

Die folgenden Elemente können verwendet werden, um das Journalwachstum zu begrenzen:

  • SystemMaxUse=: Gibt den maximalen Speicherplatz an, der vom Journal im dauerhaften Speicher verwendet werden kann.

  • SystemKeepFree=: Gibt an, wie viel Speicherplatz das Journal beim Hinzufügen von Journaleinträgen zum dauerhaften Speicher frei lassen soll.

  • SystemMaxFileSize=: Steuert, wie groß einzelne Journaldateien im dauerhaften Speicher werden können, bevor sie gedreht werden.

  • RuntimeMaxUse=: Gibt den maximalen Speicherplatz an, der im flüchtigen Speicher verwendet werden kann (innerhalb des Dateisystems von/run).

  • RuntimeKeepFree=: Gibt an, wie viel Speicherplatz für andere Zwecke beim Schreiben von Daten in einen flüchtigen Speicher (innerhalb des Dateisystems von/run) reserviert werden soll.

  • RuntimeMaxFileSize=: Gibt an, wie viel Speicherplatz eine einzelne Journaldatei im flüchtigen Speicher (innerhalb des Dateisystems von/run) belegen kann, bevor sie gedreht wird.

Durch Festlegen dieser Werte können Sie steuern, wiejournald Speicherplatz auf Ihrem Server belegt und beibehält. Beachten Sie, dassSystemMaxFileSize undRuntimeMaxFileSize auf archivierte Dateien abzielen, um die angegebenen Grenzwerte zu erreichen. Dies ist wichtig, wenn Sie die Anzahl der Dateien nach einer Staubsaugoperation interpretieren.

Fazit

Wie Sie sehen können, ist das Journalsystemdunglaublich nützlich, um Ihre System- und Anwendungsdaten zu erfassen und zu verwalten. Die größte Flexibilität ergibt sich aus den umfangreichen automatisch erfassten Metadaten und der zentralen Protokollierung. Mit dem Befehljournalctl können Sie auf einfache Weise die erweiterten Funktionen des Journals nutzen und verschiedene Anwendungskomponenten umfassend analysieren und relational debuggen.