Tut's GNU/Linux

[Debian 8] GoAccess – Des logs web en temps réel et en cli

GoAccess est un outil libre pour les systèmes Linux et Unix vous permettant d’analyser en temps réel les logs de votre serveur web via une seule page HTML.

Il existe plusieurs outils pour créer des stats et récupérer de façon plus claire des logs de votre serveur web, que vous soyez sous Apache ou nginx. Vous pouvez même confier ces stats à des tiers, comme Google Analytics ou encore utiliser Piwik. Notez que ces outils sont uniquement accessibles via une page / site web.

Toutefois, pour les férus de la ligne de commande, GoAccess vous offre l’opportunité d’accéder à vos stats directement via cli ! Vous bénéficierez ainsi d’un vrai tableau de bord dans votre terminal, sans passer par le web ! Awesome

Vous pouvez aussi générer des rapports en fichier HTML, JSON ou csv.
Pour ma part, je générerai des rapports HTML pour pouvoir les consulter ensuite sur mon site de façon autonome – Des explications complémentaires seront données dans le « IV. Pour aller plus loin« 

Site web officiel de GoAccess : http://goaccess.io/


I. Installation de GoAccess

L’installation n’est pas très compliquée. J’ai préféré l’installation via les dépôts officiels de GoAccess pour bénéficier des dernières versions et des corrections de bug. D’autres méthodes d’installation sont expliquées directement sur le site du projet.

L’installation est effectuée sur serveur Debian 8.2 ; Les commandes sont similaires pour Ubuntu.
Pour Archlinux, vous pouvez directement utiliser yaourt -Ss goaccess.

Je ne connais pas les manipulations pour les distributions Fedora/CentOS/openSuse…

Il faut donc saisir la source dans la liste des dépôts de paquets de votre serveur par le biais de cette commande :

Une fois la mise en place effectuée, il faut récupérer la clé publique du dépôt et l’ajouter dans votre trousseau de clés :

Enfin, vous pouvez mettre à jour votre liste de paquets et lancer l’installation de GoAccess :

Quelques dépendances s’installeront en même temps que GoAccess ; Ces paquets sont nécessaires pour le bon fonctionnement du soft.


II. Configuration préliminaire

Pour éviter de devoir à chaque fois choisir les formats de date lors du lancement de GoAccess, vous pouvez modifier le fichier « goaccess.conf » dans /etc/. Les lignes ci-dessous se donnent pour des fichiers de log « simple » et par défaut, sans avoir des logs « combinés » ou modifiés par un logiciel / service tiers.
Si vos logs sont modifiés et ne respectent pas les standards, vous devrez modifier la ligne « log-format » pour la faire correspondre à votre type de logs.

Les lignes sont commentées par défaut : il faut enlever le « # » au niveau de ces lignes :

Il y a trois lignes à dé-commenter. Si vous oubliez une ligne, GoAccess ne fonctionnera pas. Vous pouvez enregistrer et fermer le fichier une fois les modifications effectuées. Ce n’est pas nécessaire de redémarrer votre serveur ni les services web / PHP ou autres.


III. Première utilisation

L’installation et la configuration est terminée, c’est maintenant le moment d’utiliser l’analyseur de logs !

Pour générer un premier rapport, dans votre terminal, vous devez saisir la commande suivante :

Explications

  • « goaccess -f » : Par cette commande, vous spécifiez l’emplacement de votre fichier de logs – INDISPENSABLE !
  • « -a » : cet attribut permet d’extraire toutes les informations des logs.

Au premier lancement de GoAccess, une fenêtre va s’afficher pour que vous puissiez choisir le format des logs, notamment au niveau de la date et de l’heure.
Pour une compréhension aisée et « normale », il faut choisir l’option « NCSA Combined Log Format » – appuyez sur la barre d’espace de votre clavier pour sélectionner l’option. Une croix devrait s’afficher dans le carré pour confirmer la sélection.

Lorsque l’option est choisie et validée, GoAccess va alors « parser » le fichier de log spécifié auparavant ; il s’agit d’une mise en forme du fichier, pour que toutes les informations soient corrélées et lisibles.
Selon le nombre de lignes dans le fichier, la quantité d’information et la puissance matérielle (disque dur / CPU / RAM) de votre serveur, le temps d’attente peut être plus ou moins long.

Enfin, lorsque le parsing est terminé, vous pouvez accéder au tableau de bord : vos logs s’affichent dans votre terminal !

Il est possible de générer des fichiers .html pour vos rapports via cette commande :

Avec votre navigateur, naviguez sur votre serveur web à la recherche du fichier .html et ouvez-le.
Vous devriez récupérer un fichier « formaté » et prêt à l’emploi comme celui-ci :

Plusieurs rubriques sont disponibles, vous affichant des informations diverses et variées.
Comme vous pouvez le constater, c’est tout de même beaucoup plus simple de lire dans ce fichier .html que le fichier de log « brut »… !


IV. Pour aller plus loin (exclusivité CZS)

J’ai ajouté GoAccess en plus de Google Analytics pour voir mes logs d’accès sur le serveur. Toutefois, il faut générer manuellement le fichier à la main pour pouvoir y accéder.

C’est pour cette raison que j’ai créé un script me permettant plusieurs choses – Vous pouvez réutiliser ces bouts de code, mais faites attention à bien le modifier en fonction de votre architecture.

Résumé de la solution à obtenir :

« One-Time »

  • Créer une redirection 301 / CNAME pour accéder de façon plus directe aux stats.
  • Protéger l’accès aux stats avec un fichier .htaccess/.htpasswd
  • Créer une tâche planifiée pour automatiser la procédure de création de log

« Récurent »

  • Déplacer tous les 1er de chaque mois le fichier de log généré par Nginx (dans mon cas) dans un dossier réservé aux stats
  • Générer le rapport en HTML avec GoAccess
  • Modifier la page « index.html » de mon dossier de stats pour afficher le nouveau fichier de stats (plus facile pour y accéder directement via le web)
  • Regarder les stats de temps à autre… 🙂

Les commandes préliminaires à passer pour préparer les fichiers :

PS : Notez que mon fichier « index.html » est extrêmement sommaire… ! Plus tard je l’embellirai, promis !


Voilà le script – Je l’ai commenté pour que vous puissiez le comprendre facilement.
Je suis un pure néophyte en scripting bash, il y a peut être des optimisations à effectuer… Mais dans tous les cas, cette version fonctionne !


Maintenant que le script est créé, il faut automatiser la tâche ; pour rappel, je souhaite créer ce rapport tous les débuts de mois.

Dans le fichier cron, je saisis cette ligne :

Tous les 1er du mois, le script « goaccess_html.sh » dans le dossier /root/ sera exécuté.
Ainsi, vous aurez chaque mois un nouveau fichier .html de stats des logs de votre serveur nginx et ce, tout en local !

Maintenant que le script est en place, il y a encore deux choses à effectuer :

  • Créer un lien web pour les stats
  • Sécuriser (simplement) l’accès au stats

La sécurisation mise en place sera très simple : j’utiliserai un fichier .htpasswd pour effectuer l’authentification.
Sachant que les droits sur le dossier concerné sont restreints, il n’y a pas de risque de piratage ou quoi que ce soit d’autre. De plus, il s’agit de fichiers .html : il n’y a aucun script qui tournent dans ces pages…

J’utilise l’utilitaire « htpasswd » du paquet « apache2-utils » pour créer cette authentification HTTP.

L’authentification est prête, il faut maintenant créer le vhost pour nginx !

J’ai créé une redirection sur mon nom de domaine pour accéder directement à mes stats. De plus, j’ai créé un fichier « vhost » tout simple pour nginx et me permettre d’accéder à cette « interface ».

Un « systemctl reload nginx.service » et mon « vhost » est en place !

Dès à présent, vous pouvez voir les stats en ligne via les fichiers .html générés automatiquement, ou alors passer par un shell pour accéder à GoAccess directement dans un terminal !

En voir plus

2 thoughts on “[Debian 8] GoAccess – Des logs web en temps réel et en cli”

    1. Sympa les exemples que tu as mis dans ton article, ça permet d’épurer en effet les logs et d’avoir l’essentiel – toujours utile pour ceux qui souhaitent avoir du minimal =)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Close