Master Journalctl Verständnis von Systemd -Protokollen

Master Journalctl Verständnis von Systemd -Protokollen
Systemd ist das neue Tool -Managing -Dienste. Erstellt anfänglich von Red Hat erstellt, ermöglicht es, Dienste über einen zentralen Prozess besser zu verwalten, der Dienste nach Bedarf überwacht und startet. Systemd enthält aber auch ein Containersystem, ein Cron -System, eine Möglichkeit, Diensten auf sichere Weise und auch ein Protokollierungssystem temporäre Verzeichnisse bereitzustellen - hier konzentrieren wir uns hier.

Das Verstehen von Protokollen ist wichtig: Wenn Sie jemals auf einen Server fallen, der einen Fehler hat oder gehackt ist, ist dies im Allgemeinen Ihre einzige Möglichkeit, zu verstehen, was passiert ist. Die Hauptanwendung, die wir verwenden werden, ist Journalctl, daher der Name des Artikels. Hören Sie also genau zu, wie am richtigen Tag Sie sich freuen zu wissen, wie es funktioniert.

Wo werden Systemd -Protokolle gespeichert? Und in welchem ​​Format es gespeichert ist?

Wir werden davon ausgehen, dass Sie ein normales System haben, da Systemd so angepasst werden kann, dass sie sich an außergewöhnlichen Stellen befinden. Auch einige Linux -Verteilungen wie Ubuntu 16.04 Behinderte persistente Protokollierung standardmäßig, die verhindern, dass Systemd seine Arbeit korrekt erledigt. Wenn Sie eine solche Verteilung haben, bearbeiten/etc/systemd/journald.Conf -Datei, ändern Sie Storage = Auto in Storage = Persistent und schließlich Neustart.

Normalerweise finden Sie normalerweise die Systemd -Protokolldateien in/var/log/journal. Das Journaling-System ist selbst ein Dienst namens System-Journald.Service. Versuchen wir, die Dateien in diesem Verzeichnis aufzulisten:

# ls/var/log/journal/-r
/var/log/journal/:
15E43C1734090AC7FBEA6B40FCD99D31
/var/log/journal/15E43C1734090AC7FBEA6B40FCD99D31:
[email protected] ~
System@62AC1299826D036CB043D6C06A9493B7-00000000000001-00067D6410099A19.Tagebuch
[email protected] ~
User-1000@2123BC076B58569FE1FB13E9DBC1B0E0-00000000000001-0007FE36AC2810E0.Tagebuch
Benutzer-1000.Tagebuch
[Viele andere Dateien wie oben…]

Da ich möchte, dass Sie weiter lesen, musste ich die Ausgabe verkürzen, da sie viele Dateien enthält (in meinem Beispiel mehr als 60 Dateien), tut mir leid! Versucht, vielleicht einen zu öffnen?

# Head --bytes = 512/var/log/journal/15E43C1734090AC7FBEA6B40FCD99D31/User-1000@2123BC076
B58569FE1FB13E9DBC1B0E0-00000000000001-0007FE36AC2810E0.Tagebuch
?s, q?n/flz???Ulz?l?]????
?_?B???z????Ö?y1kn ?ich?eo??W?u? ?=?x0?L?D?7??X4n#?e? D3l?
P??O | MFO:?!QS?.tk??R?\??1?| 5 ????$?G??#?S??;??B7???????T???Y????mn?Q????Zq
?Yv?e?????Bd?C?? wf??d |
?2?? 7???????[??Un?= 8????C?2 = p?&?" ?0
????*????_?? ???
5?????yk?G? ?6?|??u??W: #12?Y??
3 tu;???''?JX??2?X'?=??[Q???@Z
T_???3ehmd?@?_?>??3s???,lr?.?$?G?L???S?/E??M1??Q???

Hey, siehe, das sieht nicht wirklich aus wie die üblichen Protokolldateien, die Sie richtig sehen? Machen Sie sich keine Sorgen, diese Datei ist nicht beschädigt, Sie haben gerade einen Aspekt von Systemd: systemd festgestellt, die Dateien in einem binären Format speichern. Deshalb ist es so klein wie möglich: Strukturierte Daten wie Zeit oder Ort werden in Binärdatum gerade gespeichert, was im Allgemeinen weniger Bytes erfordert als Text. Aber das ist nicht der einzige Grund.

Systemd speichert nicht nur Protokolllinien. Seine Absicht ist es, die Überwachung und Erforschung von Protokollen zu erleichtern. Um bei dieser Aufgabe zu helfen, sind Protokollnachrichten tatsächlich eine Textzeile, die mit Daten wie Protokollschweregrad (Warnung, Fehler usw.) oder sogar Felder, die nur für Ihre Bewerbung nützlich sind (zum Beispiel angeforderte URL).

# Journalctl -output = verbose -alle
Priorität = 6
_Uid = 0
_Gid = 0
_Cap_effective = 3ffffffffff
_Boot_id = ee4cc2ce7e8273aaffb5fc59c873ce7b
_Maachine_id = bc422e0Feaab64bb7dd218c24e6830e5
_Hostname = Linux
Syslog_facility = 3
Syslog_identifier = systemd
Einheit = DNF-Makecache.Service
_Transport = journal
_Pid = 1
_Comm = systemd
_Exe =/usr/lib/systemd/systemd
_Cmdline =/usr/lib/systemd/systemd-switched-root--System-Deserialize 76
_Systemd_cgroup =/init.Umfang
_Systemd_unit = init.Umfang
_Systemd_Slice =-.Scheibe
_Selinux_context = system_u: system_r: init_t: s0
Code_file = src/core/job.C
Code_line = 795
Code_function = job_log_status_message
Message_ID = A76E08846F5F0971371DBB11126E62E1
Message = gestartet DNF Makecache.
|
_Source_Realtime_timestamp = 1532886335471422

Ich habe Ihnen gesagt, dass es viele Felder gibt (hier gibt es 25 Felder oder 29 Zählzeitstempel), das gesamte Snippet oben ist nur für eine einzelne Protokollnachricht! Der große Vorteil besteht darin, dass Sie eine Suche durch Filtern auf jedem Feld in dieser Protokollnachricht ausführen können. Dies ermöglicht es Ihnen wirklich, erweiterte Filterung.

Einer der offensichtlichsten Filter, den Sie möchten, ist das Filtern des Dienstes. Wie Sie oben sehen können, gibt es ein Einheitsfeld, sodass Sie leicht filtern können, um nur Protokollnachrichten von einem Dienst zu erhalten. Ich werde Ihnen später mehr darüber erzählen.

Diese Datenmenge bedeutet jedoch auch etwas anderes: In fast allen Fällen werden Sie niemals eine Protokolldatei manuell öffnen und Sie werden niemals den Ordner/var/log/journal berühren. Sie verwenden JournalCtl für jede Aufgabe, die sich auf die Protokollierung bezieht. Es gibt keine solche Log -Rotationssache, alles wird durch Protokollnachrichtenzeit verwaltet.

Auch die Anzahl der Felder hängt davon ab, wie gut die Integration von Systemd in Ihre Anwendung ist. Je mehr Felder eine Protokollnachricht enthält, desto besser ist es. Bei Basissystemdiensten hat sich Systemd bereits um eine gute Integration gekümmert, aber für andere Anwendungen und Dienste variiert die Qualität der Integration sehr stark. Normalerweise sollte dies im Laufe der Zeit besser werden, da sich Menschen an systemd gewöhnen.

Okay, jetzt ist es Zeit, die Funktionen von JournalCtl zu entdecken.

Die meisten verwendeten Befehle für JournalCtl

Der erste Befehl, den Sie vielleicht ansehen möchten, ist derjenige, der die Protokolle des Linux -Kernels zeigt. Ja, Systemd kümmert sich auch um die Speicherung von Kernel -Protokollen, sodass Sie auch die Protokolle früherer Stiefel erhalten können. Hier ist der Befehl:

# Journalctl--Catalog-lines = 3000--Pager-End "_transport = kernel"

Es zeigt Ihnen einen Pager, bei dem Sie die letzten Nachrichten sehen können. Sie können mit Pfeiltasten (↑ / ↓) oder Seite nach oben / Seite nach unten zu den letzten 3.000 Zeilen scrollen. Das Flag -Catalog -Flag weist JournalCTL an, Kontext rund um Protokollzeilen zu zeigen, ähnlich wie bei den Neustarts des Computers oder in anderen Kontexten ein Service -Stopp / Start in anderen Kontexten. Ich habe diese Flagge immer als Kontext immer wichtiger.

Vielleicht möchten Sie vielleicht nur die Protokollzeilen aus dem aktuellen Start sehen:

# Journalctl--Catalog-lines = 35000--Pager-End-Boot "_transport = kernel"

Beachten Sie, dass das Argument der Boot -Befehlszeile in allen Situationen funktioniert, nicht nur mit Kernels Protokollen. Wenn Sie von Anfang an beginnen:

# Journalctl --Catalog -Boot "_transport = kernel"

Ich weiß nicht, ob es für Sie der Fall ist, aber ich habe genug Kernelprotokolle! Und was ist mit einem allgemeinen Überblick über Ihre Maschine??

# Journalctl--catalog-lines = 3000-Pager-End

Wow, in Ihrem System passieren viele Dinge! Ein bisschen Filterung wäre hier hilfreich. Einer der am häufigsten verwendeten Filter ist das Abzug mit einem bestimmten Dienst (wie Ihrem SSH -Server oder Ihrem HTTP -Server). Der Systemd -Einheit -Dateiname für SSH -Dienst ist SSHD.Service, also:

|.Service

Das ist cool, nicht wahr?? Nun, es ist nur nutzbar, wenn Sie den Namen des Dienstes kennen - aber in vielen Fällen kennen Sie den Namen dieses Dienstes nicht. Wenn Sie sich in einer solchen Situation befinden, möchten Sie möglicherweise eine Auflistung der Dienste, deren Beschreibungen und deren Status:

# SystemCTL List-Units --Type = Service

Okay, dieses Problem ist jetzt gelöst. Aber manchmal haben Sie eine Fehlermeldung, die Sie von einem externen System wie Ihrer eigenen Website oder einer Anwendung auf Ihrem Desktop erhalten. Sie möchten also wahrscheinlich ein bestimmtes Wort oder Satz in der Protokollnachricht durchsuchen. Seit Systemd v237 ist es jetzt möglich.

In JournalCTL ist die Suche in Suchgremien unempfindlich, wenn das von Ihnen gesuchte Wort in Kleinbuchstaben ist. Wenn Sie also nach dem Wort Port suchen. Ein Beispiel:

# Journalctl--Catalog-lines = 3000--Pager-End --grep = "Port"

Wenn Sie nun ein Wort wie CPU durchsuchen, werden CPU nur mit allen kapitalisierten Buchstaben durchsucht. Es wird keine CPU durchsucht.

# JournalCtl--Catalog-lines = 3000--Pager-End --grep = "CPU"

Sie erinnern sich an die Fehlermeldung aus dem externen System? Im Allgemeinen enthält diese Nachrichten einen Zeitstempel. Um die Protokollnachricht zu filtern, möchten Sie diesen Zeitstempel möglicherweise verwenden. JournalCtl kann Sie alle auflisten, die Sie mit dem Argument -Since -Argument angeben:

# Journalctl--Catalog-S-Since = "2018-07-30 09:30:00"

Wenn dieses externe System entfernt ist oder UTC -Zeitstempel verwendet, möchten Sie basierend auf einem UTC -Datum und -Toman filtern und im Terminal an den UTC -Zeitstempeln angezeigt werden, sodass Sie es nicht in Ihrem Kopf konvertieren müssen Wirklich verwirrend. Dazu müssen Sie UTC nach dem Zeitzeichen im Argument in der Zeit hinzufügen. Sie müssen dann das -UTC -Flag hinzufügen. Also zum Beispiel:

# Journalctl--Catalog-S-Since = "2018-07-30 10:45:00 UTC"-UTC

Beachten Sie, dass Sie das -UTC -Flag allein verwenden können. In diesem Fall werden im Grunde genommen alle Daten und Zeiten in UTC Timezone angezeigt.

|

Protokolle werden besser mit Journalctl verwaltet

Wie Sie bei allen vorherigen Befehlen sehen können, erleichtert das Systemd Journaling die Filterung und so das Debuggen, wie Sie über alle Protokollzeilen mit einem einzigen Befehl, JournalCTL, auswählen können. Einige von Ihnen wussten wahrscheinlich die alten Zeit. Mit all den Tipps, die Sie hier gelernt haben.