Outils pour utilisateurs

Outils du site


goaccess:analysez_en_temps_reel_les_logs_nginx

Goaccess : Analysez en temps réel les logs Nginx

GoAccess est un utilitaire pour machines Unix d'analyse de logs de serveurs Web en temps réel.

Un des nombreux avantages de GoAccess est qu'il parse de nombreux formats de log :

  • Amazon CloudFront
  • AWS Elastic Load Balancing
  • Combined Log Format (XLF/ELF) Apache | Nginx
  • Common Log Format (CLF) Apache
  • Google Cloud Storage.
  • Apache virtual hosts
  • W3C format (IIS).

Ainsi, que vous ayez un serveur Web Apache ou Nginx, vous pouvez utiliser GoAccess pour parser vos fichiers logs.

GoAccess vous affichera dans un terminal, en temps réel :

  • Statistiques générales (nombre de requêtes, taille des logs, nombre visiteurs, bande passante, …)
  • Temps de réponse des requêtes
  • Top des visiteurs
  • Fichiers demandés (statiques, images, …)
  • Codes retour HTTP (404, …)
  • Systèmes d'exploitation et navigateurs
  • URLs référentes
  • etc, etc…

Vous avez la possibilité d'exporter le résultat en HTML, JSON, CSV. D'ailleurs, le rapport HTML est plutôt bien foutu. Cf : bas de page.

Installation

Les prérequis :

apt install libncursesw5-dev libmaxminddb-dev awk gawk gcc

L’installation se fait à partir des sources du logiciel. Il est possible de le faire à partir d’un dépôt mais dans ce cas, vous ne pourrez pas géo-localiser vos visiteurs.

On va télécharger l'archive :

wget https://tar.goaccess.io/goaccess-1.3.tar.gz
# Pour la décompresser
tar -xzvf goaccess-1.3.tar.gz

Puis on l'installe :

cd goaccess-1.3/
./configure --enable-utf8 --enable-geoip=mmdb
make
make install

Configuration

Decommenter les lignes suivante dans goaccess.conf

vi /usr/local/etc/goaccess/goaccess.conf

time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^ [%d:%t %^] "%r" %s %b %R %u

Liste des adresses IP à ne pas comptabiliser

Dans vos statistiques, vous ne voulez sûrement pas compter vos propres visites. Pour cela vous allez créer un fichier où sur chaque ligne vous indiquerez les adresses IP que GoAccess doit ignorer, par exemple celle de votre bureau, de votre maison…

vi /usr/local/etc/goaccess/ip_exclues_goaccess.conf

127.0.0.1
XXX.XXX.XXX.XXX

La base de données des localisations des adresses IP

Afin de localiser vos visiteurs, vous allez vous appuyer sur la base de donnée libre de Maxmind.com. Créez le répertoire et vous vous y déplacez :

mkdir /usr/local/etc/goaccess/GeoIP
cd /usr/local/etc/goaccess/GeoIP

Téléchargez la base de donnée :

wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz

Téléchargez la somme md5 pour vérifier l’intégrité du fichier :

wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz.md5

Puis générez la somme md5

md5sum GeoLite2-City.tar.gz

Copiez le résultat puis ouvrez avec vi la somme que vous avez téléchargée :

vi GeoLite2-City.tar.gz.md5

Sur la seconde ligne copiez le résultat et vérifiez qu’ils sont identiques. Si c’est le cas vous pouvez passer à l’étape suivante. Sinon, vous devez refaire le téléchargement de la base de donnée, votre fichier a été corrompu.

Vous décompressez l’archive dans le répertoire courant /usr/local/etc/goaccess/GeoIP

tar -xzvf GeoLite2-City.tar.gz --strip=1

Et vous la supprimez :

rm  GeoLite2-City.tar.gz

Un petit script qui automatise tout ça :

vi MajGeoIP.sh

#/bin/bash

cd /usr/local/etc/goaccess/GeoIP
rm md5sum.txt
rm  GeoLite2-City.tar.gz
rm GeoLite2-City.tar.gz.md5

wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz.md5

# Creation md5sum de la base de données GeoLite2.
md5sum < GeoLite2-City.tar.gz > md5sum.txt

# Un peu de nettoyage
sed -i 's/ .*//' md5sum.txt
sed -i 's/$/\d10/' GeoLite2-City.tar.gz.md5

file1="md5sum.txt"
file2="GeoLite2-City.tar.gz.md5"

# comparez!
if ! cmp --silent "$file1" "$file2"; then
mail -s "Resultats de la mise a jour de GeoLites" user@email.com <<< "md5sum for GeoLite2-City failed. Please check the md5sum. File may possibly be corrupted."
else
tar -xzvf GeoLite2-City.tar.gz --strip=1
mail -s "Resultats de la mise a jour de GeoLites" user@email.com <<< "Votre base de données GeoLite2-City a bien ete mise a jour."
fi

Vous enregistrez puis vous le rendez exécutable :

chmod +x MajGeoIP.sh

Un petit tour dans le crontab pour rajouter la ligne qui va exécuter le script le premier mercredi de chaque mois à 4h00 du matin. Maxmind met à jour sa base de données libre le premier mardi de chaque mois.

crontab -e

# Mise à jour de la base de données GeoLite2 de maxmind
0 04 1-7 * * [ "$(date '+\%a')" = "Wed" ] && /usr/local/etc/goaccess/GeoIP/MajGeoIP.sh

Générer les stats

Ben oui, c’est quand même l’objectif de l’article !

zcat -f /var/log/nginx/access.log* | grep -v -f /usr/local/etc/goaccess/ip_exclues_goaccess.conf | goaccess -p /usr/local/etc/goaccess/goaccess.conf -a --geoip-database /usr/local/etc/goaccess/GeoIP/GeoLite2-City.mmdb --ignore-crawlers -o /var/www/html/monsupersite.fr/rapport.html

Cette ligne de code ne doit pas vous effrayer. zcat va lire vos fichiers de log, grep va faire un tri dans ce que vient de lire zcat pour exclure les adresses IP que vous ne voulez pas prendre en compte et finalement goaccess va générer les statistiques, ici en ignorant les robots de recherche.

Votre rapport est maintenant visible à monsupersite.fr/rapport.html

Et pour automatiser la tâche tous les matins à 04h30, vous allez écrire un petit script que vous lancerez ensuite avec le cron : (Dans mon cas je récupère les logs de mon contenair proxy)

vi /root/gen_stats.sh

#!/bin/bash

# Lance la génération des log du proxy-reverse en excluant les ip local
ssh proxy 'zcat -f /var/log/nginx/access.log*' | grep -v -f /usr/local/etc/goaccess/ip_exclues_goaccess.conf > /tmp/logStats
#
# Lance Goaccess avec les log de /tmp/logStats
goaccess -p /usr/local/etc/goaccess/goaccess.conf /tmp/logStats -a --geoip-database /usr/local/etc/goaccess/GeoIP/GeoLite2-City.mmdb --ignore-crawlers --html-report-title='Rapport de stats pour xxxx.ovh' -o /var/www/html/monsupersite.fr/rapport.html

Maintenant vous le rendez exécutable :

chmod +x gen_stats.sh 

Et vous le lancer à heure régulière avec le cron :

crontab -e

# Env
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
# Goaccess
30 04 * * * /root/gen_stats.sh

Pensez à bien rajouter ces deux variables d’environnement (SHELL et PATH) en début de votre fichier crontab.

Sources :

goaccess/analysez_en_temps_reel_les_logs_nginx.txt · Dernière modification : de 127.0.0.1