
GoAccess ist ein Echtzeit-Web-Log-Analysator und interaktiver Viewer, der in einem Terminal auf *nix-Systemen oder über Ihren Browser läuft.
GoAccess ist ein quelloffener, Echtzeit-Weblog-Analysator und interaktiver Viewer, der in einem Terminal auf *nix-Systemen oder direkt im Browser läuft. Entwickelt für Systemadministratoren, DevOps-Ingenieure und Sicherheitsexperten, liefert es schnell, umsetzbare HTTP-Statistiken und visuelle Serverberichte sofort. GoAccess analysiert Ihre Webserver-Logs in Echtzeit und präsentiert die Daten direkt im Terminal oder über ein Live-HTML-Dashboard, was die Überwachung des Datenverkehrs, die Erkennung von Anomalien und die sofortige Fehlerbehebung erleichtert.
Weitere Informationen unter: https://goaccess.io.
GoAccess analysiert die angegebene Weblog-Datei und gibt die Daten auf dem X- Terminal aus. Zu den Funktionen gehören:
Vollständig in Echtzeit
Alle Panels und Metriken werden alle 200 ms auf der Terminalausgabe und
jede Sekunde auf der HTML-Ausgabe aktualisiert.
Minimale Konfiguration erforderlich
Sie können es einfach gegen Ihre Zugriffslogdatei ausführen, das Logformat
auswählen und GoAccess analysiert das Zugriffslog und zeigt die Statistiken an.
Anwendungsantwortzeit verfolgen
Verfolgen Sie die Zeit, die zur Bearbeitung der Anfrage benötigt wird.
Äußerst nützlich, wenn Sie Seiten verfolgen möchten, die Ihre Website
verlangsamen.
WebSocket-Authentifizierung:
GoAccess bietet verbesserte WebSocket-Authentifizierung mit Unterstützung für
lokale und externe JWT-Verifizierung, sichere Token-Aktualisierung und nahtlose
Integration mit externen Authentifizierungssystemen.
Nahezu alle Weblog-Formate
GoAccess erlaubt jede benutzerdefinierte Logformat-Zeichenkette. Vordefinierte
Optionen umfassen Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront
usw.
Inkrementelle Logverarbeitung
Datenpersistenz erforderlich? GoAccess kann Logs inkrementell verarbeiten
über die On-Disk-Persistenzoptionen.
Nur eine Abhängigkeit
GoAccess ist in C geschrieben. Zum Ausführen benötigen Sie nur ncurses als
Abhängigkeit. Das war's. Es enthält sogar einen eigenen WebSocket-Server — http://gwsocket.io/.
Besucher
Bestimmen Sie die Anzahl der Hits, Besucher, Bandbreite und Metriken für die
langsamsten Anfragen pro Stunde oder Datum.
Metriken pro virtuellem Host
Mehrere virtuelle Hosts (Server-Blöcke)? Es gibt ein Panel, das anzeigt,
welcher virtuelle Host die meisten Webserver-Ressourcen verbraucht.
ASN (Autonome Systemnummer) Zuordnung
Ideal zur Erkennung bösartiger Verkehrsmuster und deren Blockierung.
Farben anpassbar
Passen Sie GoAccess an Ihre eigenen Farbwünsche/-schemata an. Entweder über
das Terminal oder durch Anwenden des Stylesheets auf die HTML-Ausgabe.
Unterstützung für große Datensätze
GoAccess kann große Logs dank optimierter In-Memory-Hash-Tabellen parsen.
Es hat eine sehr gute Speichernutzung und ziemlich gute Leistung. Dieser
Speicher unterstützt auch On-Disk-Persistenz.
Docker-Unterstützung Möglichkeit, GoAccess' Docker-Image aus dem Upstream zu erstellen. Sie können es weiterhin vollständig konfigurieren, indem Sie Volume-Mapping verwenden und bearbeiten. Siehe Abschnitt unten. Es gibt auch eine Dokumentation zur Verwendung von .
GoAccess erlaubt jede benutzerdefinierte Logformat-Zeichenkette. Vordefinierte Optionen umfassen, aber nicht beschränkt auf:
GoAccess wurde als schneller, terminalbasierter Log-Analysator entwickelt. Seine Kernidee ist es, Webserver-Statistiken schnell zu analysieren und in Echtzeit anzuzeigen, ohne einen Browser zu benötigen (großartig, wenn Sie eine schnelle Analyse Ihres Zugriffslogs über SSH durchführen möchten oder einfach gerne im Terminal arbeiten).
Es dient auch als praktisches Werkzeug für die Sicherheitsüberwachung, da es einfach macht, verdächtige Aktivitäten, ungewöhnliche Verkehrsmuster, Brute-Force-Versuche, Scanner, Bots und anomale Anfragen direkt aus Ihren Logs zu erkennen.
Während die Terminalausgabe die Standardausgabe ist, kann es auch einen
vollständigen, eigenständigen, Echtzeit HTML
Bericht sowie einen JSON und
CSV Bericht
erzeugen.
Sie können es eher als ein Überwachungsbefehlswerkzeug betrachten.
GoAccess kann auf *nix-Systemen kompiliert und verwendet werden.
Laden Sie GoAccess herunter, entpacken Sie es und kompilieren Sie es mit:
$ wget https://tar.goaccess.io/goaccess-1.10.2.tar.gz
$ tar -xzvf goaccess-1.10.2.tar.gz
$ cd goaccess-1.10.2/
$ ./configure --enable-utf8 --enable-geoip=mmdb --with-zlib
$ 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 Paketverwalter Ihrer GNU+Linux-Distribution. Bitte beachten Sie, dass nicht alle Distributionen die neueste Version von GoAccess enthalten.
# apt-get install goaccess
Hinweis: Es ist wahrscheinlich, dass dies eine veraltete Version von GoAccess installiert. Um sicherzustellen, dass Sie die neueste stabile Version von GoAccess ausführen, 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
Hinweis:
.deb Pakete im offiziellen Repo sind ebenfalls ü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.
Ein Docker-Image wurde aktualisiert, das die Ausgabe aus einem Zugriffslog ermöglicht. Wenn Sie nur einen Bericht ausgeben möchten, können Sie ein Log 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 -
Es gibt auch eine Dokumentation zur Verwendung von docker-compose.
Sie können das Binary auch für Debian-basierte Systeme in einer isolierten Containerumgebung erstellen, um Ihr lokales System nicht mit den Entwicklungsbibliotheken zu überladen:
$ 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.
GoAccess hat minimale Anforderungen, es ist in C geschrieben und benötigt nur ncurses. Unten ist eine Tabelle einiger optionaler Abhängigkeiten in einigen Distributionen, um GoAccess aus dem Quellcode zu erstellen.
Hinweis: Möglicherweise müssen Sie Build-Tools wie gcc, autoconf,
gettext, autopoint usw. installieren, um Software aus dem Quellcode zu kompilieren/erstellen.
z.B. base-devel, build-essential, "Development Tools".
Der In-Memory-Speicher bietet eine bessere Leistung, begrenzt jedoch die Datensatzgröße auf die Menge des verfügbaren physischen Speichers. GoAccess verwendet In-Memory-Hash-Tabellen. Es hat eine sehr gute Speichernutzung und ziemlich gute Leistung. Dieser Speicher unterstützt auch On-Disk-Persistenz.
Siehe Optionen, die an den Befehl übergeben oder
in der Konfigurationsdatei angegeben werden können. Wenn in der Konfigurationsdatei angegeben,
müssen lange Optionen ohne vorangestelltes -- verwendet werden.
Hinweis: Wenn Daten in GoAccess gepiped werden, wird kein Log-/Datum/Zeit- Konfigurationsdialog angezeigt. Sie müssen dies vorher in Ihrer Konfigurationsdatei oder in der Befehlszeile definieren.
Um eine Ausgabe auf einem Terminal zu erhalten und einen interaktiven Bericht zu generieren:
# goaccess access.log
Um einen HTML-Bericht zu generieren:
# goaccess access.log -a > report.html
Um eine JSON-Berichtsdatei zu generieren:
# goaccess access.log -a -d -o report.json
Um einen CSV-Bericht auf stdout zu generieren:
# goaccess access.log --no-csv-summary -o csv
GoAccess bietet auch große Flexibilität für Echtzeit-Filterung und -Parsing. Zum Beispiel, um schnell Probleme zu diagnostizieren, indem Logs seit dem Start von goaccess überwacht werden:
# tail -f access.log | goaccess -
Und noch besser: Um zu filtern, während eine geöffnete Pipe zur Aufrechterhaltung der
Echtzeit-Analyse erhalten bleibt, können wir tail -f und ein Mustererkennungswerkzeug
wie grep, awk, sed usw. verwenden:
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
oder um vom Anfang der Datei zu parsen, 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 Logs mit GoAccess zu parsen. Die einfachste ist, mehrere Logdateien an die Befehlszeile zu übergeben:
# goaccess access.log access.log.1
Es ist sogar möglich, Dateien aus einer Pipe zu parsen, während reguläre 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 mitzuteilen, 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 zum Beispiel
alle Logdateien access.log* verarbeiten möchten, können wir Folgendes tun:
# zcat --force access.log* | goaccess -
Hinweis: Unter Mac OS X verwenden Sie gunzip -c anstelle von zcat.
Verwenden Sie --jobs=<count> (oder -j), um das Multi-Thread-Parsing 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 Standard-Blockgröße ist 1024. Zum Beispiel:
# goaccess access.log -o report.html -j 4 --chunk-size=8192
GoAccess kann Echtzeitdaten im HTML-Bericht ausgeben. Sie können sogar die HTML-Datei per E-Mail versenden, da sie aus einer einzigen Datei ohne externe Dateiabhängigkeiten besteht – wie praktisch ist das denn!
Der Prozess zum Erstellen eines Echtzeit-HTML-Berichts ist dem Erstellen eines
statischen Berichts sehr ähnlich. Nur --real-time-html ist erforderlich, um
ihn in Echtzeit zu machen.
# goaccess access.log -o /usr/share/nginx/html/your_site/report.html --real-time-html
Um den Bericht anzuzeigen, navigieren Sie zu http://your_site/report.html.
Standardmäßig verwendet GoAccess den Hostnamen des generierten Berichts. Optional können Sie die URL angeben, mit der sich der Browser des Clients verbinden soll. Siehe FAQ für ein detaillierteres Beispiel.
# 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=<cert.crt> und --ssl-key=<priv.key> verwenden.
Ein weiterer nützlicher Pipe-Befehl ist das Herausfiltern von Daten aus dem Weblog.
Der folgende Befehl holt alle HTTP-Anfragen ab dem 05/Dec/2010 bis zum
Ende der Datei.
# sed -n '/05\/Dec\/2010/,$ p' access.log | goaccess -a -
Oder mit relativen Daten wie dem gestrigen oder morgigen Tag:
# sed -n '/'$(date '+%d\/%b\/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a -
Wenn wir nur einen bestimmten Zeitraum von DATUM a bis DATUM b parsen 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 erhalten und den Speicher recyceln möchten, können wir nur eine bestimmte Anzahl von Tagen behalten. Um beispielsweise die letzten 5 Tage zu behalten & anzuzeigen:
# goaccess access.log --keep-last=5
Angenommen, Ihr Log enthält das virtuelle Host-Feld. 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 Echtzeit-Filterung und -Parsing 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 -
Um bestimmte Seiten zu parsen, z.B. Seitenaufrufe, html, htm, php usw. innerhalb einer
Anfrage:
# awk '$7~/\.html|\.htm|\.php/' access.log | goaccess -
Hinweis: $7 ist das Anforderungsfeld für das Common- und Combined-Log-Format
(ohne virtuellen Host). Wenn Ihr Log einen virtuellen Host enthält, möchten Sie
wahrscheinlich stattdessen $8 verwenden. Es ist am besten zu überprüfen, welches Feld Sie
anvisieren, z.B.:
# tail -10 access.log | awk '{print $8}'
Oder um einen bestimmten Statuscode zu parsen, z.B. 500 (Internal Server Error):
# 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 eine geschätzte Übersicht zu erhalten, wie viele Bots (Crawler) Ihren Server besuchen:
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -
Es ist auch erwähnenswert, dass wir GoAccess mit niedrigerer Priorität ausführen können:
# 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 Rechner ausführen!
# ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess - --log-format=COMBINED
Hinweis: SSH erfordert -n, damit GoAccess von stdin lesen kann. Stellen Sie außerdem
sicher, dass Sie SSH-Keys für die Authentifizierung verwenden, da es nicht funktioniert,
wenn eine Passphrase erforderlich ist.
Wir erhalten viele Fragen und Probleme, die bereits beantwortet wurden.
GoAccess kann Logs inkrementell über seinen internen Speicher verarbeiten und seine Daten auf die Festplatte auslagern. Es funktioniert folgendermaßen:
--persist gespeichert werden, dann kann der
gleiche Datensatz mit--restore geladen werden. Wenn neue Daten übergeben werden (gepipet oder
über eine Logdatei), werden sie an den ursprünglichen Datensatz angehängt.GoAccess verfolgt die Inodes aller verarbeiteten Dateien (vorausgesetzt, die
Dateien bleiben auf derselben Partition), extrahiert außerdem einen Datenausschnitt
aus dem Log zusammen mit der zuletzt analysierten Zeile jeder Datei und dem
Zeitstempel der zuletzt analysierten Zeile. z.B. inode:29627417|line:20012|ts:20171231235059
Zuerst vergleicht es, ob der Ausschnitt mit dem zu analysierenden Log übereinstimmt; wenn ja, geht es davon aus, dass sich das Log nicht drastisch geändert hat, z.B. nicht abgeschnitten wurde. Wenn die Inode nicht mit der aktuellen Datei übereinstimmt, werden alle Zeilen analysiert. Wenn die aktuelle Datei mit der Inode übereinstimmt, liest es die restlichen Zeilen und aktualisiert die Anzahl der analysierten Zeilen und den Zeitstempel. Als zusätzliche Vorsichtsmaßnahme werden keine Logzeilen mit einem Zeitstempel ≤ dem gespeicherten analysiert.
Gepipete Daten basieren auf dem Zeitstempel der zuletzt gelesenen Zeile. Zum Beispiel werden alle eingehenden Einträge analysiert und verworfen, bis ein Zeitstempel >= dem gespeicherten gefunden wird.
// Zugriffslog des letzten Monats
# goaccess access.log.1 --persist
dann laden mit
// Zugriffslog dieses Monats anhängen und neue Daten erhalten
# goaccess access.log --restore --persist
Um nur gespeicherte Daten zu lesen (ohne neue Daten zu analysieren)
# goaccess --restore
Sie können zu unseren Übersetzungen beitragen, indem Sie die .po-Dateien direkt auf GitHub bearbeiten oder die visuelle Oberfläche inlang.com verwenden.
goaccess.conf| 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 |
| Arch | ncurses | geoip | libmaxminddb | openssl |
| Gentoo | sys-libs/ncurses | dev-libs/geoip | dev-libs/libmaxminddb | dev-libs/openssl |
| Slackware | ncurses | GeoIP | libmaxminddb | openssl |