Logs

Veröffentlicht am:

Die wichtigsten Befehle zum Merken

  • journalctl -b -n 20 — jüngste Einträge dieses Starts prüfen.
  • journalctl -o json — strukturierte Journalfelder behalten.
  • jq — Felder gezielt statt nach Textposition auswählen.

Befehle und Optionen

Befehl oder Option Bedeutung
-b Auf den aktuellen Systemstart begrenzen.
-n 20 Höchstens zwanzig jüngste passende Einträge liefern.
--no-pager Direkt ausgeben und beenden.
-o json Ein JSON-Objekt pro Journaleintrag ausgeben.
jq '{time_us: …, unit: …, message: …}' Zeitstempel, Systemunit und Nachricht auswählen und benennen.
| Ausgabe von journalctl an jq weitergeben.

__REALTIME_TIMESTAMP ist ein Empfangszeitstempel in Mikrosekunden seit der Unix-Epoche, meist als JSON-String. Er muss nicht dem Erzeugungszeitpunkt in der Anwendung entsprechen.

Die entscheidenden Konzepte

1. Ein Log ist ein aufgezeichnetes Ereignis, kein Gesamtablauf

Ein Logeintrag enthält, was eine Komponente ausgeben wollte: Anfrage, Zustandswechsel, Fehler oder anderes Ereignis. Er ist ein Beleg an einem Beobachtungspunkt, keine vollständige Ausführungswiederholung.

Loglevel, Sampling, Pufferung, Sammlung und Aufbewahrung bestimmen den Bestand. Ein fehlender Eintrag kann ein ausgebliebenes Ereignis bedeuten, aber auch fehlende Aufzeichnung oder einen begrenzten Ausschnitt.

2. Struktur erleichtert gezielte Fragen

Strukturierte Logs trennen Zeit, Schweregrad, Dienst, Anfragekennung und Nachricht. Werkzeuge können dadurch Kennungen filtern oder Fehlercodes zählen, ohne instabile Textpositionen zu erraten.

Die Feldbedeutung bleibt entscheidend. Zeit kann Erzeugung oder Empfang meinen. Schweregrade sind Konventionen; Warnungen verschiedener Dienste können operativ Unterschiedliches bedeuten. Einheitliche Schemas erleichtern Vergleiche.

3. Korrelation verbindet Komponentenereignisse

Eine Anfrage kann Logs in Proxy, Anwendung und Datenbank erzeugen. Gemeinsame Anfrage- oder Tracekennungen helfen bei der Zuordnung trotz ähnlicher oder leicht abweichender Zeiten.

Korrelation allein beweist keine Ursache. Zeitnahe Einträge können unabhängig sein; wiederholte Kennungen können Retries darstellen. Beachte Operation, Komponente und Versuch vor dem Aufbau einer Ereignisfolge.

4. Nützliche Logs gleichen Kontext und Kosten aus

Eine Nachricht sollte Operation und relevanten Fehlerkontext verständlich machen. Jedes Byte zu protokollieren kann dagegen Kosten erhöhen, Suche verlangsamen und Zugangsdaten oder persönliche Informationen offenlegen.

Bevorzuge Kennungen und begrenzte Diagnosedetails gegenüber vollständigen Requests oder Tokens. Aufbewahrung und Zugriff müssen zum Inhalt passen. Erfolgreiches Schreiben beweist zudem weder Indexierung im Collector noch Alarmauswertung.

Ein kleines Beispiel

Optional: Lies für dein Konto sichtbare Journaleinträge. Zur Formatdemonstration sind keine erhöhten Rechte erforderlich. Die Befehle erzeugen und löschen keine Einträge.

journalctl -b -n 20 --no-pager
journalctl -b -n 20 --no-pager -o json | jq '{time_us: .__REALTIME_TIMESTAMP, unit: ._SYSTEMD_UNIT, message: .MESSAGE}'

Vergleiche lesbare Ausgabe und JSON-Felder. unit kann bei fehlendem _SYSTEMD_UNIT null sein, ohne den Eintrag ungültig zu machen. Felder können auch Arrays oder andere Darstellungen besitzen.

Die Aufrufe erfolgen zu verschiedenen Zeitpunkten und können neuere Einträge unterschiedlich erfassen. Rechte, fehlende Ereignisse oder flüchtige Speicherung begrenzen die Sicht ebenfalls. Das Ergebnis ist ein Ausschnitt dieses Starts, keine vollständige Rechnerhistorie.

Merke dir: Logs sind ausgewählte Ereignisbelege. Felder, Sammelweg und Sichtbarkeitsgrenzen bestimmen ihre Aussagekraft.