Goaccess: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
K (small script optimization)
K (→‎Installation: aktuelle Version 1.9.3)
 
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt)
Zeile 13: Zeile 13:
Da wir als Paketadmin keine Programme für alle installieren kann ein lokales Directory für die Installation des Programms (und ähnlicher angelegt werden:
Da wir als Paketadmin keine Programme für alle installieren kann ein lokales Directory für die Installation des Programms (und ähnlicher angelegt werden:
z.B. /home/pacs/xyz00/usr  
z.B. /home/pacs/xyz00/usr  
~$mkdir usr
<syntaxhighlight lang="shell">
mkdir usr
</syntaxhighlight>
um dann automatisch dorthin auch ein /bin Ordner anzulegen (wird durch configure danach gemacht)
um dann automatisch dorthin auch ein /bin Ordner anzulegen (wird durch configure danach gemacht)
und auch den PATH anpassen, damit Programme hier in bin direkt ausgeführt werden.
und auch den PATH anpassen, damit Programme hier in bin direkt ausgeführt werden.
~$ echo 'export PATH="$HOME/usr/bin:$PATH"' >>.bashrc
<syntaxhighlight lang="shell">
echo 'export PATH="$HOME/usr/bin:$PATH"' >>.bashrc
</syntaxhighlight>
leider wird .bashrc nicht immer gelesen wenn wir mit ssh einloggen, wir müssen es in .bash_profile festlegen:
leider wird .bashrc nicht immer gelesen wenn wir mit ssh einloggen, wir müssen es in .bash_profile festlegen:
~$ echo '[[ -f ~/.bashrc ]] && . ~/.bashrc' >> ~/.bash_profile
<syntaxhighlight lang="shell">
echo '[[ -f ~/.bashrc ]] && . ~/.bashrc' >> ~/.bash_profile
</syntaxhighlight>
nun sind wir bereit für die Installation:
nun sind wir bereit für die Installation:
~$ wget https://tar.goaccess.io/goaccess-1.7.tar.gz
<syntaxhighlight lang="shell">
~$ tar -xzvf goaccess-1.7.tar.gz
wget https://tar.goaccess.io/goaccess-1.9.3.tar.gz
~$ cd goaccess-1.7/
tar -xzvf goaccess-1.9.3.tar.gz
cd goaccess-1.9.3/
</syntaxhighlight>
Eine Systemweite Installation wird mangels Berechtigung nicht funktionieren. Damit configure direkt unseren Pfad anlegt, befehlen wir das Installationsdirectory $HOME als prefix
Eine Systemweite Installation wird mangels Berechtigung nicht funktionieren. Damit configure direkt unseren Pfad anlegt, befehlen wir das Installationsdirectory $HOME als prefix
~/goaccess-1.7$ ./configure --enable-utf8 --enable-geoip=legacy --prefix=$HOME/usr
 
~/goaccess-1.7$ make
<syntaxhighlight lang="shell">
~/goaccess-1.7# make install
~/goaccess-1.9.3$ ./configure --enable-utf8 --enable-geoip=legacy --prefix=$HOME/usr
~/goaccess-1.9.3$ make
~/goaccess-1.9.3# make install
</syntaxhighlight>
Nun liegt $HOME//usr/bin/goaccess in unserem PATH an erster Stelle
Nun liegt $HOME//usr/bin/goaccess in unserem PATH an erster Stelle
ein Aufruf von
ein Aufruf von
~$ goaccess --version
<syntaxhighlight lang="shell">
goaccess --version
</syntaxhighlight>
sollte das zeigen
sollte das zeigen
~$ goaccess --v
<syntaxhighlight lang="output" line>
GoAccess - 1.7.
GoAccess - 1.9.3.
For more details visit: https://goaccess.io/
For more details visit: https://goaccess.io/
Copyright (C) 2009-2022 by Gerardo Orellana
Copyright (C) 2009-2022 by Gerardo Orellana
Build configure arguments:
Build configure arguments:
--enable-utf8
  --enable-utf8
--enable-geoip=legacy
  --enable-geoip=legacy
</syntaxhighlight>


==Anwendung==
==Anwendung==
Zeile 47: Zeile 60:
Eine Auswertung des Weblogs von example.com z.B. vom 14.02.2023 liegt unter /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz vor
Eine Auswertung des Weblogs von example.com z.B. vom 14.02.2023 liegt unter /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz vor
Die Auswertung muss also entzippt werden, das geht on-the-fly mit zcat
Die Auswertung muss also entzippt werden, das geht on-the-fly mit zcat
~$ zcat /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz  
<syntaxhighlight lang="shell">
zcat /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz  
</syntaxhighlight>
=== Wildcards ===
=== Wildcards ===
zcat kann sehr gut mit Wildcards umgehen, der Aufruf  
zcat kann sehr gut mit Wildcards umgehen, der Aufruf  
~$ '''zcat ~/var/web*.log.gz''' | goaccess -o webstat.html --log-format=COMBINED -
 
<syntaxhighlight lang="shell">
zcat ~/var/web*.log.gz  | goaccess -o webstat.html --log-format=COMBINED -
</syntaxhighlight>
zum Beispiel fasst alle logfiles aller Domains und aller Tage  zusammen.
zum Beispiel fasst alle logfiles aller Domains und aller Tage  zusammen.
Es geht auch nur eine Domain: '''''"var/web-example.com*.log.gz"''''' oder nur den Januar 2023: '''''"var/web*202301*log.gz"''''' (es sollte beachtet werden, dass natürlich immer die Datei, die dann am Tag früh morgens (bei mir ist das zwischen 01:38h und 01:40h) erstellt wird natürlich für den vorherigen Tag ist. Das heißt in der 20230101 ist vor allem der 31.12. geloggt
Es geht auch nur eine Domain: '''''"var/web-example.com*.log.gz"''''' oder nur den Januar 2023: '''''"var/web*202301*log.gz"''''' (es sollte beachtet werden, dass natürlich immer die Datei, die dann am Tag früh morgens (bei mir ist das zwischen 01:38h und 01:40h) erstellt wird natürlich für den vorherigen Tag ist. Das heißt in der 20230101 ist vor allem der 31.12. geloggt


=== Auswertung mit goaccess ===
=== Auswertung mit goaccess ===
  ~$ zcat ... | goaccess -o webstat.html --log-format=COMBINED -
<syntaxhighlight lang="shell">
zcat ... | goaccess -o webstat.html --log-format=COMBINED -
</syntaxhighlight>
legt eine Datei webstat.html im aktuellen Ordner ab, diese kann dann zum Beispiel heruntergeladen werden, oder in einer Domain erreichbar gemacht werden. '''Empfehlung:''' Datei per scp heruntergeladen, auf dem eigenen, geschützten Rechner angeschaut, und schnell vernichtet.
legt eine Datei webstat.html im aktuellen Ordner ab, diese kann dann zum Beispiel heruntergeladen werden, oder in einer Domain erreichbar gemacht werden. '''Empfehlung:''' Datei per scp heruntergeladen, auf dem eigenen, geschützten Rechner angeschaut, und schnell vernichtet.
== Finetuning ==
== Finetuning ==
Zeile 61: Zeile 81:
Um nur anonymisierte IPs anzeigen zu lassen kann das zusätzliche Flag --anonymize-ip verwendet werden
Um nur anonymisierte IPs anzeigen zu lassen kann das zusätzliche Flag --anonymize-ip verwendet werden


  ~$ zcat ... | goaccess ... --anonymize-ip  -
<syntaxhighlight lang="shell">
zcat ... | goaccess ... --anonymize-ip  -
</syntaxhighlight>


In der Doku ist beschrieben wie die IP Adresse noch gröber anonymisiert werden kann.  
In der Doku ist beschrieben wie die IP Adresse noch gröber anonymisiert werden kann.  
Zeile 67: Zeile 89:
Um die aktuellere Version der Geolocations zu verwenden muss bei  
Um die aktuellere Version der Geolocations zu verwenden muss bei  


./configure ... --enable-geoip=mmdb ...
<syntaxhighlight lang="shell">
./configure ... --enable-geoip=mmdb ...
</syntaxhighlight>


statt legacy verwendet werden. Dafür gibt es eine kostenlose Länder[https://db-ip.com/db/download/ip-to-country-lite] oder Städte[https://db-ip.com/db/download/ip-to-city-lite] lite-Version unter CC BY 4.0. Falls diese nicht genau genug sind, gibt es auch kommerzielle Alternativen vom selben Anbieter.  
statt legacy verwendet werden. Dafür gibt es eine kostenlose Länder[https://db-ip.com/db/download/ip-to-country-lite] oder Städte[https://db-ip.com/db/download/ip-to-city-lite] lite-Version unter CC BY 4.0. Falls diese nicht genau genug sind, gibt es auch kommerzielle Alternativen vom selben Anbieter.  
Zeile 73: Zeile 97:
Die Datenbank sollte im mmdb format heruntergeladen werden. Der direkte Downloadlink kann von oben direkt kopiert werden. Der Download Befehl auf der Konsole könnte bspw so aussehen (Datum und Version beachten! ggf. Link selbst einfügen). Zum heutigen Stand hatte die lite-cities Datenbank eine Größe von rund 100 MB.
Die Datenbank sollte im mmdb format heruntergeladen werden. Der direkte Downloadlink kann von oben direkt kopiert werden. Der Download Befehl auf der Konsole könnte bspw so aussehen (Datum und Version beachten! ggf. Link selbst einfügen). Zum heutigen Stand hatte die lite-cities Datenbank eine Größe von rund 100 MB.


wget https://download.db-ip.com/free/dbip-city-lite-2023-02.mmdb.gz
<syntaxhighlight lang="shell">
gzip -d dbip-city-lite-2023-02.mmdb.gz
wget https://download.db-ip.com/free/dbip-city-lite-2023-02.mmdb.gz
gzip -d dbip-city-lite-2023-02.mmdb.gz
</syntaxhighlight>


Beim ausführen von goaccess muss dann auch immer angegeben werden welche IP Datenbank verwendet werden soll. Dies geht mit folgendem zusätzlichen Flag (ggf. Pfad der db anpassen)   
Beim Ausführen von goaccess muss dann auch immer angegeben werden welche IP Datenbank verwendet werden soll. Dies geht mit folgendem zusätzlichen Flag (ggf. Pfad der db anpassen)   
  ~$ zcat ... | goaccess ... --geoip-database=dbip-city-lite-2023-02.mmdb -
<syntaxhighlight lang="shell">
zcat ... | goaccess ... --geoip-database=dbip-city-lite-2023-02.mmdb -
</syntaxhighlight>


=== Automatisierung pro Domain des Paketes ===
=== Automatisierung pro Domain des Paketes ===
Zeile 83: Zeile 111:
Mit dem  folgenden kleinen shell script kann in einer logs.example.com (muss ersetzt werden!) Domain die statischen html files zum ansehen hinterlegt werden. Diese sollten dort nicht ohne Login ausgeliefert werden und nicht ohne https.  Grundsätzlich könnte goaccess die logs auch live aufbereiten, die Komprimierung  könnte  dort jedoch ggf in der neusten Version ein Hindernis darstellen.
Mit dem  folgenden kleinen shell script kann in einer logs.example.com (muss ersetzt werden!) Domain die statischen html files zum ansehen hinterlegt werden. Diese sollten dort nicht ohne Login ausgeliefert werden und nicht ohne https.  Grundsätzlich könnte goaccess die logs auch live aufbereiten, die Komprimierung  könnte  dort jedoch ggf in der neusten Version ein Hindernis darstellen.


  #inhalt generate-logs.sh
<syntaxhighlight lang="shell" line>
  logdom=logs.example.com
#inhalt generate-logs.sh
  for dom in $(ls $HOME/var/ | cut -c5- | rev | cut -c22- | rev | sort | uniq)    # list domain names
logdom=logs.example.com
  do
for dom in $(ls $HOME/var/ | cut -c5- | rev | cut -c22- | rev | sort | uniq)    # list domain names
    echo ${dom}
do
    zcat $HOME/var/web-$dom-*.log.gz | goaccess -o $HOME/doms/$logdom/htdocs-ssl/$dom.html --log-format=COMBINED --anonymize-ip --geoip-database=dbip-city-lite-2023-02.mmdb --ignore-crawler --unknowns-as-crawlers -
    echo ${dom}
  done
    zcat $HOME/var/web-$dom-*.log.gz | goaccess -o $HOME/doms/$logdom/htdocs-ssl/$dom.html --log-format=COMBINED --anonymize-ip --geoip-database=dbip-city-lite-2023-02.mmdb --ignore-crawler --unknowns-as-crawlers -
done
</syntaxhighlight>


Erklärung des scripts: Zuerst wird die logdomain auf der die Dateien abgelegt werden sollen festgelegt. Dann wird via find im Ordner /home/doms nach Dateien vom Typ Link gesucht, dessen Linkziel genauso beginnt wie das home des aktuellen users (der Paketuser). Es listet also alle domains, welche im aktuellen Paket Verwendung finden und iteriert über diese indem es die  aktuelle  Iteration in der Variablen dom speichert. Die nächste Zeile entfernt den Pfad vor dem Domainnamen, sodass die Variable nur noch den reinen Domainnamen beinhaltet. Der echo Befehl ist nur zur Übersicht beim manuellen ausführen und kann nach Wunsch mit # auskommentiert werden. Anschließend wird wie gewohnt (für jede Domain nacheinander) goaccess aufgerufen und für jede Domain eine eigene html Datei erzeugt. Eventuell muss der goaccess Befehl noch an die eigenen Wünsche angepasst werden.  
Erklärung des scripts: Zuerst wird die logdomain auf der die Dateien abgelegt werden sollen festgelegt. Dann wird via find im Ordner /home/doms nach Dateien vom Typ Link gesucht, dessen Linkziel genauso beginnt wie das home des aktuellen users (der Paketuser). Es listet also alle domains, welche im aktuellen Paket Verwendung finden und iteriert über diese indem es die  aktuelle  Iteration in der Variablen dom speichert. Die nächste Zeile entfernt den Pfad vor dem Domainnamen, sodass die Variable nur noch den reinen Domainnamen beinhaltet. Der echo Befehl ist nur zur Übersicht beim manuellen ausführen und kann nach Wunsch mit # auskommentiert werden. Anschließend wird wie gewohnt (für jede Domain nacheinander) goaccess aufgerufen und für jede Domain eine eigene html Datei erzeugt. Eventuell muss der goaccess Befehl noch an die eigenen Wünsche angepasst werden.  
Zeile 95: Zeile 125:
Mit einem [[cron]] Eintrag könnte dieses Script regelmäßig aufgerufen werden. z.B.:
Mit einem [[cron]] Eintrag könnte dieses Script regelmäßig aufgerufen werden. z.B.:


  10 02 * * * sh ~/generate-logs.sh > /dev/null
<syntaxhighlight lang="shell" line>
10 02 * * * sh ~/generate-logs.sh > /dev/null
</syntaxhighlight>


== Warnung: Datenschutz ==
== Warnung: Datenschutz ==

Aktuelle Version vom 16. Juli 2024, 09:17 Uhr

Um den Traffic des Pakets beziehungweise die Einträge der Logdateien im grafischen Blick zu halten, falls das Vorgehen im gerade wenn unerwartet eine Mail mit erhöhtem Datenvolumen kommt (im terminal oder als webpage) bietet sich das tool goaccess an (https://goaccess.io/download). Es ist ein sehr schlankes tool was gerade mal 690kB im Download des tar.gz wiegt (Version 1.7)

Screenshot Goaccess


Installation

(Dieser Teil kann ausgelassen werden: Auf Managed Servern mit Debian Buster ist Goaccess Version 1.2 vorinstalliert, bei Debian Bookworm ist es Goaccess Version 1.7).

Die Installation ist erst einmal sehr einfach, daher kann es fast so installiert werden wie auf goaccess.io/download beschrieben: eingeloggt als Paketadmin z.B. per ssh xyz00 Da wir als Paketadmin keine Programme für alle installieren kann ein lokales Directory für die Installation des Programms (und ähnlicher angelegt werden: z.B. /home/pacs/xyz00/usr

mkdir usr

um dann automatisch dorthin auch ein /bin Ordner anzulegen (wird durch configure danach gemacht) und auch den PATH anpassen, damit Programme hier in bin direkt ausgeführt werden.

echo 'export PATH="$HOME/usr/bin:$PATH"' >>.bashrc

leider wird .bashrc nicht immer gelesen wenn wir mit ssh einloggen, wir müssen es in .bash_profile festlegen:

echo '[[ -f ~/.bashrc ]] && . ~/.bashrc' >> ~/.bash_profile

nun sind wir bereit für die Installation:

wget https://tar.goaccess.io/goaccess-1.9.3.tar.gz
tar -xzvf goaccess-1.9.3.tar.gz
cd goaccess-1.9.3/

Eine Systemweite Installation wird mangels Berechtigung nicht funktionieren. Damit configure direkt unseren Pfad anlegt, befehlen wir das Installationsdirectory $HOME als prefix

~/goaccess-1.9.3$ ./configure --enable-utf8 --enable-geoip=legacy --prefix=$HOME/usr
~/goaccess-1.9.3$ make
~/goaccess-1.9.3# make install

Nun liegt $HOME//usr/bin/goaccess in unserem PATH an erster Stelle ein Aufruf von

goaccess --version

sollte das zeigen

GoAccess - 1.9.3.
For more details visit: https://goaccess.io/
Copyright (C) 2009-2022 by Gerardo Orellana
Build configure arguments:
--enable-utf8
--enable-geoip=legacy

Anwendung

Dann, nach der Installation beginnt der hostsharingspezifische Teil, denn das file web.log, welches alle aktuellen logs der letzten zwei Tage beinhaltet beginnt nicht mit Datum und Uhrzeit, sondern mit den Domainnamen, was für goaccess zu Verwirrung führt.

Pipe mit zcat

Am leichtesten ist die Nutzung einer Pipe für die Prozessierung der gzip2 gezippten logfiles die alle nach dem Schema: web-subdomain.example.com-YYYYMMDD-hhmm.log.gz im Ordner $HOME/var liegen. Eine Auswertung des Weblogs von example.com z.B. vom 14.02.2023 liegt unter /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz vor Die Auswertung muss also entzippt werden, das geht on-the-fly mit zcat

zcat /home/pacs/xyz00/var/web-example.com-20230215-0139.log.gz

Wildcards

zcat kann sehr gut mit Wildcards umgehen, der Aufruf

zcat ~/var/web*.log.gz  | goaccess -o webstat.html --log-format=COMBINED -

zum Beispiel fasst alle logfiles aller Domains und aller Tage zusammen. Es geht auch nur eine Domain: "var/web-example.com*.log.gz" oder nur den Januar 2023: "var/web*202301*log.gz" (es sollte beachtet werden, dass natürlich immer die Datei, die dann am Tag früh morgens (bei mir ist das zwischen 01:38h und 01:40h) erstellt wird natürlich für den vorherigen Tag ist. Das heißt in der 20230101 ist vor allem der 31.12. geloggt

Auswertung mit goaccess

zcat ... | goaccess -o webstat.html --log-format=COMBINED -

legt eine Datei webstat.html im aktuellen Ordner ab, diese kann dann zum Beispiel heruntergeladen werden, oder in einer Domain erreichbar gemacht werden. Empfehlung: Datei per scp heruntergeladen, auf dem eigenen, geschützten Rechner angeschaut, und schnell vernichtet.

Finetuning

Anonymisierte IPs

Um nur anonymisierte IPs anzeigen zu lassen kann das zusätzliche Flag --anonymize-ip verwendet werden

zcat ... | goaccess ... --anonymize-ip  -

In der Doku ist beschrieben wie die IP Adresse noch gröber anonymisiert werden kann.

Aktuellere Geo Location

Um die aktuellere Version der Geolocations zu verwenden muss bei

./configure ... --enable-geoip=mmdb ...

statt legacy verwendet werden. Dafür gibt es eine kostenlose Länder[1] oder Städte[2] lite-Version unter CC BY 4.0. Falls diese nicht genau genug sind, gibt es auch kommerzielle Alternativen vom selben Anbieter.

Die Datenbank sollte im mmdb format heruntergeladen werden. Der direkte Downloadlink kann von oben direkt kopiert werden. Der Download Befehl auf der Konsole könnte bspw so aussehen (Datum und Version beachten! ggf. Link selbst einfügen). Zum heutigen Stand hatte die lite-cities Datenbank eine Größe von rund 100 MB.

wget https://download.db-ip.com/free/dbip-city-lite-2023-02.mmdb.gz
gzip -d dbip-city-lite-2023-02.mmdb.gz

Beim Ausführen von goaccess muss dann auch immer angegeben werden welche IP Datenbank verwendet werden soll. Dies geht mit folgendem zusätzlichen Flag (ggf. Pfad der db anpassen)

zcat ... | goaccess ... --geoip-database=dbip-city-lite-2023-02.mmdb -

Automatisierung pro Domain des Paketes

Mit dem folgenden kleinen shell script kann in einer logs.example.com (muss ersetzt werden!) Domain die statischen html files zum ansehen hinterlegt werden. Diese sollten dort nicht ohne Login ausgeliefert werden und nicht ohne https. Grundsätzlich könnte goaccess die logs auch live aufbereiten, die Komprimierung könnte dort jedoch ggf in der neusten Version ein Hindernis darstellen.

#inhalt generate-logs.sh
logdom=logs.example.com
for dom in $(ls $HOME/var/ | cut -c5- | rev | cut -c22- | rev | sort | uniq)     # list domain names
do
    echo ${dom}
    zcat $HOME/var/web-$dom-*.log.gz | goaccess -o $HOME/doms/$logdom/htdocs-ssl/$dom.html --log-format=COMBINED --anonymize-ip --geoip-database=dbip-city-lite-2023-02.mmdb --ignore-crawler --unknowns-as-crawlers -
done

Erklärung des scripts: Zuerst wird die logdomain auf der die Dateien abgelegt werden sollen festgelegt. Dann wird via find im Ordner /home/doms nach Dateien vom Typ Link gesucht, dessen Linkziel genauso beginnt wie das home des aktuellen users (der Paketuser). Es listet also alle domains, welche im aktuellen Paket Verwendung finden und iteriert über diese indem es die aktuelle Iteration in der Variablen dom speichert. Die nächste Zeile entfernt den Pfad vor dem Domainnamen, sodass die Variable nur noch den reinen Domainnamen beinhaltet. Der echo Befehl ist nur zur Übersicht beim manuellen ausführen und kann nach Wunsch mit # auskommentiert werden. Anschließend wird wie gewohnt (für jede Domain nacheinander) goaccess aufgerufen und für jede Domain eine eigene html Datei erzeugt. Eventuell muss der goaccess Befehl noch an die eigenen Wünsche angepasst werden.

Mit einem cron Eintrag könnte dieses Script regelmäßig aufgerufen werden. z.B.:

10 02 * * * sh ~/generate-logs.sh > /dev/null

Warnung: Datenschutz

Man beachte, dass die Auswertungen Datenschutzrelevante Inhalte wie die IP Adresse und die aufgerufenen Pfade enthalten daher kann es nicht ausreichen nur die IPs zu anonymisieren. Bei einer Nextcloud Instanz beinhalten die Pfade z.B. häufig auch den Username und somit ggf. den Klarnamen. Entsprechend sollte diese Auswertung nicht öffentlich (ohne Passwortschutz) zugänglich gemacht werden. Siehe dazu Passwortschutz mit htaccess.

Weitere WebStatistik Tools bei HS