Linux Logs sortieren

Wer Webserver verwaltet, wird schon schnell feststellen, dass sich dort große Mengen an Logfiles ansammeln. Schon bei einem Dutzend Domains ist bei täglicher Rotation nach einem Jahr eine Sammlung von 4380 access-Logfiles vorhanden und noch mal die selbige Menge an error-Logs sowie diverse überflüssige default-Logfiles. Hat man hunderte Domains in der Sammlung, wird schon eine simple Verzeichnisausgabe von /var/log/apache2 eine Zumutung. Selbst wer nur eine Hand voll Domains mit wöchentlicher Logrotation betreut, landet nach wenigen Jahren in unübersichtlichen Mengen. Was liegt also näher, als diese Logfiles sauber in Unterverzeichnisse zu sortieren? Sinnvoll ist es, die Logfiles z.B. in der Form /var/log/apache2/domainname/jahr/monat abzulegen. Dies vereinfacht auch den Umzug von Domains inkl. der Logfiles auf andere Server oder die erneute Verarbeitung in Statistiktools wie awstats.

Download
Für die Aufgabenstellung der Webserverlogsortierung schrieb ich vor einigen Jahren ein kleines php-Script für Apache-Webserver und passte dieses letztes Jahr für nginx-Webserver an. Als Download stelle ich hiermit meinen linux-log-sorter zur Verfügung.

Installation und Konfiguration
In der ZIP-Datei sind zwei Versionen enthalten, 1x für Apache2 und 1x für nginx. Das jeweils benötigte Verzeichnis entpackt man nach /root. Dort befindet sich das Bashscript linuxlogsorter.sh, in der zu löschende Dateien und der Pfad zum eigentlichen php-Script sowie dessen Aufruf enthalten sind. Die Datei muss mittels chmod 700 linuxlogsorter.sh ausführbar gemacht werden. Im Unterverzeichnis ./linux-log-sorter befindet sich einerseits das php-Script linux-log-sorter.php, in welchem auch eine monatliche Sortierung aktiviert/deaktiviert werden kann. Außerdem muss in diesem Unterverzeichnis die Domainliste in der Datei lognames.txt entsprechend gefüllt werden. Dies lässt sich für Webserver mit großen Mengen an Domains auch automatisieren. Eine dafür hilfreiche Befehlszeile steht in der php-Datei.
Subdomains müssen separat in der lognames.txt definiert werden und zwar vor der eigentlichen Domain.
Um den Logsorter automatisch auszuführen, fügt man abschließend in die Datei /etc/crontab folgende Zeile ein:

30   2  *  *  *   root       /root/linuxlogsorter.sh

Damit wird täglich um 2:30 Uhr das Script ausgeführt.

Anpassung
Mit ein paar grundlegenden Kenntnissen in php sollte es einfach sein, den Linuxlogsorter auch auf andere Logfiles (z.B. lighttpd, maillogs etc) anzupassen. Selbst für völlig andere Server z.B. auf Windows-Basis sind die Scripte nach Pfadanpassungen nutzbar. Einzige Vorraussetzung ist es, dass auf dem Server, welches das Script ausführt, php installiert ist. Für lighttpd-Server würde es sich daher anbieten, die Logs z.B. per NFS in einen anderen Server zu mounten oder via rsync zu kopieren und dort zu archivieren.

Einen Kommentar schreiben