GoAccess est un analyseur de journaux Web en temps réel open source et une visionneuse interactive qui s'exécute dans un terminal sur les systèmes * nix ou via votre navigateur . Il fournit des statistiques HTTP rapides et précieuses aux administrateurs système qui ont besoin d'un rapport visuel du serveur à la volée. Plus d'informations sur : https://goaccess.io.
GoAccess analyse le fichier journal Web spécifié et envoie les données au terminal X. Les fonctionnalités incluent :
Complètement en temps réel
Tous les panneaux et métriques sont programmés pour être mis à jour toutes les 200 ms sur la sortie du terminal et toutes les secondes sur la sortie HTML.
Configuration minimale requise
Vous pouvez simplement l'exécuter sur votre fichier journal d'accès, choisir le format du journal et laisser GoAccess analyser le journal d'accès et vous montrer les statistiques.
Suivre le temps de réponse des applications
Suivez le temps nécessaire pour répondre à la demande. Extrêmement utile si vous souhaitez suivre les pages qui ralentissent votre site.
Presque tous les formats de journaux Web
GoAccess autorise n'importe quelle chaîne de format de journal personnalisé. Les options prédéfinies incluent Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, etc.
Traitement incrémentiel des journaux
Besoin de persistance des données ? GoAccess a la capacité de traiter les journaux de manière incrémentielle via les options de persistance sur disque.
Une seule dépendance
GoAccess est écrit en C. Pour l'exécuter, vous n'avez besoin que de ncurses en tant que dépendance. C'est ça. Il dispose même de son propre serveur Web Socket : http://gwsocket.io/.
Visiteurs
Déterminez le nombre de visites, de visiteurs, de bande passante et de mesures pour les requêtes les plus lentes par heure ou par date.
Métriques par hôte virtuel
Vous disposez de plusieurs hôtes virtuels (blocs de serveur) ? Il comporte un panneau qui affiche quel hôte virtuel consomme la plupart des ressources du serveur Web.
ASN (cartographie des numéros de système autonome)
Idéal pour détecter les modèles de trafic malveillant et les bloquer en conséquence.
Schéma de couleurs personnalisable
Adaptez GoAccess à vos propres goûts/schémas de couleurs. Soit via le terminal, soit en appliquant simplement la feuille de style sur la sortie HTML.
Prise en charge des grands ensembles de données
GoAccess offre la possibilité d'analyser des journaux volumineux grâce à ses tables de hachage en mémoire optimisées. Il a une très bonne utilisation de la mémoire et de très bonnes performances. Ce stockage prend également en charge la persistance sur disque.
Prise en charge de Docker
Possibilité de créer l'image Docker de GoAccess depuis l'amont. Vous pouvez toujours le configurer entièrement en utilisant le mappage de volume et en éditant goaccess.conf
. Voir la section Docker ci-dessous.
GoAccess autorise n'importe quelle chaîne de format de journal personnalisé. Les options prédéfinies incluent, sans s'y limiter :
GoAccess a été conçu pour être un analyseur de journaux rapide basé sur un terminal. Son idée principale est d'analyser et de visualiser rapidement les statistiques du serveur Web en temps réel sans avoir besoin d'utiliser votre navigateur ( idéal si vous souhaitez faire une analyse rapide de votre journal d'accès via SSH, ou si vous aimez simplement travailler dans le terminal ).
Bien que la sortie du terminal soit la sortie par défaut, elle a la capacité de générer un rapport HTML
complet, autonome et en temps réel, ainsi qu'un rapport JSON
et CSV
.
Vous pouvez le voir plus comme un outil de commande de moniteur qu’autre chose.
GoAccess peut être compilé et utilisé sur les systèmes *nix.
Téléchargez, extrayez et compilez GoAccess avec :
$ 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
Il est plus simple d'installer GoAccess sur GNU+Linux en utilisant le gestionnaire de paquets préféré de votre distribution GNU+Linux. Veuillez noter que toutes les distributions ne disposeront pas de la dernière version de GoAccess disponible.
# apt-get install goaccess
Remarque : Il est probable que cela installera une version obsolète de GoAccess. Pour vous assurer que vous utilisez la dernière version stable de GoAccess, consultez l'option alternative ci-dessous.
$ 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
Note :
.deb
du dépôt officiel sont également disponibles via HTTPS. Vous devrez peut-être installer apt-transport-https
. # 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 peut être utilisé sous Windows via Cygwin. Voir les packages de Cygwin. Ou via le sous-système GNU+Linux sur Windows 10.
GoAccess a des exigences minimales, il est écrit en C et ne nécessite que ncurses. Cependant, vous trouverez ci-dessous un tableau de quelques dépendances facultatives dans certaines distributions pour créer GoAccess à partir des sources.
Distribution | NCurses | GeoIP (opter) | GeoIP2 (opter) | OpenSSL (opter) |
---|---|---|---|---|
Ubuntu/Debian | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
RHEL/CentOS | ncurses-développement | développement géoip | libmaxminddb-devel | openssl-développement |
Cambre | ncursions | géoip | libmaxminddb | ouvressl |
Gentoo | sys-libs/ncurses | dev-libs/géoip | dev-libs/libmaxminddb | dev-libs/openssl |
Slackware | ncursions | GéoIP | libmaxminddb | ouvressl |
Remarque : Vous devrez peut-être installer des outils de construction tels que gcc
, autoconf
, gettext
, autopoint
etc. pour compiler/construire des logiciels à partir des sources. par exemple, base-devel
, build-essential
, "Development Tools"
.
Une image Docker a été mise à jour, capable de diriger la sortie d'un journal d'accès. Si vous souhaitez uniquement générer un rapport, vous pouvez diriger un journal de l'environnement externe vers un processus basé sur Docker :
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 -
OU en temps réel
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 -
Vous pouvez également créer le binaire pour les systèmes basés sur Debian dans un environnement de conteneur isolé pour éviter d'encombrer votre système local avec les bibliothèques de développement :
$ 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
Vous pouvez en savoir plus sur l'utilisation de l'image Docker dans DOCKER.md.
Le stockage en mémoire offre de meilleures performances au prix d'une limitation de la taille de l'ensemble de données à la quantité de mémoire physique disponible. GoAccess utilise des tables de hachage en mémoire. Il a une très bonne utilisation de la mémoire et de très bonnes performances. Ce stockage prend également en charge la persistance sur disque.
Voir les options qui peuvent être fournies à la commande ou spécifiées dans le fichier de configuration. Si elles sont spécifiées dans le fichier de configuration, les options longues doivent être utilisées sans préfixer --
.
Remarque : le transfert de données vers GoAccess n'affichera pas de boîte de dialogue de configuration journal/date/heure, vous devrez le définir au préalable dans votre fichier de configuration ou dans la ligne de commande.
Pour sortir vers un terminal et générer un rapport interactif :
# goaccess access.log
Pour générer un rapport HTML :
# goaccess access.log -a > report.html
Pour générer un fichier de rapport JSON :
# goaccess access.log -a -d -o report.json
Pour générer un rapport CSV sur la sortie standard :
# goaccess access.log --no-csv-summary -o csv
GoAccess offre également une grande flexibilité pour le filtrage et l’analyse en temps réel. Par exemple, pour diagnostiquer rapidement les problèmes en surveillant les journaux depuis le démarrage de goaccess :
# tail -f access.log | goaccess -
Et mieux encore, pour filtrer tout en gardant un tube ouvert afin de préserver l'analyse en temps réel, nous pouvons utiliser tail -f
et un outil de modèle de correspondance tel que grep
, awk
, sed
, etc. :
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
ou d'analyser depuis le début du fichier tout en maintenant le tube ouvert et en appliquant un filtre
# tail -f -n +0 access.log | grep -i --line-buffered 'firefox' | goaccess -o report.html --real-time-html -
Il existe plusieurs façons d'analyser plusieurs journaux avec GoAccess. Le plus simple consiste à transmettre plusieurs fichiers journaux à la ligne de commande :
# goaccess access.log access.log.1
Il est même possible d'analyser des fichiers à partir d'un tube tout en lisant des fichiers normaux :
# cat access.log.2 | goaccess access.log access.log.1 -
Remarque : le tiret unique est ajouté à la ligne de commande pour indiquer à GoAccess qu'il doit lire à partir du canal.
Désormais, si nous voulons ajouter plus de flexibilité à GoAccess, nous pouvons utiliser zcat --force
pour lire les fichiers compressés et non compressés. Par exemple, si nous souhaitons traiter tous les fichiers journaux access.log*
, nous pouvons faire :
# zcat --force access.log* | goaccess -
Remarque : Sous Mac OS X, utilisez gunzip -c
au lieu de zcat
.
Utilisez --jobs=
(ou -j
) pour activer l'analyse multithread. Par exemple:
# goaccess access.log -o report.html -j 4
Et utilisez --chunk-size=<256-32768>
pour ajuster la taille du morceau, la taille par défaut est 1024. Par exemple :
# goaccess access.log -o report.html -j 4 --chunk-size=8192
GoAccess a la capacité de générer des données en temps réel dans le rapport HTML. Vous pouvez même envoyer le fichier HTML par courrier électronique puisqu’il est composé d’un seul fichier sans dépendances de fichiers externes, comme c’est chouette !
Le processus de génération d'un rapport HTML en temps réel est très similaire au processus de création d'un rapport statique. Seul --real-time-html
est nécessaire pour le rendre en temps réel.
# goaccess access.log -o /usr/share/nginx/html/your_site/report.html --real-time-html
Pour afficher le rapport, vous pouvez accéder à http://your_site/report.html
.
Par défaut, GoAccess utilisera le nom d'hôte du rapport généré. En option, vous pouvez spécifier l'URL à laquelle le navigateur du client se connectera. Voir FAQ pour un exemple plus détaillé.
# goaccess access.log -o report.html --real-time-html --ws-url=goaccess.io
Par défaut, GoAccess écoute sur le port 7890, pour utiliser un port autre que 7890, vous pouvez le spécifier comme (assurez-vous que le port est ouvert) :
# goaccess access.log -o report.html --real-time-html --port=9870
Et pour lier le serveur WebSocket à une adresse différente autre que 0.0.0.0, vous pouvez la spécifier comme suit :
# goaccess access.log -o report.html --real-time-html --addr=127.0.0.1
Remarque : Pour générer des données en temps réel via une connexion TLS/SSL, vous devez utiliser --ssl-cert=
et --ssl-key=
.
Un autre canal utile serait de filtrer les dates du journal Web.
Ce qui suit obtiendra toutes les requêtes HTTP à partir du 05/Dec/2010
jusqu'à la fin du fichier.
# sed -n '/05/Dec/2010/,$ p' access.log | goaccess -a -
ou en utilisant des dates relatives telles que le jour d'hier ou de demain :
# sed -n '/'$(date '+%d/%b/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a -
Si nous voulons analyser uniquement une certaine période allant du DATE a au DATE b, nous pouvons faire :
# sed -n '/5/Nov/2010/,/5/Dec/2010/ p' access.log | goaccess -a -
Si nous voulons conserver seulement une certaine quantité de données et recycler le stockage, nous ne pouvons conserver qu'un certain nombre de jours. Par exemple pour conserver et afficher les 5 derniers jours :
# goaccess access.log --keep-last=5
En supposant que votre journal contient le champ de l'hôte virtuel. Par exemple:
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"
Et vous souhaitez ajouter l'hôte virtuel à la requête afin de voir à quel hôte virtuel appartiennent les principales URL :
awk '$8=$1$8' access.log | goaccess -a -
Pour faire de même, mais également utiliser le filtrage et l'analyse en temps réel :
tail -f access.log | unbuffer -p awk '$8=$1$8' | goaccess -a -
Pour exclure une liste d'hôtes virtuels, vous pouvez procéder comme suit :
# grep -v "`cat exclude_vhost_list_file`" vhost_access.log | goaccess -
Pour analyser des pages spécifiques, par exemple les pages vues, html
, htm
, php
, etc. dans une requête :
# awk '$7~/.html|.htm|.php/' access.log | goaccess -
Notez que $7
est le champ de demande pour le format de journal commun et combiné (sans hôte virtuel). Si votre journal inclut un hôte virtuel, vous souhaiterez probablement utiliser $8
à la place. Il est préférable de vérifier dans quel domaine vous visez, par exemple :
# tail -10 access.log | awk '{print $8}'
Ou pour analyser un code d'état spécifique, par exemple 500 (erreur interne du serveur) :
# awk '$9~/500/' access.log | goaccess -
Ou plusieurs codes d'état, par exemple tous les 3xx et 5xx :
# tail -f -n +0 access.log | awk '$9~/3[0-9]{2}|5[0-9]{2}/' | goaccess -o out.html -
Et pour avoir une estimation du nombre de robots (crawlers) qui frappent votre serveur :
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -
En outre, il convient de souligner que si nous souhaitons exécuter GoAccess avec une priorité inférieure, nous pouvons l'exécuter comme :
# nice -n 19 goaccess -f access.log -a
et si vous ne souhaitez pas l'installer sur votre serveur, vous pouvez toujours l'exécuter depuis votre machine locale !
# ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess -
Remarque : SSH nécessite -n
pour que GoAccess puisse lire depuis stdin. Assurez-vous également d'utiliser des clés SSH pour l'authentification, car cela ne fonctionnera pas si une phrase secrète est requise.
Nous recevons de nombreuses questions et problèmes auxquels nous avons déjà répondu.
GoAccess a la capacité de traiter les journaux de manière incrémentielle via son stockage interne et de transférer ses données sur le disque. Cela fonctionne de la manière suivante :
--persist
, puis le même ensemble de données peut être chargé avec.--restore
. Si de nouvelles données sont transmises (acheminées ou via un fichier journal), elles seront ajoutées à l'ensemble de données d'origine. GoAccess garde la trace des inodes de tous les fichiers traités (en supposant que les fichiers resteront sur la même partition). De plus, il extrait un extrait de données du journal ainsi que la dernière ligne analysée de chaque fichier et l'horodatage de la dernière ligne analysée. . par exemple, inode:29627417|line:20012|ts:20171231235059
Tout d'abord, il compare si l'extrait correspond au journal analysé. Si c'est le cas, il suppose que le journal n'a pas radicalement changé, par exemple s'il n'a pas été tronqué. Si l'inode ne correspond pas au fichier actuel, il analyse toutes les lignes. Si le fichier actuel correspond à l'inode, il lit ensuite les lignes restantes et met à jour le nombre de lignes analysées et l'horodatage. Par mesure de précaution supplémentaire, il n'analysera pas les lignes de journal avec un horodatage ≤ à celui stocké.
Les données transmises fonctionnent en fonction de l'horodatage de la dernière ligne lue. Par exemple, il analysera et supprimera toutes les entrées entrantes jusqu'à ce qu'il trouve un horodatage >= que celui stocké.
// last month access log
# goaccess access.log.1 --persist
puis chargez-le avec
// append this month access log, and preserve new data
# goaccess access.log --restore --persist
Pour lire uniquement les données persistantes (sans analyser les nouvelles données)
# goaccess --restore
Toute aide sur GoAccess est la bienvenue. Le moyen le plus utile est de l’essayer et de donner votre avis. N'hésitez pas à utiliser le suivi des problèmes GitHub et les demandes d'extraction pour discuter et soumettre des modifications de code.
Vous pouvez contribuer à nos traductions en éditant les fichiers .po directement sur GitHub ou en utilisant l'interface visuelle inlang.com
Apprécier!