wer sich schon öfters gefragt hat, was man gegen überquellende Apache-Log Dateien unternehmen kann, ist hier genau richtig. Mit dem kleinen Programm logrotate ist es möglich die Apache Logdateien(oder andere Logs), in gewissen einstellbaren Zeiträumen rotieren zu lassen. Entweder stündlich, täglich, monatlich…..je nach Anforderung.
Sie denken sich jetzt, jaja verzähl nur, bloß wie richte ich jetzt das bei mir ein ?
Hier ist der Direkte Weg zur Einrichtung von Logrotate mit Apache.
————————————————————————————————————————–
Das Zauberwort heißt httpd.conf, hier kann man diese Einstellung vornehmen
Folgende Zeile ist zu Suchen, kann eventl. abweichen:
LogFormat “%t \”%r\” %>s \”%{Referer}i\” %b” myAppFormat
diese Zeile beschreibt das Logformat.
um jetzt rotatelogs zu nutzen, muss man die Zeile ein wenig anpassen.
Um nun zum Beispiel jedes Monat die Logdatei rotieren zu lassen, ist folgende Änderung nötig:
CustomLog “|/pfad/zu/rotatelogs /pfad/zu/accesslog/access_log.%Y%m 2592000″ common
Diese Zeile bewirkt nun, das alle 2592000 Sekunden (1 Monat) einen neue Logdatei erstellt wird. Desweiteren haben die Logdateien eine Endung nach dem Format .200708 (.jahrmonat)
weiteres Beispiel:
CustomLog “|/pfad/zu/rotatelogs /pfad/zum/logfile 5M” common
Dies zum Beispiel hat die Wirkung das sobald eine Logdatei 5 Megabyte erreicht, die Logdatei sofort rotiert wird.
Weitere Beispiele und die Syntax mit Optionen sind hier zu finden.
Empfehlenswerter Artikel von ZDnet
So nun, wird je nach Einstellung die Logdatei zum Beispiel jedes Monat rotiert.
Problem-Falle Webalizer:
Sie nutzen das Statistik Tool Webalizer zur Auswertung der Logdateien !?
Sie werden sich jetzt bestimmt fragen, hmm wie soll ich jetzt webalizer automatisch per cronjob aufrufen lassen, wo sich der Namen der logdatei doch ständig ändert ?
Hierzu habe ich auch einen akzeptablen Workaround.
Zum Lösen des Problems kommt ein kleines Bash-Script zum Einsatz.
#!bin/bash
datum=$(date +%Y%m)
#in ein anderes Verzeichniss kopieren, um anschließend damit zu arbeiten.
cp /pfad/zum/log/access_log.$datum /pfad/zum/log/webalizercache
#umbennen für webalizer
mv /pfad/zum/log/webalizercache/access_log.$datum /pfad/zum/log/webalizercache/access_log
#Nun Webalizer aufrufen
/pfad/zum/webalizer/webalizer
#webalizercache leeren
rm /pfad/zum/log/webalizercache/access_log
#fertig
exit 0
Mit diesem Script kann man das Problem lösen. Ich denke durch die Kommentare erklärt es sich von selbst. Nun muss man nur noch seinen Cronjob anpassen. Anstatt webalizer jetzt direkt aufzurufen, einfach dieses script aufrufen.
So Fertig. Haben Sie eine andere Lösung gefunden ? Schreiben Sie bitte einen Kommentar.
Danke
-Diego
PS: Die Formatierung in den Zitaten ist etwas ungünstig, man sollte diese in einer einzigen Zeile schreiben, und auch ohne so viele Leerzeichen. 