GoAccess ist ein Open-Source -Echtzeit-Webprotokollanalysator und interaktiver Viewer, der in einem Terminal auf *nix-Systemen oder über Ihren Browser ausgeführt wird. Es bietet schnelle und wertvolle HTTP-Statistiken für Systemadministratoren, die spontan einen visuellen Serverbericht benötigen. Weitere Infos unter: https://goaccess.io.
GoAccess analysiert die angegebene Webprotokolldatei und gibt die Daten an das X-Terminal aus. Zu den Funktionen gehören:
Völlig in Echtzeit
Alle Panels und Metriken werden so eingestellt, dass sie bei der Terminalausgabe alle 200 ms und bei der HTML-Ausgabe jede Sekunde aktualisiert werden.
Minimale Konfiguration erforderlich
Sie können es einfach mit Ihrer Zugriffsprotokolldatei ausführen, das Protokollformat auswählen und GoAccess das Zugriffsprotokoll analysieren und Ihnen die Statistiken anzeigen lassen.
Verfolgen Sie die Reaktionszeit der Anwendung
Verfolgen Sie die Zeit, die für die Bearbeitung der Anfrage benötigt wird. Äußerst nützlich, wenn Sie Seiten verfolgen möchten, die Ihre Website verlangsamen.
Fast alle Webprotokollformate
GoAccess erlaubt jede benutzerdefinierte Protokollformatzeichenfolge. Zu den vordefinierten Optionen gehören Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront usw.
Inkrementelle Protokollverarbeitung
Benötigen Sie Datenpersistenz? GoAccess bietet die Möglichkeit, Protokolle über die Optionen für die Persistenz auf der Festplatte inkrementell zu verarbeiten.
Nur eine Abhängigkeit
GoAccess ist in C geschrieben. Um es auszuführen, benötigen Sie lediglich ncurses als Abhängigkeit. Das ist es. Es verfügt sogar über einen eigenen Web-Socket-Server – http://gwsocket.io/.
Besucher
Bestimmen Sie die Anzahl der Zugriffe, Besucher, Bandbreite und Metriken für die am langsamsten laufenden Anfragen nach Stunde oder Datum.
Metriken pro virtuellem Host
Haben Sie mehrere virtuelle Hosts (Serverblöcke)? Es verfügt über ein Panel, das anzeigt, welcher virtuelle Host die meisten Webserver-Ressourcen verbraucht.
ASN (Autonomous System Number Mapping)
Hervorragend geeignet, um bösartige Verkehrsmuster zu erkennen und diese entsprechend zu blockieren.
Farbschema anpassbar
Passen Sie GoAccess an Ihren eigenen Farbgeschmack/Ihre Farbschemata an. Entweder über das Terminal oder durch einfaches Anwenden des Stylesheets auf die HTML-Ausgabe.
Unterstützung für große Datensätze
GoAccess bietet aufgrund seiner optimierten In-Memory-Hash-Tabellen die Möglichkeit, große Protokolle zu analysieren. Es hat eine sehr gute Speichernutzung und eine ziemlich gute Leistung. Dieser Speicher unterstützt auch die Persistenz auf der Festplatte.
Docker-Unterstützung
Möglichkeit, das Docker-Image von GoAccess aus dem Upstream zu erstellen. Sie können es weiterhin vollständig konfigurieren, indem Sie die Volume-Zuordnung verwenden und goaccess.conf
bearbeiten. Siehe Abschnitt „Docker“ weiter unten.
GoAccess erlaubt jede benutzerdefinierte Protokollformatzeichenfolge. Zu den vordefinierten Optionen gehören unter anderem:
GoAccess wurde als schneller, terminalbasierter Protokollanalysator konzipiert. Seine Kernidee besteht darin, Webserverstatistiken schnell und in Echtzeit zu analysieren und anzuzeigen, ohne dass Sie Ihren Browser verwenden müssen ( ideal, wenn Sie eine schnelle Analyse Ihres Zugriffsprotokolls über SSH durchführen möchten oder einfach gerne im Terminal arbeiten ).
Während es sich bei der Terminalausgabe um die Standardausgabe handelt, besteht die Möglichkeit, einen vollständigen, eigenständigen Echtzeit HTML
Bericht sowie einen JSON
und CSV
Bericht zu generieren.
Sie können es eher als ein Monitor-Befehlstool betrachten als als alles andere.
GoAccess kann auf *nix-Systemen kompiliert und verwendet werden.
Laden Sie GoAccess herunter, extrahieren und kompilieren Sie es mit:
$ wget https://tar.goaccess.io/goaccess-1.9.3.tar.gz
$ tar -xzvf goaccess-1.9.3.tar.gz
$ cd goaccess-1.9.3/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
$ git clone https://github.com/allinurl/goaccess.git
$ cd goaccess
$ autoreconf -fiv
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
Am einfachsten installieren Sie GoAccess unter GNU+Linux mit dem bevorzugten Paketmanager Ihrer GNU+Linux-Distribution. Bitte beachten Sie, dass nicht für alle Distributionen die neueste Version von GoAccess verfügbar ist.
# apt-get install goaccess
Hinweis: Es ist wahrscheinlich, dass dadurch eine veraltete Version von GoAccess installiert wird. Um sicherzustellen, dass Sie die neueste stabile Version von GoAccess verwenden, sehen Sie sich die alternative Option unten an.
$ wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null
$ echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list
$ sudo apt-get update
$ sudo apt-get install goaccess
Notiz :
.deb
Pakete im offiziellen Repo sind auch über HTTPS verfügbar. Möglicherweise müssen Sie apt-transport-https
installieren. # yum install goaccess
# pacman -S goaccess
# emerge net-analyzer/goaccess
# brew install goaccess
# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess
# cd /usr/ports/www/goaccess && make install clean
# pkg_add goaccess
# zypper ar -f obs://server:http http
# zypper in goaccess
# pkg install goaccess
# pkgin install goaccess
GoAccess kann unter Windows über Cygwin verwendet werden. Siehe Cygwins Pakete. Oder über das GNU+Linux-Subsystem unter Windows 10.
GoAccess hat minimale Anforderungen, ist in C geschrieben und erfordert nur Ncurses. Nachfolgend finden Sie jedoch eine Tabelle mit einigen optionalen Abhängigkeiten in einigen Distributionen, um GoAccess aus dem Quellcode zu erstellen.
Distribution | NCurses | GeoIP (opt) | GeoIP2 (opt) | OpenSSL (opt) |
---|---|---|---|---|
Ubuntu/Debian | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
RHEL/CentOS | ncurses-devel | geoip-devel | libmaxminddb-devel | openssl-devel |
Bogen | Fluche | geoip | libmaxminddb | openSL |
Gentoo | sys-libs/ncurses | dev-libs/geoip | dev-libs/libmaxminddb | dev-libs/openssl |
Slackware | Fluche | GeoIP | libmaxminddb | openSL |
Hinweis : Möglicherweise müssen Sie Build-Tools wie gcc
, autoconf
, gettext
, autopoint
usw. installieren, um Software aus dem Quellcode zu kompilieren/erstellen. zB base-devel
, build-essential
, "Development Tools"
.
Ein Docker-Image wurde aktualisiert, das die Ausgabe eines Zugriffsprotokolls steuern kann. Wenn Sie nur einen Bericht ausgeben möchten, können Sie ein Protokoll von der externen Umgebung an einen Docker-basierten Prozess weiterleiten:
touch report.html
cat access.log | docker run --rm -i -v ./report.html:/report.html -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED -
ODER in Echtzeit
tail -F access.log | docker run -p 7890:7890 --rm -i -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED --real-time-html -
Sie können die Binärdatei für Debian-basierte Systeme auch in einer isolierten Containerumgebung erstellen, um zu verhindern, dass Ihr lokales System mit den Entwicklungsbibliotheken überladen wird:
$ curl -L "https://github.com/allinurl/goaccess/archive/refs/heads/master.tar.gz" | tar -xz && cd goaccess-master
$ docker build -t goaccess/build.debian-12 -f Dockerfile.debian-12 .
$ docker run -i --rm -v $PWD:/goaccess goaccess/build.debian-12 > goaccess
Weitere Informationen zur Verwendung des Docker-Images finden Sie in DOCKER.md.
In-Memory-Speicher bietet eine bessere Leistung auf Kosten der Beschränkung der Datensatzgröße auf die Menge des verfügbaren physischen Speichers. GoAccess verwendet In-Memory-Hash-Tabellen. Es hat eine sehr gute Speichernutzung und eine ziemlich gute Leistung. Dieser Speicher unterstützt auch die Persistenz auf der Festplatte.
Sehen Sie sich Optionen an, die dem Befehl bereitgestellt oder in der Konfigurationsdatei angegeben werden können. Wenn in der Konfigurationsdatei angegeben, müssen lange Optionen ohne vorangestelltes --
verwendet werden.
Hinweis : Durch die Weiterleitung von Daten an GoAccess wird kein Konfigurationsdialog für Protokoll/Datum/Uhrzeit angezeigt. Sie müssen dies zuvor in Ihrer Konfigurationsdatei oder in der Befehlszeile definieren.
So geben Sie Daten an ein Terminal aus und erstellen einen interaktiven Bericht:
# goaccess access.log
So erstellen Sie einen HTML-Bericht:
# goaccess access.log -a > report.html
So generieren Sie eine JSON-Berichtsdatei:
# goaccess access.log -a -d -o report.json
So generieren Sie einen CSV-Bericht an stdout:
# goaccess access.log --no-csv-summary -o csv
GoAccess bietet außerdem große Flexibilität beim Filtern und Parsen in Echtzeit. Um beispielsweise Probleme schnell zu diagnostizieren, indem Sie die Protokolle seit dem Start von goaccess überwachen:
# tail -f access.log | goaccess -
Und noch besser: Um zu filtern und dabei eine geöffnete Pipe beizubehalten, um die Echtzeitanalyse beizubehalten, können wir tail -f
und ein passendes Mustertool wie grep
, awk
, sed
usw. verwenden:
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
oder vom Anfang der Datei an zu analysieren, während die Pipe geöffnet bleibt und ein Filter angewendet wird
# tail -f -n +0 access.log | grep -i --line-buffered 'firefox' | goaccess -o report.html --real-time-html -
Es gibt mehrere Möglichkeiten, mehrere Protokolle mit GoAccess zu analysieren. Am einfachsten ist es, mehrere Protokolldateien an die Befehlszeile zu übergeben:
# goaccess access.log access.log.1
Es ist sogar möglich, Dateien aus einer Pipe zu analysieren, während normale Dateien gelesen werden:
# cat access.log.2 | goaccess access.log access.log.1 -
Hinweis : Der einzelne Bindestrich wird an die Befehlszeile angehängt, um GoAccess darüber zu informieren, dass es aus der Pipe lesen soll.
Wenn wir GoAccess nun mehr Flexibilität verleihen möchten, können wir zcat --force
verwenden, um komprimierte und unkomprimierte Dateien zu lesen. Wenn wir beispielsweise alle Protokolldateien access.log*
verarbeiten möchten, können wir Folgendes tun:
# zcat --force access.log* | goaccess -
Hinweis : Verwenden Sie unter Mac OS X gunzip -c
anstelle von zcat
.
Verwenden Sie --jobs=
(oder -j
), um die Multithread-Analyse zu aktivieren. Zum Beispiel:
# goaccess access.log -o report.html -j 4
Und verwenden Sie --chunk-size=<256-32768>
, um die Blockgröße anzupassen. Die Standardblockgröße ist 1024. Beispiel:
# goaccess access.log -o report.html -j 4 --chunk-size=8192
GoAccess bietet die Möglichkeit, Echtzeitdaten im HTML-Bericht auszugeben. Sie können die HTML-Datei sogar per E-Mail versenden, da sie aus einer einzigen Datei ohne externe Dateiabhängigkeiten besteht. Wie praktisch ist das!
Der Prozess der Erstellung eines Echtzeit-HTML-Berichts ist dem Prozess der Erstellung eines statischen Berichts sehr ähnlich. Um es in Echtzeit zu machen, ist nur --real-time-html
erforderlich.
# goaccess access.log -o /usr/share/nginx/html/your_site/report.html --real-time-html
Um den Bericht anzuzeigen, können Sie zu http://your_site/report.html
navigieren.
Standardmäßig verwendet GoAccess den Hostnamen des generierten Berichts. Optional können Sie die URL angeben, zu der der Browser des Clients eine Verbindung herstellt. Ein ausführlicheres Beispiel finden Sie in den FAQ.
# goaccess access.log -o report.html --real-time-html --ws-url=goaccess.io
Standardmäßig lauscht GoAccess auf Port 7890. Um einen anderen Port als 7890 zu verwenden, können Sie ihn wie folgt angeben (stellen Sie sicher, dass der Port geöffnet ist):
# goaccess access.log -o report.html --real-time-html --port=9870
Und um den WebSocket-Server an eine andere Adresse als 0.0.0.0 zu binden, können Sie ihn wie folgt angeben:
# goaccess access.log -o report.html --real-time-html --addr=127.0.0.1
Hinweis : Um Echtzeitdaten über eine TLS/SSL-Verbindung auszugeben, müssen Sie --ssl-cert=
und --ssl-key=
verwenden.
Eine weitere nützliche Pipe wäre das Filtern von Daten aus dem Webprotokoll
Im Folgenden werden alle HTTP-Anfragen ab dem 05/Dec/2010
bis zum Ende der Datei abgerufen.
# sed -n '/05/Dec/2010/,$ p' access.log | goaccess -a -
oder relative Daten wie den gestrigen oder den morgigen Tag verwenden:
# sed -n '/'$(date '+%d/%b/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a -
Wenn wir nur einen bestimmten Zeitrahmen von DATUM a bis DATUM b analysieren möchten, können wir Folgendes tun:
# sed -n '/5/Nov/2010/,/5/Dec/2010/ p' access.log | goaccess -a -
Wenn wir nur eine bestimmte Datenmenge aufbewahren und den Speicher wiederverwenden möchten, können wir nur eine bestimmte Anzahl von Tagen aufbewahren. Um beispielsweise die letzten 5 Tage aufzubewahren und anzuzeigen:
# goaccess access.log --keep-last=5
Angenommen, Ihr Protokoll enthält das Feld „Virtual Host“. Zum Beispiel:
vhost.io:80 8.8.4.4 - - [02/Mar/2016:08:14:04 -0600] "GET /shop HTTP/1.1" 200 615 "-" "Googlebot-Image/1.0"
Und Sie möchten den virtuellen Host an die Anfrage anhängen, um zu sehen, zu welchem virtuellen Host die Top-URLs gehören:
awk '$8=$1$8' access.log | goaccess -a -
Um dasselbe zu tun, aber auch Echtzeitfilterung und -analyse zu verwenden:
tail -f access.log | unbuffer -p awk '$8=$1$8' | goaccess -a -
Um eine Liste virtueller Hosts auszuschließen, können Sie Folgendes tun:
# grep -v "`cat exclude_vhost_list_file`" vhost_access.log | goaccess -
So analysieren Sie bestimmte Seiten, z. B. Seitenaufrufe, html
, htm
, php
usw. innerhalb einer Anfrage:
# awk '$7~/.html|.htm|.php/' access.log | goaccess -
Beachten Sie, dass $7
das Anforderungsfeld für das allgemeine und kombinierte Protokollformat (ohne Virtual Host) ist. Wenn Ihr Protokoll Virtual Host enthält, möchten Sie wahrscheinlich stattdessen $8
verwenden. Überprüfen Sie am besten, für welchen Bereich Sie sich bewerben, z. B.:
# tail -10 access.log | awk '{print $8}'
Oder um einen bestimmten Statuscode zu analysieren, z. B. 500 (Interner Serverfehler):
# awk '$9~/500/' access.log | goaccess -
Oder mehrere Statuscodes, z. B. alle 3xx und 5xx:
# tail -f -n +0 access.log | awk '$9~/3[0-9]{2}|5[0-9]{2}/' | goaccess -o out.html -
Und um einen geschätzten Überblick darüber zu erhalten, wie viele Bots (Crawler) Ihren Server erreichen:
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -
Außerdem ist darauf hinzuweisen, dass wir GoAccess wie folgt ausführen können, wenn wir es mit einer niedrigeren Priorität ausführen möchten:
# nice -n 19 goaccess -f access.log -a
Und wenn Sie es nicht auf Ihrem Server installieren möchten, können Sie es trotzdem von Ihrem lokalen Computer aus ausführen!
# ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess -
Hinweis: SSH erfordert -n
, damit GoAccess von stdin lesen kann. Stellen Sie außerdem sicher, dass Sie SSH-Schlüssel zur Authentifizierung verwenden, da dies nicht funktioniert, wenn eine Passphrase erforderlich ist.
Wir erhalten viele Fragen und Probleme, die bereits beantwortet wurden.
GoAccess hat die Möglichkeit, Protokolle schrittweise über seinen internen Speicher zu verarbeiten und seine Daten auf die Festplatte zu übertragen. Es funktioniert folgendermaßen:
--persist
persistiert werden, dann kann derselbe Datensatz mit geladen werden.--restore
. Wenn neue Daten übergeben werden (per Pipeline oder über eine Protokolldatei), werden diese an den ursprünglichen Datensatz angehängt. GoAccess verfolgt die Inodes aller verarbeiteten Dateien (vorausgesetzt, die Dateien bleiben auf derselben Partition) und extrahiert außerdem einen Datenausschnitt aus dem Protokoll zusammen mit der letzten analysierten Zeile jeder Datei und dem Zeitstempel der letzten analysierten Zeile . z. B. inode:29627417|line:20012|ts:20171231235059
Zunächst wird verglichen, ob das Snippet mit dem analysierten Protokoll übereinstimmt. Wenn dies der Fall ist, wird davon ausgegangen, dass sich das Protokoll nicht drastisch geändert hat, z. B. nicht abgeschnitten wurde. Wenn der Inode nicht mit der aktuellen Datei übereinstimmt, werden alle Zeilen analysiert. Wenn die aktuelle Datei mit dem Inode übereinstimmt, liest sie die verbleibenden Zeilen und aktualisiert die Anzahl der analysierten Zeilen sowie den Zeitstempel. Als zusätzliche Vorsichtsmaßnahme werden Protokollzeilen mit einem Zeitstempel ≤ dem gespeicherten nicht analysiert.
Weitergeleitete Daten basieren auf dem Zeitstempel der letzten gelesenen Zeile. Beispielsweise werden alle eingehenden Einträge analysiert und verworfen, bis ein Zeitstempel gefunden wird, der größer als der gespeicherte ist.
// last month access log
# goaccess access.log.1 --persist
Dann laden Sie es mit
// append this month access log, and preserve new data
# goaccess access.log --restore --persist
Nur persistente Daten lesen (ohne neue Daten zu analysieren)
# goaccess --restore
Jede Hilfe zu GoAccess ist willkommen. Am hilfreichsten ist es, es auszuprobieren und Feedback zu geben. Nutzen Sie gerne den GitHub Issue Tracker und Pull Requests, um Codeänderungen zu besprechen und einzureichen.
Sie können zu unseren Übersetzungen beitragen, indem Sie die .po-Dateien direkt auf GitHub bearbeiten oder die visuelle Oberfläche inlang.com verwenden
Genießen!