Jeder kennt es, man möchte ein Problem auf dem Server oder dem Heimcomputer genauer untersuchen, doch wo findet man die relevanten Informationen?
Im Folgenden werden wir auf spezifische Log-Dateien in Linux und auf den Windows Event Viewer näher eingehen. Ein weiterer Abschnitt wird die Log-Analyse unter Linux via Systemd behandeln.
Linux Log-Dateien
Leider ist es von Distribution zu Distribution unterschiedlich, welche Informationen aus welcher Log-Datei bezogen werden können. Wir werden im folgenden speziell die Struktur anhand von Debian 8 und CentOS 7.2 behandeln. Im Prinzip kann man sehr viele nützliche Log-Dateien unter dem Verzeichnis /var/log/ finden. Je nachdem, wie Apache, Nginx oder ähnliche Programme konfiguriert wurden, loggen diese ebenfalls in das /var/log/ Verzeichnis. In der Datei unter /etc/rsyslog.conf ist genau spezifiziert, welche Art von System-Logs in welche Datei geloggt werden.
Debian 8:
- /var/log/auth.log
Hier können erfolgreiche und nicht erfolgreiche Login-Versuche auf Ihrem System eingesehen werden. Ebenfalls wird hier geloggt, wenn ein Benutzer via sudo Befehle ausführt.
- /var/log/messages
In dieser Datei werden allgemeine Systeminformationen geloggt, unter anderem ist hier auch der Systemstart geloggt.
- /var/log/dmesg bzw dmesg
Via dmesg kann der „Kernel ring buffer“ ausgelesen werden. Hier finden sich Informationen über den Systemstart, Kernel-Nachrichten die zur Laufzeit – zum Beispiel von Kernel -Modulen – geschrieben wurden und viele weitere nützliche Informationen über Hardware und Software des Systems. Standardmäßig wird via dmesg der gesamte „ring buffer“ ausgegeben. Man kann allerdings die Ausgabe nach eigenen Wünschen manipulieren, indem man weitere Parameter übergibt. Eine vollständige Dokumentation finden man auf der Manual Page (man dmesg).
- /var/log/syslog
Dies ist eine der wichtigsten Log-Dateien, da hier im Prinzip jeder Linux-Prozess seine Logs anhängen kann. Man kann hier ebenfalls die Kernel-Logs des Systemstarts, ausgeführte cron-jobs und Logs von jedem weiteren Prozess welcher die syslog Schnittstelle implementiert, einsehen.
CentOS 7.2:
Die Logging-Struktur von CentOS ist der von Debian 8 sehr ähnlich, weshalb wir hier nur die Unterschiede beleuchten werden.
- /var/log/secure
Diese Datei ist das Äquivalent zu /var/log/auth.log auf Debian-Systemen. Authentifizierungen jeglicher Art werden hier aufgezeichnet.
- /var/log/messages
In CentOS gibt es keine Trennung zwischen /var/log/messages und /var/log/syslog, alle systemweiten Logs von Prozessen, welche die syslog Schnittstelle implementieren, kann man hier finden.
- /var/log/cron
Cron-spezifische Logs sind nicht Teil des syslogs wie in Debian, sondern werden in die obige Datei separat geloggt.
Loganalyse via Systemd
Systemd ist mittlerweile auf fast allen „Major“ Linux-Distributionen das Standard Init System. Spätestens seit April 2015, als es ebenfalls standardmäßig auf Debian und Ubuntu eingeführt wurde, kommt jeder Administrator oder auch Benutzer mit Systemd in Berührung. Da Systemd ein sehr komplexes System ist, werden wir hier nur speziell auf die von Systemd bereitgestellte Log-Analyse eingehen. Im Prinzip sind alle via Systemd verwalteten Prozesse in sogenannte „Units“ eingeteilt. Man kann alle aktiven Units mit folgendem Befehl auflisten:
systemctl list-units
Mit dem Parameter –all kann man auch alle inaktiven Units mit ausgeben.
Logs, welche via Systemd erfasst werden, werden im sogenannten Journal verwaltet. Diese Logs kann man mit dem binary journalctl einsehen.
Wenn man journalctl ohne Parameter aufruft, wird das gesamte Journal ausgegeben. Es ist aber auch ohne Probleme möglich, nur Logs von spezifischen Units auszugeben. Im folgenden Beispiel sollen die Logs des Apache-Webservers genauer untersucht werden.
journalctl -u httpd
Man kann diese Logs mit den Parametern –since und –until sehr fein granulieren.
journalctl -u httpd –since „2016-11-01 20:00:00“ –until „2016-11-03 20:00:00“
Obiger Befehl würde die Apache-Logs zwischen 2016-11-01 20:00:00 und 2016-11-03 20:00:00 ausgeben. Es sind auch Schlagwörter wie „today“ und „yesterday“ möglich.
Man kann sich ebenfalls die Logs von mehreren Units gleichzeitig ausgeben lassen. Im folgenden Beispiel werden alle Apache- und Nginx-Logs ausgegeben, welche seit gestern geschrieben wurden.
journalctl -u httpd -u nginx –since yesterday
Wenn man den Parameter -f benutzt, kann man die gewünschten Logs live einsehen.
Dies waren nur ein paar nützliche Parameter um die Logs feiner zu granulieren, es gibt noch zahlreiche weitere nützliche Möglichkeiten, welche auf der Manual Page genauer beschrieben sind (man journalctl).
Loganalyse via Windows Event Viewer
Im obigen Bild gibt es in der linken Navigation den Punkt „Windows Logs“. Hier sind vor allem folgende Punkte interessant:
- Application
Unter diesem Punkt werden Ereignisse von lokal installierten Anwendungen angezeigt.
- Security
Hier werden erfolgreiche und fehlgeschlagene Anmeldungen protokolliert.
- System
Unter diesem Punkt kann man betriebssysteminterne Ereignisse und Fehler einsehen.
Unter dem Punkt „Custom Views“ -> „Server Roles“ -> „Remote Desktop Services“ werden RDP Verbindungen und Probleme protokolliert.
Eventuelle Hardware-Probleme kann man über „Application and Service Logs“ -> „Hardware Events“ identifizieren.
Hilfreich bei einer Problemanalyse ist auch der Punkt „Overview and Summary“ -> „Summary of Administrative Events“, welcher einen sehr guten Überblick über den derzeitigen Systemstatus gibt.