regina - Analytics for Nginx Websites

Ruling Empress Generating In-depth Nginx Analytics

regina ist ein python python-logo Programm das Daten aus einem nginx access.log visualisiert. Die Daten aus der Logdatei werden in einer sqlite sqlite-logo Datenbank gespeichert. Anschließend kann regina mit der Datenbank eine Analytik-HTML-Seite mit vielen nützlichen Plots und Zahlen erstellen.

So kann man über einen längeren Zeitraum Nutzungsdaten über die Webseite aus sowieso schon vorhanden Daten sammeln, ganz ohne JavaScript und Dritte.


Mögliche Visualisierungen

regina kann die folgenden Dinge generieren:

Plots:

  • Anzahl der einzigartigen Besucher / Zeitspanne
  • Anzahl der einzigartigen Anfragen / Zeitspanne
  • Referrer-Rangliste (von welcher Seite aus die Besucher kommen)
  • Datei-Rangliste (Zugriffsorte)
  • Browser-Rangliste
  • Plattform-Rangliste (Betriebssysteme)
  • Städte-Rangliste
  • Länder-Rangliste

Zahlen:

  • Anteil der Besucher auf mobilen Endgeräten

Ein einzigartiger Besucher ist dabei ein IP-Adresse - User Agent Paar. Eine einzigartige Anfrage ist eine Nutzer - Datei Kombination pro Tag.

Alle diese Diagramme und Zahlen können für die letzten x Tage (x kann man selbst festlegen) und für alle Zeiten erstellt werden. Die Diagramme werden als svg gespeichert, der Dateityp kann aber geändert werden.

Klicken Sie auf das Bild rechts oder hier um eine von regina erstellte Analytik-Seite zu sehen.

Plots generated by regina

Erste Schritte

Abhängigkeiten

  • nginx: Man benötigt einen nginx Webserver der den Log im combined Format erstellt
  • Python 3.10
  • Python/matplotlib
git clone https://github.com/MatthiasQuintern/regina.git
cd regina
python3 -m pip install .

Mit sudo python3 -m pip install . kann man regina auch systemweit installieren

Konfiguration

Kopieren Sie die Standardkonfiguration und die Vorlage aus dem git-Verzeichnis in Ihr regina-Verzeichnis.

cp default.conf ~/.regina/regina.conf
cp template.html ~/.regina/template.html

Bearbeiten Sie nun die Konfiguration, um sie an Ihre Bedürfnisse anzupassen. Sie müssen mindestens die Variablen db, access_log, img_dir, img_location, template_html, html_out_path anpassen. Die Standardkonfiguration sollte gut genug dokumentiert sein, damit Sie wissen, was Sie zu tun haben. Ich empfehle, nur absolute Pfade zu verwenden (beginnen mit /).

Nun können Sie regina ausführen. Sie sammelt dann die Daten aus dem nginx Log, der als access_log in der Konfiguration angegeben ist, erstellt und füllt die Datenbank db, erstellt die Plots und Statistiken und ersetzt alle Variablen im template_html. Das resultierende HTML wird im html_out_path gespeichert. Wenn html_out_path ein Pfad in Ihrem Websever ist, sollten Sie nun auf die generierte Seite zuzugreifen können.

Automatisierung

Sie werden regina wahrscheinlich einmal pro Tag ausführen wollen, nachdem nginx den täglichen Log gefüllt hat. Der einfachste Weg dazu ist ein cronjob. Führen Sie crontab -e aus und geben Sie folgendes ein:

10 0 * * * /usr/local/bin/regina --config /home/user/.regina/regina.conf --collect --visualize

Dadurch wird regina jeden Tag um 00:10 ausgeführt. Nach jedem Tag fügt nginx ein .x an Log des Vortags an, wobei x die Anzahl der Tage seit der Aufzeichnung des Logs ist. Sie müssen also wahrscheinlich .1 an die access_log Variable anhängen.

Logdatei Zugriffsrechte

Die nginx Logs haben standardmäßig die Rechte -rw-r----- root root, so dass Sie als Benutzer nicht darauf zugreifen können. Sie könnten entweder regina als root laufen lassen, was ich ausdrücklich nicht empfehle, oder einen root-cronjob erstellen, der nach Mitternacht den Besitzer des Logs ändert. Führen Sie sudo crontab -e aus und geben Sie folgendes ein:

9 0 * * * chown your-username: /var/log/nginx/nginx-access.log.1

Dadurch wird jeden Tag um 00:09 der Besitzer des Logs geändert, direkt bevor regina Lesezugriff benötigt.

GeoIP

regina kann optional ermitteln, aus welchem Land oder welcher Stadt ein Besucher kommt, jedoch benötigt man dazu eine ip2location-Datenbank. Sie können eine solche Datenbank kostenlos bei ip2location.com herunterladen, jedoch muss man sich dort ein Konto erstellen. Für regina laden Sie IP-COUNTRY-REGION-CITY als csv herunter. In der Standardeinstellung zeigt regina nur an, aus welchem Land ein Nutzer kommt. Um die einzelnen Städte für bestimmte Länder anzuzeigen, fügen Sie den zweistelligen Ländercode an die Variable get_cities_for_contries in der Konfigurationsdatei an. Wenn Sie fertig sind, führen Sie regina --config regina.conf --update-geoip path-to-csv aus, um die Daten aus der csv-Datei in Ihre Datenbank db zu laden. Je nachdem, wie viele Länder Sie angegeben haben, kann dies eine ganze Weile dauern. Sie können die csv-Datei anschließend löschen.


Lizenz

GNU General Public License 3