====== Goaccess : Analysez en temps réel les logs Nginx ====== [[https://goaccess.io/|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 [[https://maxmind.com/|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 ===== {{:goaccess:goaccess3.png|}} 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 ://__ * [[http://goaccess.io/|Site officiel]] * [[https://github.com/allinurl/goaccess|Dépôt GitHub]] * [[https://goaccess.io/man|Page du man]]