3.2 Logs

Log Dateien enthalten Informationen über das laufende System inklusive Kernel, Services und laufenden Applikationen. Logs können beim Troubleshooten eines Problems extrem hilfreich sein, da sie Auskunft über Fehler, Events und Miskonfigurationen geben.

Inhalt

Logging Mechanismen

Traditionell werden Logs von rsyslog verwaltet, welcher die Möglichkeit bietet, Logs zu filtern, verschlüsseln und über das Netzwerk weiter zu leiten. Seit der Einführung von systemd werden Logs immer mehr von dessen Logging Daemon journald übernommen. Im Gegensatz zu den Logdateien, welche von rsyslog verwaltet werden, speichert journald die Daten im Binary Format ab und müssen deshalb mit einem speziellen Tool journalctl ausgelesen werden. rsyslog Logdateien werden als Textdateien gespeichert und befinden sich, wenn unter /etc/rsyslog.conf nicht anders spezifiziert, unter /var/log/.

journald

Um mit journald zu interagieren verwendet man den Befehl journalctl. Um journalctl besser kennen zu lernen, probiere folgende Aufgaben zu lösen.

Journald Aufgaben

  • Zeige alle Logs an

    Lösung
    journalctl
    
  • Zeige alle Logs an, neuste zuerst

    Lösung
    journalctl -r
    
  • Zeige die neusten 10 Logeinträge an:

    Lösung
    journalctl -n 10
    
  • Zeige Log Nachrichten ab jetzt an:

    Lösung
    journalctl -f
    
  • Zeigt alle Logs vom Service sshd an:

    Lösung
    journalctl -u sshd.service
    
  • Zeige erfolgreichen Logins via ssh an:

    Lösung
    journalctl -u sshd | grep Accepted
    
  • Zeige alle Kernel Logs an:

    Lösung

    journalctl -k

  • Zeige Logs mit der Priorität Error an:

    Lösung
    journalctl -p err
    
  • gibt Logs aus die mit dem Binary /usr/bin/bash zu tun haben:

    Lösung
    journalctl /usr/bin/bash
    
  • Zeige Logs seit dem letzten Boot an:

    Lösung
    journalctl -b
    
  • Gebe alle Logs von heute, von heute ab 08:00, von heute ab 08:00 bis 10:15, von heute 08:00 bis vor einer Stunde und von heute 08:00 vom Service sshd aus:

    Lösung
    journalctl --since today
    journalctl --since "2020-06-01 08:00:00"
    journalctl --since "2020-06-01 08:00:00" --until "2020-07-01 10:15:00"
    journalctl --since 08:00 --until "1 hour ago"
    journalctl --since 08:00 -u sshd
    

/var/log

Wie wir bereits gelernt haben, liegen unter /var/log in der Regel die Logdateien, welche nicht von journald verwaltet werden. Diese Logdateien sind meist ganz normale Textfiles. Wie man mit diesem umgeht haben wir ja bereits im commandline Lab gelernt. Um die vielleicht eher unverständlichen SELinux Logmeldungen in der Datei /var/log/audit/audit.log zu verstehen, lohnt es sich das Tool audit2why anzuschauen.

Logrotate

logrotate ist ein Tool, welches sicher stellt, dass die Dateigrösse der Logfiles unter /var/log/ nicht zu gross werden. Die Konfiguration von logrotate befindet sich unter /etc/logrotate.conf resp. /etc/logrotate.d/. Weitere Infos unter 23.2.5 der RedHat Dokumentation

journalctl Grösse in den Griff kriegen

Um das Journal in den Schranken zu halten, kann die maximale Grösse unter /etc/systemd/journald.conf konfiguriert werden. Siehe dazu man 5 journald.conf.

Braucht man kurzfristig mehr Speicherplatz und ist sich sicher, dass man alte Logs wegräumen will hilft die --vacuum* Option von journalctl:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
 --vacuum-size=, --vacuum-time=, --vacuum-files=
           Removes the oldest archived journal files until the disk space they use falls below the specified size (specified with the usual "K", "M", "G"
           and "T" suffixes), or all archived journal files contain no data older than the specified timespan (specified with the usual "s", "m", "h",
           "days", "months", "weeks" and "years" suffixes), or no more than the specified number of separate journal files remain. Note that running
           --vacuum-size= has only an indirect effect on the output shown by --disk-usage, as the latter includes active journal files, while the vacuuming
           operation only operates on archived journal files. Similarly, --vacuum-files= might not actually reduce the number of journal files to below the
           specified number, as it will not remove active journal files.

           --vacuum-size=, --vacuum-time= and --vacuum-files= may be combined in a single invocation to enforce any combination of a size, a time and a
           number of files limit on the archived journal files. Specifying any of these three parameters as zero is equivalent to not enforcing the
           specific limit, and is thus redundant.

           These three switches may also be combined with --rotate into one command. If so, all active files are rotated first, and the requested vacuuming
           operation is executed right after. The rotation has the effect that all currently active files are archived (and potentially new, empty journal
           files opened as replacement), and hence the vacuuming operation has the greatest effect as it can take all log data written so far into account.

Remote Logs

Um Logs zu sichern, archivieren, konsolidieren, auszuwerten oder einfach sonst wo zu speichern gibt es verschiedene Tools, welche Logs an andere Server senden. Bsp: fluentd, rsyslog, promtail, etc…

Loki / Promtail

Bei Puzzle ITC verwenden wir seit kurzem Loki und Promtail um Logs zentral zu verwalten. loki ist der Serverteil, welcher die Logs indiziert und speichert. Dieser Server wird für den User als Datenquelle im Grafana eingebunden, wo man sich die Logs dann anschauen kann. promtail ist der Client, welcher auf jedem Server installiert ist und die Logs an den loki Server sendet. Weitere Infos zu Loki findet man hier: Loki Docs