regina - Analytics for Nginx Websites
Ruling Empress Generating In-depth Nginx Analytics
regina
ist ein python Programm das Daten aus einem nginx access.log visualisiert.
Die Daten aus der Logdatei werden in einer sqlite 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.
Erste Schritte
Abhängigkeiten
- nginx: Man benötigt einen nginx Webserver der den Log im
combined
Format erstellt - Python 3.10
- Python/matplotlib
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 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:
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:
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.