Web-Stats mit GoAccess

Wer einen eigenen Webserver betreibt oder für jemand anderen administriert, will in der Regel auch wissen, wie viele Personen die Website pro Tag besuchen, welche Webbrowser dabei zum Einsatz kommen etc. GoAccess ist aus meiner Sicht ein guter Kompromiss zwischen den veralteten Programmen Webalizer und AWStats auf der einen Seite und datenschutztechnisch problematischen Tools wie Google Analytics oder Piwik auf der anderen Seite.

GoAccess wertet die Logging-Dateien des Web-Servers aus und agiert insofern ähnlich wie Webalizer oder AWStats. Im Gegensatz zu diesen Programmen eignet sich das Programm aber auch zur Echtzeit-Analyse des Web-Traffics. Außerdem kann es bei Bedarf in einem Terminal-Fenster via SSH verwendet werden, also ohne den sonst üblichen Zwischenschritt der Generierung von Reports in Form von Webseiten.

Installation

GoAccess steht bei vielen Distributionen als Paket zur Verfügung und kann unkompliziert mit apt/dnf/yum/zypper install goaccess installiert werden. Bei meinen Tests waren die so installierten Versionen aber durchwegs veraltet. Besser ist es daher, wenn Sie eine manuelle Installation gemäß den Anweisungen auf der Download-Seite des Projekts durchführen. Unter Ubuntu gehen Sie aktuell z.B. so vor:

sudo apt install libncursesw5-dev libgeoip-dev libssl-dev
wget http://tar.goaccess.io/goaccess-1.2.tar.gz
tar -xzvf goaccess-1.2.tar.gz
cd goaccess-1.2/
./configure --enable-utf8 --enable-geoip=legacy --with-openssl
make
sudo make install

Für CentOS funktioniert es so:

sudo yum groupinstall development
sudo yum install ncurses-devel geoip-devel openssl-devel wget
wget http://tar.goaccess.io/goaccess-1.2.tar.gz
tar -xzvf goaccess-1.2.tar.gz
cd goaccess-1.2/
./configure --enable-utf8 --enable-geoip=legacy --with-openssl
make
sudo make install
sudo ln -s /usr/local/bin/goaccess /usr/bin

Es ist zu erwarten, dass Sie in der Zukunft anstelle von 1.2 eine entsprechend höhere Versionsnummer angeben müssen.

Anwendung im Terminal

Am einfachsten rufen Sie goaccess in einer SSH-Session auf und übergeben als Parameter den Dateinamen der Apache-Logging-Datei. Unter Ubuntu gelingt das einem nicht privilegierter Benutzer:

goaccess /var/log/apache2/access.log

Unter CentOS/Fedora/RHEL befinden sich die Logging-Dateien in /var/log/httpd und sind nur für root zugänglich. Der Aufruf von goaccess muss dann mit root-Rechten erfolgen.

goaccess /var/log/httpd/access_.log

Beim Start müssen Sie angeben, in welchem Format die Logging-Datei vorliegt. Normalerweise reicht es aus, den vorgegebenen Eintrag NCSA Combined Log Format zu bestätigen. goaccess zeigt dann eine Auswertung der Logging-Datei an und aktualisiert diese regelmäßig, bis Sie das Programm mit [Q] beenden.

GoAccess kann unmittelbar in einer SSH-Session im Terminal ausgeführt werden

Mit den Cursortasten oder mit [Tab] können Sie durch weitere Rubriken scrollen (statische Zugriffe, 404-Fehler, Hostnamen und IP-Adressen etc.). [Return] erweitert die gerade aktive Rubrik um weitere Details. [S] sortiert die Zeilen nach einem anderen Kriterium. Eine Zusammenfassung weiterer Tastenkürzel liefert [H].

Die meisten Distributionen richten täglich oder wöchentlich neue Access-Log-Dateien ein und komprimieren die älteren Dateien mit logrotate. Das folgende Kommando verarbeitet alle komprimierten sowie die beiden nicht komprimierten Dateien access.log.1 und access.log.2.

cd /var/log/apache2
zcat access.log.*.gz | goaccess --log-format=COMBINED access.log access.log.1 -

Vorsicht: Ein derartiger Aufruf von goaccess dauert anfänglich ziemlich lange (alle Logging-Dateien müssen dekomprimiert und eingelesen werden). Der Speicherbedarf von goaccess ist erheblich — je nach Größe der Log-Dateien im GByte-Bereich!

Format-Fehlermeldung

Wenn goaccess eine Fehlermeldung der Art No time format was found on your conf file liefert, haben Sie zwei Möglichkeiten: Entweder geben Sie das Logformat Ihres Webservers mit einer Option an (wie im obigen Beispiel mit --log-format), oder Sie schreiben das Format in der Konfigurationsdatei fest, deren Ort im Rahmen der Fehlermeldung angezeigt wird (bei einer manuellen Konfiguration /usr/local/etc/goaccess.conf).

HTML-Reports erzeugen

Indem Sie goaccess zusätzlich die Option -o out.html übergeben, erzeugen Sie eine HTML-Datei mit der Zugriffsstatistik. Diese Seite können Sie dann mit einem Webbrowser ansehen.

cd /var/log/apache2}
goaccess -o /var/www/html/myreports/out.html --log-format=COMBINED access.log access.log.1
Zugriffsstatistik in HTML-Form

Echtzeit-Updates für HTML-Reports

goaccess kann sogar Echtzeit-Updates über die HTML-Seite liefern. Dazu übergeben Sie an goaccess zusätzlich die Option --real-time-html. Wenn die resultierende Seite über eine HTTPS-Verbindung übertragen werden soll, müssen Sie außerdem das Zertifikat und dessen Schlüssel in Parametern übergeben. Der Zugriff auf diese Dateien erfordert die Ausführung des Kommandos mit root-Rechten.

cd /var/log/apache2
goaccess --log-format=COMBINED access.log access.log.1 \
   -o /var/www/html/myreports/uploads/report.html --real-time-html \
   --ssl-cert=/etc/letsencrypt/live/mysite/cert.pem \
   --ssl-key=/etc/letsencrypt/live/mysite/privkey.pem

Links

Unzählige weitere Optionen und Anwendungsvarianten sind in der umfassenden Dokumentation zu GoAccess beschrieben: