Contenu

Installation et configuration de GoAccess sur Rocky Linux 8.6

GoAccess est un logiciel d’analyse de fichiers de log de site Web en temps réel

Prérequis

Il n’existe pas de package RPM pour Rocky Linux. Nous allons donc l’installer à partir des sources. Pour cela, nous devons installer les packages nécessaires à sa compilation, via la commande suivante :

1
# dnf install gcc make ncurses-devel openssl-devel

Nous allons aussi installer le package “libmaxminddb-devel” afin d’avoir le support des bases de données GeoIP, via la commande suivante :

1
# dnf install libmaxminddb-devel

Installation de GoAccess

Avant de pouvoir procéder à la compilation et l’installation de GoAccess, nous devons récupérer les sources et décompresser l’archive ainsi récupérer. Pour cela, on tape la commande suivante :

1
# curl https://tar.goaccess.io/goaccess-1.5.7.tar.gz --output goaccess-1.5.7.tar.gz && tar -xvzf goaccess-1.5.7.tar.gz

Maintenant que nous avons décompressé l’archive, nous allons procéder à la compilation de GoAccess. Voici les commandes :

1
2
3
4
# cd goaccess-1.5.7
# ./configure --enable-debug --enable-geoip=mmdb --enable-utf8 --sysconfdir=/etc/ --with-openssl
# make
# make install
  • enable-debug : On ajout le support du mode debug, que l’on pourra activer via l’option adéquate le moment venu, si nécessaire.
  • enable-geoip : On active le support d’une base GeoIP afin de connaitre la ville et le pays des visiteurs
  • enable-utf8 : On active le support UTF8
  • sysconfigdir : On spécifie le répertoire dans lequel sera stocké le fichier de configuration de GoAccess
  • with-openssl : On active le support SSL/TLS

Vous trouverez le fichier binaire dans le répertoire /usr/local/bin/ et le fichier de configuration dans /etc/goaccess/

Configuration de GeoIP

Nous allons créer les répertoires qui contiendront les bases de données GeoIP. Pour cela, on tape la commande suivante :

1
# mkdir -p /opt/goaccess/{data,geoip}

Maintenant, nous devons créer un compte gratuit sur le site Maxmind et générer une licence afin de pouvoir récupérer les bases de données GeoLite2 sous forme de fichiers mmdb

Une fois le compte créé et la licence généré, il faut récupérer les fichiers sur votre ordinateur et les transférer via un “scp” ou “rsync” sur votre serveur. Je ne détaille pas la commande. Il existe plein de tuto sur internet.

Une fois les fichiers transférer sur votre serveur, il faut les décompresser. Pour cela, on tape la commande suivante :

1
# tar -xvzf GeoLite2-City_20210202.tar.gz

On peut installer un package qui fourni un binaire pour récupérer automatiquement la dernière version des bases de données. Pour cela, on tape la commande suivante :

1
# dnf install geoipupdate

Afin de pouvoir faire fonctionner le script, nous devons indiquer un “UserId” et une clé de licence que vous trouver dans votre compte Maxmind. Il nous faut aussi indiquer le type de base données à utiliser ainsi que le répertoire dans lequel seront stockées ces dernières. Pour cela, on édite le fichier de configuration adéquat, via la commande suivante :

1
# vi /etc/GeoIP.conf

Voici les différents champs à remplir :

1
2
3
4
5
6
7
8
UserId XXXXXX
LicenseKey XXXXXXXXXXXX

EditionIDs GeoLite2-City

DatabaseDirectory /opt/goaccess/geopip/

LockFile /opt/goaccess/geopip/.geoipupdate.lock

Maintenant que nous avons renseigner les informations nécessaires à la mise des bases de données, nous pouvons créer le script. Pour cela, on tape la commande suivante :

1
# vi /usr/local/bin/update_geoip.sh

On y met le contenu suivant :

1
2
#!/bin/bash
geoipupdate -d /opt/goaccess/geoip/

On rend le script exécutable via la commande suivante :

1
# chmod +x /usr/local/bin/update_geoip.sh

Plutôt que d’utiliser une crontab pour l’exécution du script, nous allons utiliser les possibilités offertes par systemd. Nous allons maintenant commencer par créer un service systemd. Pour cela, on tape la commande suivante :

1
# /etc/systemd/system/update_geoip.service

On y met le contenu suivant :

1
2
3
4
5
6
7
8
[Unit]
Description=Update GeoIP City database

[Service]
Type=simple
ExecStart=/usr/local/bin/update_geoip.sh
RemainAfterExit=yes
StandardError=journal

Le service systemd précédemment créé sera lancé par un timer systemd qui sera lancer tous les lundi à 00:00. Pour cela, on tape la commande suivante :

1
# /etc/systemd/system/update_geoip.timer

On y met le contenu suivant :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[Unit]
Description=Run publish_posts.sh script

[Timer]
# Run each monday at 00:00
OnCalendar=weekly 
Persistent=true

[Install]
WantedBy=timers.target

Afin que systemd puissent prendre en compte le service et le timer que nous venons de créer, nous devons recharger la liste des services et timers disponibles. Pour cela, on tape la commande suivante :

1
systemctl daemon-reload

Nous pouvons maintenant activer et démarrer le timer précédemment créer, via les commandes suivantes :

1
2
# systemctl daemon-reload
# systemctl enable update_geoip.timer --now

On peut vérifier que le timer est actif, via la commande suivante :

1
# systemctl list-timers update_geoip.timer

Configuration de GoAccess

Nous allons maintenant procéder à la configuration de GoAccess. Pour cela, on tape la commande suivante :

1
# vi /etc/goaccess/goaccess.conf

Pour connaitre les options de configurations et savoir à quoi elles servent, je vous invite à vous référer à la documentation disponible ici. Moi, je vais indiqué les principales choses à modifier :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
log-format COMBINED
config-dialog true
real-time-html true
ws-url wss://www.mon-domaine.fr/stats/ws:80
log-file /var/log/nginx/www.mon-domaine.fr/access.log
output /var/www/html/stats/index.html
browsers-file /etc/goaccess/browsers.list
geoip-database /opt/goaccess/geoip/GeoLite2-City.mmdb
db-path /opt/goaccess/data/
persist true
restore true

Nous allons créer le répertoire qui contiendra la page HTML de GoAccess. Pour cela, on tape la commande suivante :

1
# mkdir -p /var/www/html/stats

Si vous avez déjà un fichier de log et que vous souhaitez importer les logs dans GoAccess, vous pouvez lancer cette commande :

1
# zcat --force /var/log/nginx/www.mon-domaine.fr/access.log-*.gz | goaccess

Laisser le tourner le process environ 1 minutes, voir plus en fonction de la taille des logs à importer, puis tuer le processus, afin de créer les différentes bases de données de GoAccess. Elles se trouvent dans le répertoire /opt/goaccess/data/

Afin de pouvoir lancer automatiquement GoAccess au démarrage du serveur, nous allons créer un service systemd. Pour cela, on tape la commande suivante :

1
# vi /etc/systemd/system/goaccess.service

On y copie le contenu suivant :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[Unit]
Description=GoAccess real-time web log analysis
After=network.target

[Service]
Type=simple

ExecStart=/usr/local/bin/goaccess --config-file=/etc/goaccess/goaccess.conf
ExecStop=/bin/kill goaccess

[Install]
WantedBy=multi-user.target

Nous pouvons maintenant activer et démarrer le service précédemment créer, via les commandes suivantes :

1
2
# systemctl daemon-reload
# systemctl enable goaccess --now

Installation de Nginx

Afin de pouvoir utiliser la version de GoAccess, nous allons installer le serveur web Nginx. Pour cela, on tape la commande suivante :

1
# dnf install nginx

Nous devons créer le fichier de configuration du VirtualHost de Nginx. Pour cela, on tape la commande suivante :

1
# vi /etc/nginx/conf.d/goaccess.conf

On y copie le contenu suivant :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
server {
    listen 80;
    server_name www.mon-domaine.fr;

    location /stats {
        root /var/www/html/;
    }

    location /stats/ws {
        proxy_pass http://127.0.0.1:7890/stats/ws;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Connection "keep-alive";
        proxy_pass_request_headers on;
    }

}

On vérifie que qu’il n’y a pas d’erreur dans la configuration de Nginx. Pur cela, on tape la commande suivante :

1
# nginx -t

Maintenant on active et on démarre le service Nginx, via la commande suivante :

1
# systemctl enable nginx --now

Maintenant, vous pouvez vous connecter sur votre site web pour voir les statistiques : http://www.mon-domaine.fr/stats/index.html

https://www.lecoindesdocs.fr/images/2022/05/25/GoAccess.png