Log-Dateien sind unverzichtbar für die Server-Administration. Sie protokollieren alles von Systemereignissen bis zu Anwendungsfehlern.

Wo liegen die Logs?

Die meisten Log-Dateien befinden sich unter /var/log/:

ls -la /var/log/

Wichtige Log-Dateien

| Datei | Inhalt | |-------|--------| | /var/log/syslog | System-Events (Debian/Ubuntu) | | /var/log/messages | System-Events (CentOS/RHEL) | | /var/log/auth.log | Authentifizierung, SSH-Logins | | /var/log/kern.log | Kernel-Meldungen | | /var/log/dmesg | Boot-Meldungen | | /var/log/apt/ | APT-Paketmanager | | /var/log/dpkg.log | Paket-Installationen |

Dienst-spezifische Logs

| Pfad | Dienst | |------|--------| | /var/log/apache2/ | Apache Webserver | | /var/log/nginx/ | Nginx Webserver | | /var/log/mysql/ | MySQL/MariaDB | | /var/log/postgresql/ | PostgreSQL | | /var/log/mail.log | E-Mail-Server |

Logs lesen

Die letzten Zeilen

# Letzte 20 Zeilen
tail -20 /var/log/syslog

# Letzte 100 Zeilen
tail -100 /var/log/auth.log

Live mitverfolgen

tail -f /var/log/syslog

Mit Ctrl+C beenden.

Mehrere Logs gleichzeitig

tail -f /var/log/syslog /var/log/auth.log

Mit multitail (empfohlen)

apt install multitail
multitail /var/log/syslog /var/log/auth.log

Logs durchsuchen

Mit grep

# Fehler finden
grep -i error /var/log/syslog

# SSH-Logins
grep "Accepted" /var/log/auth.log

# Fehlgeschlagene Logins
grep "Failed" /var/log/auth.log

# IP-Adresse suchen
grep "192.168.1.100" /var/log/auth.log

Mit Kontext

# 5 Zeilen vor und nach dem Treffer
grep -B5 -A5 "error" /var/log/syslog

Regex-Suche

# Zeilen mit IP-Adressen
grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /var/log/auth.log

In allen Logs suchen

grep -r "error" /var/log/

journalctl - Systemd-Logs

Moderne Linux-Systeme nutzen systemd-journal:

Alle Logs

journalctl

Aktuelle Session

journalctl -b

Live-Ansicht

journalctl -f

Nach Zeit filtern

# Seit heute
journalctl --since today

# Letzte Stunde
journalctl --since "1 hour ago"

# Zeitraum
journalctl --since "2024-01-20" --until "2024-01-21"

Nach Dienst

journalctl -u nginx
journalctl -u ssh
journalctl -u mysql

Nach Priorität

# Nur Fehler
journalctl -p err

# Warnungen und höher
journalctl -p warning

Prioritäten: emerg, alert, crit, err, warning, notice, info, debug

Kernel-Meldungen

journalctl -k

Häufige Log-Analysen

Fehlgeschlagene SSH-Versuche

grep "Failed password" /var/log/auth.log | tail -20

Top IP-Adressen bei Angriffen

grep "Failed password" /var/log/auth.log | \
  awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -10

Webserver-Zugriffe (Apache)

# Häufigste IPs
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -rn | head -10

# 404-Fehler
grep " 404 " /var/log/apache2/access.log

# Große Zugriffe (>100 pro IP)
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -rn | awk '$1 > 100'

Festplatten-Fehler

grep -i "error" /var/log/kern.log | grep -i "sd[a-z]"

Out of Memory

grep -i "out of memory" /var/log/syslog
grep -i "oom-killer" /var/log/kern.log

Log-Rotation

Logs werden automatisch rotiert, um Speicherplatz zu sparen.

Konfiguration prüfen

cat /etc/logrotate.conf
ls /etc/logrotate.d/

Beispiel-Konfiguration

cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        systemctl reload nginx > /dev/null
    endscript
}

Manuell rotieren

logrotate -f /etc/logrotate.conf

Logs zentral sammeln

Mit rsyslog

Auf dem Log-Server /etc/rsyslog.conf:

# TCP/UDP aktivieren
module(load="imtcp")
input(type="imtcp" port="514")

Auf den Clients:

# Logs an Server senden
*.* @@logserver.example.com:514

Moderne Alternativen

  • Loki + Grafana: Open Source
  • ELK Stack: Elasticsearch, Logstash, Kibana
  • Graylog: Zentrale Log-Verwaltung

Nützliche Tools

apt install lnav
lnav /var/log/syslog

Bietet farbige Darstellung und Navigation.

GoAccess - Webserver-Logs

apt install goaccess
goaccess /var/log/nginx/access.log

Erstellt schöne Statistiken.

ccze - Logs farbig darstellen

apt install ccze
tail -f /var/log/syslog | ccze

Best Practices

Logs regelmäßig prüfen

# Täglicher Check
grep -i "error\|fail\|warn" /var/log/syslog | tail -50

Monitoring einrichten

Automatische Alerts bei:

  • Viele fehlgeschlagene Logins
  • Festplatten-Fehler
  • Out of Memory
  • Service-Abstürze

Aufbewahrungszeit

  • Wichtige Logs: Mindestens 90 Tage
  • Debug-Logs: 7-14 Tage
  • DSGVO beachten (personenbezogene Daten)

Log-Level richtig setzen

Zu viel Logging:

  • Füllt Festplatte
  • Erschwert Suche

Zu wenig Logging:

  • Fehler nicht nachvollziehbar

Befehlsübersicht

| Aufgabe | Befehl | |---------|--------| | Letzte Zeilen | tail -f /var/log/syslog | | Durchsuchen | grep "error" /var/log/syslog | | Systemd-Logs | journalctl -u dienst | | Seit heute | journalctl --since today | | Nur Fehler | journalctl -p err | | Boot-Meldungen | dmesg |

Fazit

Log-Dateien sind die erste Anlaufstelle bei Problemen. Machen Sie sich mit den wichtigsten Logs vertraut und richten Sie Monitoring ein, um Probleme frühzeitig zu erkennen. journalctl ist bei systemd-Systemen besonders mächtig.