Apache Logs Statistiken

Ohne Docker hat der Apache seine Logs einfach ins /var/log/apache Verzeichnis gespült. Mit Docker landete das jedoch mit dem httpd Image im Stdout vom Container. Das ist zwar praktisch für Fehlersuche, aber nicht für eine Auswertung.

Normalerweise interessiert mich das auch nicht, aber mit der neuen Seite war es dann doch mal interessant zu sehen, was wo gefunden wird und was so alles auf die alten Seiten ins Leere greift.

Kurz und gut, ich wollte die Logs also doch behalten und nicht bei jedem Container Update verlieren.

Deshalb wiedermal ein Eingriff ins httpd.conf:

Die alte Zeile war:

1CustomLog /proc/self/fd/1 combined

Neu dann jetzt:

1CustomLog "|bin/rotatelogs -e -l /logs/logfile.%Y.%m.%d-%H-%M 3600" combined

Das heißt, es wird jetzt ein Log nach /logs geschrieben und das stündlich rotiert. Weils geht.

Im Docker Compose File mussten dann ein paar neue Zeilen rein:

1service:
2  www:
3    ...
4    volumes:
5      - apache-logs:/logs
6
7volumes:
8  apache-logs:

Damit lässt sich jetzt alles machen. Nur einfach lesen, behalten und vergessen, auch löschen.

Ich habe mir mit AWState🖹 und der Basis für ein Docker Image 1 ein passendes Images gebaut. Das heißt im Dockerfile kamen einige Zeilen da:

1RUN apk add --no-cache rsync openssh rsync
2COPY awstats/updatelogs.sh /etc/periodic/hourly/
3
4ENV AWSTATS_CONF_LOGFILE="/logs/logfile"
5ENV AWSTATS_CONF_LOGFORMAT="1"

Das updatelogs.sh wird vom Cron, der im entrypoint auch noch per crond -f -l 8 & gestartet wird, dann stündtlich ausgeführt.

In dem Script, das ich hier nur teilweise veröffentlichen kann, sieht es so aus:

1cat /logs/logfile.* >/logs/logfile
2awstats_updateall.pl now

siehe auch