Comment installer GoAccess Web Log Analyzer sur Rocky Linux 8

GoAccess est un analyseur de journaux léger open-source qui peut lire et analyser les fichiers journaux de plusieurs formats, notamment Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, Caddy, etc. Il est écrit en langage C et utilise la bibliothèque ncurses pour son interface de tableau de bord, qui est accessible depuis la ligne de commande.

Il peut générer des rapports au format HTML, JSON et CSV, qui peuvent être partagés avec d’autres personnes. Tu peux même générer des rapports HTML en temps réel qui peuvent être affichés via un lien public.

Dans ce tutoriel, tu apprendras à installer GoAccess Analyzer sur un serveur Rocky basé sur Linux et à le configurer pour lire les journaux Nginx et servir des rapports en temps réel.

Conditions préalables

  1. Un serveur exécutant Rocky Linux 8.

  2. Un utilisateur non-root ayant des privilèges sudo.

  3. Nginx fonctionnant sur le serveur pour accéder aux journaux.

  4. Assure-toi que tout est mis à jour.

    $ sudo dnf update
    

Étape 1 – Installe les dépendances pour GoAccess

La dernière version de GoAccess v1.5.2 n’est pas disponible dans le référentiel par défaut. Pour installer la dernière version de GoAccess, nous allons la construire à partir de la source. La première étape consiste à télécharger les dépendances nécessaires à la construction du paquet GoAccess.

$ sudo dnf install ncurses-devel libmaxminddb-devel openssl-devel 
$ sudo dnf groupinstall 'Development Tools'

Étape 2 – Télécharge et installe GoAccess

Télécharge la dernière version de l’archive GoAccess. Tu peux trouver la dernière version de GoAccess sur la page de téléchargement officielle.

$ wget https://tar.goaccess.io/goaccess-1.5.2.tar.gz

Extrais les fichiers de l’archive.

$ tar -xzvf goaccess-1.5.2.tar.gz

Configure et installe le paquet.

$ cd goaccess-1.5.2
$ autoreconf -fi
$ sudo ./configure --enable-utf8 --enable-geoip=mmdb --with-openssl
$ sudo make
$ sudo make install

Vérifie que GoAccess fonctionne.

$  goaccess --version
GoAccess - 1.5.2.
For more details visit: https://goaccess.io/
Copyright (C) 2009-2020 by Gerardo Orellana

Build configure arguments:
  --enable-utf8
  --enable-geoip=mmdb
  --with-openssl

Étape 3 – Télécharge la base de données GeoIP

Tu peux télécharger la base de données GeoIP depuis DB-IP ou Maxmind. Si tu veux télécharger à partir de Maxmind, tu devras créer un compte et générer une clé de licence gratuite. Le téléchargement à partir de DB-IP peut se faire directement.

Télécharge le fichier zip du pays à partir de l’une des sources ci-dessus. Une fois téléchargé, extrais-les et télécharge le fichier .mmdb sur le serveur dans un dossier personnalisé comme /home/<user>/geoip.

Étape 4 – Configurer GoAccess

GoAccess stocke son fichier de configuration à l’adresse /usr/local/etc/goaccess/goaccess.conf. Tu peux vérifier l’emplacement du fichier sur ton système à l’aide de la commande suivante.

$ goaccess --dcf
/usr/local/etc/goaccess/goaccess.conf

Ouvre le fichier pour le modifier.

$ sudo nano /usr/local/etc/goaccess/goaccess.conf

La plupart des options sont commentées. Tu peux soit utiliser ces options via la ligne de commande, soit les définir dans le fichier ici. Pour activer une option, supprime le caractère # qui la précède.

Tout d’abord, activons l’option time-format. Nous allons analyser les fichiers Nginx dans notre tutoriel, alors active l’option destinée aux journaux Apache/Nginx.

# The following time format works with any of the
# Apache/NGINX's log formats below.
#
time-format %H:%M:%S

Ensuite, active l’option Nginx date-format.

# The following date format works with any of the
# Apache/NGINX's log formats below.
#
date-format %d/%b/%Y

Ensuite, active l’option log-format. Dans notre tutoriel, nous utiliserons le format de journal combined, qui est celui que Nginx utilise couramment.

log-format COMBINED

Si tes fichiers journaux contiennent le champ Hôte virtuel, active plutôt l’option suivante.

log-format VCOMBINED

Suppose que tu veuilles avoir plus de contrôle sur le format du journal. Dans ce cas, tu peux activer la ligne suivante à la place (selon le journal auquel tu accèdes) et ajouter ou supprimer des paramètres en fonction de tes besoins.

log-format %v:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

Pour activer le module GeoIP, active l’option suivante en saisissant le chemin d’accès à la base de données GeoIP.

# For GeoIP2 Country database:
# Download the GeoLite2-Country.mmdb.gz
# gunzip GeoLite2-Country.mmdb.gz
#
geoip-database /home/geoip/dbip-country-lite-2021-10.mmdb

Une fois terminé, enregistre le fichier en appuyant sur Ctrl + X et en entrant Y lorsque tu y es invité.

Étape 5 – Exécute GoAccess

Normalement, si tu veux exécuter GoAccess, tu dois utiliser la commande suivante.

$ sudo /usr/local/bin/goaccess /var/log/nginx/access.log

Nous devons utiliser sudo car les utilisateurs ordinaires ne peuvent pas ouvrir les fichiers journaux. De plus, tu devras utiliser le chemin complet de l’exécutable avec la commande sudo car celle-ci ne reconnaît pas les applications dans le répertoire /usr/local/bin. Tu peux toutefois contourner cette limitation en créant un lien symbolique.

Pour ce faire, exécute la commande suivante.

$ sudo ln -s /usr/local/bin/goaccess /usr/bin/goaccess

Maintenant, tu peux exécuter GoAccess directement.

$ sudo goaccess /var/log/nginx/access.log

Les fichiers journaux de Nginx conservent un enregistrement de tout le trafic HTTP entrant. Si ton serveur fonctionne depuis longtemps, tu verras plusieurs journaux d’accès avec les plus anciens journaux au format compressé .gz. Les anciens fichiers journaux sont générés suite à la rotation des journaux.

Une fois que tu auras exécuté la commande, tu seras accueilli par le tableau de bord suivant.

Tableau de bord de GoAccess

GoAccess te fournit plusieurs raccourcis clavier pour naviguer dans le tableau de bord.

  • TAB pour avancer dans les modules disponibles et SHIFT+TAB pour reculer.
  • F5 pour rafraîchir le tableau de bord.
  • g pour aller en haut de l’écran du tableau de bord et G pour aller en bas.
  • o ou ENTER pour développer le module sélectionné.
  • j et k pour faire défiler l’écran vers le bas et vers le haut dans le module actif.
  • s pour afficher les options de tri du module actif.
  • / pour effectuer une recherche dans tous les modules et n pour passer à la correspondance suivante.
  • 0-9 et SHIFT+0 pour activer rapidement le module numéroté correspondant.
  • ? pour afficher le dialogue d’aide rapide.
  • q pour quitter le programme.

Passons en revue tous les panneaux en bref.

  1. Visiteurs uniques par jour – Ce panneau est auto-explicatif. Il répertorie les visiteurs uniques, les hits et la bande passante cumulée pour chaque date. Il inclut aussi les crawlers et spiders par défaut.

  2. Fichiers demandés (URL) – Ce panneau fournit les statistiques concernant les fichiers non statiques les plus demandés sur ton serveur.

  3. Requêtes statiques – Ce panneau est similaire au panneau ci-dessus, sauf qu’il gère les fichiers statiques comme les images, les CSS, JavaScript, etc.

  4. URL non trouvées (404) – Ce panneau consigne toutes les demandes de fichiers et de chemins non trouvés sur ton serveur.

  5. Noms d’hôtes et IP des visiteurs – Ce panneau donne plus d’informations sur les visiteurs de ton site. Tu peux appuyer sur o pour développer le panneau et obtenir des informations détaillées comme le pays d’origine, la ville et le reverse DNS.

  6. Systèmes d’exploitation – Ce panneau affiche les différents systèmes d’exploitation utilisés par les visiteurs.

  7. Navigateurs – Ce panneau affiche les différents navigateurs utilisés par les visiteurs.

  8. Répartition horaire – Ce panneau donne un rapport horaire du nombre de visites, de visiteurs uniques et de la bande passante consommée.

  9. Hôtes virtuels – Ce panneau affiche les hôtes virtuels analysés à partir du fichier journal. Il ne s’affichera que si tu utilises le format de journal VCOMBINED dans le fichier de configuration ci-dessus ou si %v fait partie de la configuration du format de journal.

  10. Referrer URLs – Ce panneau répertorie les URL qui renvoient les visiteurs vers ton serveur. Ce panneau est désactivé par défaut. Pour l’activer, commente la ligne suivante dans le fichier de configuration en ajoutant # devant elle.

    #ignore-panel REFERRERS
    
  11. Sites référents – Ce panneau affiche les adresses IP des hôtes référents.

  12. Phrases clés – Ce panneau affiche les mots clés utilisés dans Google Search, Google cache ou Google Translate qui mènent à ton site. Ce panneau est également désactivé par défaut. Active-le en commentant la ligne suivante dans le fichier de configuration.

    #ignore-panel KEYPHRASES
    
  13. Codes d’état HTTP – Ce panneau affiche les statistiques des codes d’état HTTP renvoyés par ton serveur lorsqu’il répond à une requête.

  14. Utilisateur distant (authentification HTTP) – Ce panneau affiche l’ID utilisateur de la personne qui accède à un document sur ton serveur, protégé par l’authentification HTTP. Ce panneau ne fonctionne que si %e fait partie de la configuration du format de journal.

  15. État du cache – Ce panneau détermine si une demande est mise en cache et servie à partir de celle-ci. Ce panneau ne fonctionne que si %c fait partie de la configuration du format de journal.

  16. Géolocalisation – Ce panneau fournit une liste des emplacements géographiques des visiteurs qui accèdent à ton site. Il ne s’affichera que si tu as téléchargé et ajouté son emplacement dans le fichier de configuration.

Étape 6 – Exécute GoAccess en tant que non privilégié

Comme bonne pratique de sécurité, moins il y a de code qui fonctionne en tant que root, mieux c’est. Pour exécuter GoAccess sans root, il a besoin des autorisations pour lire les fichiers journaux.

Les fichiers journaux du serveur font généralement partie du groupe adm. Tu peux le vérifier en utilisant la commande suivante.

$ ls -l /var/log/nginx
total 68
-rw-r----- 1 nginx adm 30547 Oct 10 12:47 access.log
-rw-r----- 1 nginx adm 35063 Oct 10 12:47 error.log

Comme tu peux le voir, tu n’as pas besoin d’être un utilisateur root pour ouvrir les fichiers journaux. Tout utilisateur appartenant au groupe adm peut ouvrir les fichiers.

Le moyen le plus simple d’exécuter GoAccess sans root est d’ajouter l’utilisateur actuellement connecté au groupe adm. De cette façon, tu peux exécuter GoAccess sous cet utilisateur sans sudo.

Exécute la commande suivante pour ajouter l’utilisateur actuel au groupe adm.

$ sudo usermod -aG adm $USER 

Maintenant, déconnecte-toi et reconnecte-toi pour appliquer la modification. Tu peux aussi exécuter la commande suivante sans avoir besoin de te déconnecter pour appliquer le changement.

$ su $USER

Tu devrais pouvoir exécuter GoAccess directement sans avoir besoin de sudo.

$ goaccess /var/log/nginx/access.log

Étape 7 – Générer des rapports HTML

GoAccess peut être utilisé pour générer des rapports HTML que tu peux servir en ligne. Utilise la commande suivante pour générer un rapport HTML.

$ goaccess /var/log/nginx/access.log -o stats.html

Tu peux soit télécharger le fichier sur ton PC local pour toi-même ou dans le dossier de ton site Web pour le servir publiquement.

Rapport HTML de GoAccess

Tu peux même générer un rapport HTML en temps réel en utilisant GoAccess. Mais d’abord, tu dois ouvrir le port 7890 pour que la Websocket de GoAccess fonctionne. Ouvre le port à l’aide de la commande suivante.

$ sudo firewall-cmd --permanent --add-port=7890/tcp

Recharge le pare-feu pour appliquer la modification.

$ sudo firewall-cmd --reload

Maintenant, exécute la commande suivante pour générer un rapport HTML en temps réel.

$ goaccess /var/log/nginx/access.log -o /usr/share/nginx/html/livereport.html --real-time-html

Cela générera un rapport en temps réel à l’emplacement indiqué. La commande ci-dessus permettra à GoAccess de continuer à fonctionner au premier plan en tant que WebSocket à l’écoute des connexions.

Il y a un petit problème avec l’exécution de la commande ci-dessus. La commande ci-dessus fonctionnera si GoAccess a des droits d’utilisateur sur le répertoire /usr/share/nginx/html. Comme nous exécutons GoAccess sous l’utilisateur actuellement connecté, tu dois donner à cet utilisateur des droits sur le répertoire /usr/share/html. Si tu ne peux pas attendre pour une raison quelconque, tu devras exécuter GoAccess en utilisant sudo.

$ sudo goaccess /var/log/nginx/access.log -o /usr/share/nginx/html/livereport.html --real-time-html

Si tu veux exécuter GoAccess en arrière-plan, tu peux le lancer en tant que démon à la place en utilisant la commande suivante.

$ goaccess /var/log/nginx/access.log -o /usr/share/nginx/html/livereport.html --real-time-html --daemonize
Daemonized GoAccess: 78315

Pour arrêter le démon GoAccess, tue le processus avec la commande suivante.

$ sudo kill -9 78315

Ici, nous utilisons l’ID du processus que nous avons obtenu dans notre commande précédente. Si tu ne te souviens pas de l’ID du processus, tu peux aussi utiliser la commande suivante pour tuer le processus.

$ sudo kill -9 `pidof goaccess`

Remarque que nous utilisons le guillemet arrière (`) dans notre commande. L’utilisation de guillemets ordinaires fera échouer la commande.

Conclusion

Ceci conclut notre tutoriel sur l’installation et l’exécution de GoAccess Log Analyzer sur le serveur Rocky Linux 8. Si tu as des questions, poste-les dans les commentaires ci-dessous.

Vous aimerez aussi...