Zum Inhalt springen

LPIC102/108.2 Systemprotokollierung: Unterschied zwischen den Versionen

Aus Foxwiki
 
(11 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 19: Zeile 19:


== rsyslog ==
== rsyslog ==
Zur Konfiguration von ''rsyslog'' sind die Dateien ''/etc/rsyslog.conf'' und ''/etc/rsyslog.d''
Konfiguration
* Besteht aus drei Komponenten: ''facility''.''level'' ''action''
* /etc/rsyslog.conf
*''facility'' legt dabei die Einrichtung fest, ''level'' den Protokollierungsgrad und ''action'' wohin das ''facility'' protokollieren soll
* /etc/rsyslog.d
cat /etc/rsyslog.conf
 
Besteht aus drei Komponenten: ''facility'', ''level'', ''action''
* ''facility'' legt dabei die Einrichtung fest
* ''level'' den Protokollierungsgrad
* ''action'' wohin das ''facility'' protokollieren soll


==Untersuchen von Logdateien==
==Untersuchen von Logdateien==
Wenn Fehler auftreten, ist das Verzeichnis ''/var/log/'' die erste Anlaufstelle. Mit dem Pager ''less'' können sie eine Logdatei untersuchen bspw.:
Wenn Fehler auftreten, ist das Verzeichnis ''/var/log/'' die erste Anlaufstelle. Mit dem Pager ''less'' können sie eine Logdatei untersuchen bspw.:
  # less /var/log/syslog
  sudo less /var/log/syslog


Bei sehr großen Logdateien ist eher ''tail'' die richtige Wahl, da es die letzten zehn Zeilen einer Datei anzeigt. Mit der Option ''-f'' wird die Datei samt Änderungen im laufenden Betrieb angezeigt.
Bei sehr großen Logdateien ist eher ''tail'' die richtige Wahl, da es die letzten zehn Zeilen einer Datei anzeigt. Mit der Option ''-f'' wird die Datei samt Änderungen im laufenden Betrieb angezeigt.
  # tail -f /var/log/syslog
  sudo tail -f /var/log/syslog


Wenn sie in einer Logdatei nach einem bestimmten Ereignistyp filtern wollen, empfiehlt sich ''grep'' dafür.
Wenn sie in einer Logdatei nach einem bestimmten Ereignistyp filtern wollen, empfiehlt sich ''grep'' dafür.
  # grep sshd /var/log/syslog | grep invalid | less
  sudo grep sshd /var/log/syslog | grep invalid | less


In diesem Beispiel werden die Einträge gesucht, die der ''sshd'' eingetragen hat. Anschließend filtert er, die ein ''invalid'' haben und am Ende übergibt er sie weiter an ''less''.
In diesem Beispiel werden die Einträge gesucht, die der ''sshd'' eingetragen hat. Anschließend filtert er, die ein ''invalid'' haben und am Ende übergibt er sie weiter an ''less''.
Zeile 99: Zeile 103:


=== journalctl ===
=== journalctl ===
{|class="wikitable"
{|class="wikitable options big"
! Option !! Bedeutung
! Option !! Bedeutung
|-
|-
|''-f'' || verhält sich so wie <code>tail -f </code>
| -f || verhält sich so wie tail -f  
|-
|-
|''-e'' || lässt ''journalctl'' ans Ende des Journals springen
| -e || lässt journalctl ans Ende des Journals springen
|-
|-
|''-n'' || verhält sich so wie <code>tail -n </code>
| -n || verhält sich so wie tail -n  
|-
|-
|''-r'' || zeigt die neuesten Einträge
| -r || zeigt die neuesten Einträge
|-
|-
|''-b'' || zeigt nur die Einträge seit dem letzten Systemstart
| -b || zeigt nur die Einträge seit dem letzten Systemstart
|-
|-
|''--since "Datum Uhrzeit" --until "Datum Uhrzeit" || zeigt Einträge in einem bestimmten Zeitraum
| --since "Datum Uhrzeit" --until "Datum Uhrzeit" || zeigt Einträge in einem bestimmten Zeitraum
|-
|-
|''-u'' || zeigt nur Einträge eines bestimmten Diensts
| -u || zeigt nur Einträge eines bestimmten Diensts
|-
|-
|''-p err'' || zeigt nur Fehlereinträge
| -p err || zeigt nur Fehlereinträge
|}
|}


=== Konfiguration ===
=== Konfiguration ===
Die Konfiguration von ''journald'' kann man in der ''/etc/systemd/journald.conf'' vornehmen
; /etc/systemd/journald.conf
* Mit ''Storage'' legt man fest, wie die Journale gespeichert werden
{| class="wikitable options big"
* Auf "volatile" wird lediglich im RAM gespeichert
|-
* Auf "persistent" wird automatisch das Verzeichnis ''/var/log/journal'' erstellt und dort gespeichert
! Direktive !! Beschreibung
* Mit ''compress'' werden große Objekte komprimiert, bevor sie gespeichert werden
|-
* ''ForwardToSyslog'' leitet die Ereignisse zusätzlich an syslog weiter
| Storage || legt fest, wie die Journale gespeichert werden
* ''SplitMode'' legt seperate Journale pro User an.
* volatile: wird lediglich im RAM gespeichert
* ''SystemMaxUse'' um die maximale Größe des Journals festzulegen. Das Gegenstück wäre ''SystemKeepFree''
* persistent: Verzeichnis ''/var/log/journal'' wird automatisch erstellt und dort gespeichert
* ''MaxFileSec'' legt die Zeit fest, für die einzelner Journaleintrag gespeichert werden soll
* compress: Große Objekte werden komprimiert, bevor sie gespeichert werden
|-
| ForwardToSyslog || Leitet die Ereignisse zusätzlich an syslog weiter
|-
| SplitMode || Legt separate Journale pro User an
|-
| SystemMaxUse || Maximale Größe des Journals festlegen (Gegenstück wäre ''SystemKeepFree'')
|-
| MaxFileSec || legt die Zeit fest, für die ein einzelner Journaleintrag gespeichert werden soll
|}


=== Pflege ===
=== Pflege ===
* Mit <code>journalctl --disk-usage</code> erfährt man, wie viel das Journal belegt
; Journalgröße prüfen
* Mit <code>journalctl --vacuum-size</code> werden ältere Einträge aus dem Journal entfernt
journalctl --disk-usage
 


==Selbst Ereignisse loggen==
; Journalgröße verringern
Ältere Einträge aus dem Journal entfernen
journalctl --vacuum-size


== Selbst Ereignisse loggen ==
Mit ''[[logger]]'' kann man ein Ereignis selbst erstellen. Wenn man ein Skript erstellt hat, was eigenständig was durchführt, kann man mit ''logger'' einen Eintrag ins ''Syslog'' erstellen.
Mit ''[[logger]]'' kann man ein Ereignis selbst erstellen. Wenn man ein Skript erstellt hat, was eigenständig was durchführt, kann man mit ''logger'' einen Eintrag ins ''Syslog'' erstellen.


Zeile 142: Zeile 159:
  # tail -1 /var/log/syslog
  # tail -1 /var/log/syslog
  Jul 12 10:48:54 user Syslogger: Systemlogbuch
  Jul 12 10:48:54 user Syslogger: Systemlogbuch
[[logger]] schreibt auch in den journald


Der Befehl ''logger'' schreibt auch in den journald. Für den journald gibt es auch ein eigenes Werkzeug:
Für den journald gibt es auch ein eigenes Werkzeug:
  # echo "alles läuft gut" | systemd-cat -p info
  # echo "alles läuft gut" | systemd-cat -p info
  # journalctl -e
  # journalctl -e
  Jul 12 10:50:48 user unknown[9183]: alles läuft gut#
  Jul 12 10:50:48 user unknown[9183]: alles läuft gut


*Die Option ''-t'' bei ''logger'' und ''systemd-cat'' dient als Identifikation der protokollierenden Einrichtung.
* Die Option ''-t'' bei ''logger'' und ''systemd-cat'' dient als Identifikation der protokollierenden Einrichtung.
*Die Option ''-p'' gibt die Priorität des Eintrags an. Diese wären ''emerg'', ''alert'', ''crit'', ''err'', ''warning'', ''notice'', ''info'' und ''debug''
* Die Option ''-p'' gibt die Priorität des Eintrags an.  
** Diese wären ''emerg'', ''alert'', ''crit'', ''err'', ''warning'', ''notice'', ''info'' und ''debug''


==Zusammenfassung==
==Zusammenfassung==
Zeile 164: Zeile 183:
**Mit ''logger'' kann man Ereignisse in ''syslog'' oder in ''journald'' schreiben
**Mit ''logger'' kann man Ereignisse in ''syslog'' oder in ''journald'' schreiben


== Quellenangabe ==
== Quellen ==
# Harald Maaßen: ''LPIC-1'', Rheinwerk-Verlag, 5.Auflage, 2018
# Harald Maaßen: ''LPIC-1'', Rheinwerk-Verlag, 5.Auflage, 2018


[[Kategorie:Linux/LPIC/102]]
[[Kategorie:Linux/LPIC/102]]
[[Kategorie:Linux/Logging]]
[[Kategorie:Linux/Logging]]
[[Kategorie:Journald]]

Aktuelle Version vom 21. Oktober 2025, 14:17 Uhr

LPIC102/108.2 Systemprotokollierung

Beschreibung

Viele Programme und Linux selbst protokollieren zur Laufzeit Ereignisse, damit ein Administrator in diesen Protokollen Fehler zu finden. Dazu ist es wichtig, die Orte, wo die Protokolle gespeichert sind, zu kennen und die dafür vorgesehenen Konfigurationsdateien.

Programme zur Protokollierung

Je nach Distribution gibt es verschiedene Programme/Dienste zur Protokollierung von Ereignissen

syslogd Erster Logging-Daemon für Linux
syslog-ng Weiterentwicklung von syslogd
rsyslog Standard wesentlicher Distributionen
journald Bestandteil von systemd

rsyslog

Konfiguration

  • /etc/rsyslog.conf
  • /etc/rsyslog.d

Besteht aus drei Komponenten: facility, level, action

  • facility legt dabei die Einrichtung fest
  • level den Protokollierungsgrad
  • action wohin das facility protokollieren soll

Untersuchen von Logdateien

Wenn Fehler auftreten, ist das Verzeichnis /var/log/ die erste Anlaufstelle. Mit dem Pager less können sie eine Logdatei untersuchen bspw.:

sudo less /var/log/syslog

Bei sehr großen Logdateien ist eher tail die richtige Wahl, da es die letzten zehn Zeilen einer Datei anzeigt. Mit der Option -f wird die Datei samt Änderungen im laufenden Betrieb angezeigt.

sudo tail -f /var/log/syslog

Wenn sie in einer Logdatei nach einem bestimmten Ereignistyp filtern wollen, empfiehlt sich grep dafür.

sudo grep sshd /var/log/syslog | grep invalid | less

In diesem Beispiel werden die Einträge gesucht, die der sshd eingetragen hat. Anschließend filtert er, die ein invalid haben und am Ende übergibt er sie weiter an less.

logrotate

logrotate rotiert und komprimiert Logdateien, damit diese nicht unkontrolliert anwachsen.

  • Die Konfig-Dateien sind: /etc/logrotate.conf und /etc/logrotate.d
  • Nach Ablauf eines Intervalls verschiebt er die Datei, indem er die Dateiendung .1 hinten anstellt, beim nächsten Intervall wird die zuvor verschobene Datei wieder umbenannt und diesmal auch noch komprimiert, sodass hinten ein .2.gz steht.
  • Wie viele alte Logfiles und das Intervall kann man in der logrotate.conf ändern

So könnte eine logrotate.conf aussehen:

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

Dateien in logrotate.d sind nach dem gleichen Muster aufgebaut.

root@alex:/etc/logrotate.d# cat apt
/var/log/apt/term.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}

/var/log/apt/history.log {
  rotate 12
  monthly
  compress
  missingok
  notifempty
}

logrotate sollte am besten täglich ausgeführt werden. Hierfür eignet sich cron.

systemd-journald

Bestandteil von systemd

  • Werden in /run/log/journal/ untergebracht
  • Die Protokolle können mit journalctl angezeigt werden

journalctl

Option Bedeutung
-f verhält sich so wie tail -f
-e lässt journalctl ans Ende des Journals springen
-n verhält sich so wie tail -n
-r zeigt die neuesten Einträge
-b zeigt nur die Einträge seit dem letzten Systemstart
--since "Datum Uhrzeit" --until "Datum Uhrzeit" zeigt Einträge in einem bestimmten Zeitraum
-u zeigt nur Einträge eines bestimmten Diensts
-p err zeigt nur Fehlereinträge

Konfiguration

/etc/systemd/journald.conf
Direktive Beschreibung
Storage legt fest, wie die Journale gespeichert werden
  • volatile: wird lediglich im RAM gespeichert
  • persistent: Verzeichnis /var/log/journal wird automatisch erstellt und dort gespeichert
  • compress: Große Objekte werden komprimiert, bevor sie gespeichert werden
ForwardToSyslog Leitet die Ereignisse zusätzlich an syslog weiter
SplitMode Legt separate Journale pro User an
SystemMaxUse Maximale Größe des Journals festlegen (Gegenstück wäre SystemKeepFree)
MaxFileSec legt die Zeit fest, für die ein einzelner Journaleintrag gespeichert werden soll

Pflege

Journalgröße prüfen
journalctl --disk-usage


Journalgröße verringern

Ältere Einträge aus dem Journal entfernen

journalctl --vacuum-size

Selbst Ereignisse loggen

Mit logger kann man ein Ereignis selbst erstellen. Wenn man ein Skript erstellt hat, was eigenständig was durchführt, kann man mit logger einen Eintrag ins Syslog erstellen.

Ein Blick in den Syslog zeigt das Ergebnis:

# logger -t Syslogger "Systemlogbuch"
# tail -1 /var/log/syslog
Jul 12 10:48:54 user Syslogger: Systemlogbuch

logger schreibt auch in den journald

Für den journald gibt es auch ein eigenes Werkzeug:

# echo "alles läuft gut" | systemd-cat -p info
# journalctl -e
Jul 12 10:50:48 user unknown[9183]: alles läuft gut
  • Die Option -t bei logger und systemd-cat dient als Identifikation der protokollierenden Einrichtung.
  • Die Option -p gibt die Priorität des Eintrags an.
    • Diese wären emerg, alert, crit, err, warning, notice, info und debug

Zusammenfassung

  • Wichtige Programme sind rsyslog und journald
  • Die Konfig-Dateien von rsyslog sind in der /etc/rsyslog.conf
    • Enthält Regeln für das Logging
  • Im Verzeichnis /var/log stehen die ganzen Log-Dateien
    • Mit less oder tail -f anzeigen
  • logrotate verschiebt (rotiert) und komprimiert Logdateien
    • Die Konfig-Datei für logrotate ist die /etc/logrotate.conf
    • Logdateien von anderen Dateien sind in der /etc/logrotate.d
  • journald ist Teil des systemd und kann mit journalctl aufgerufen werden
    • Die Konfig-Datei für journald ist in der /etc/systemd/journald.conf
    • Mit logger kann man Ereignisse in syslog oder in journald schreiben

Quellen

  1. Harald Maaßen: LPIC-1, Rheinwerk-Verlag, 5.Auflage, 2018