Contenu

Installation et configuration de GoAccess sur Debian 11.3

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

Prérequis

Le développeur propose un dépôt pour Debian. Afin de nous simplifier la vie nous allons l’utiliser. Les dépôts utilisant https, nous devons installer un paquet pour la prise en charge de se protocole par le gestionnaire de paquets APT. Nous devons aussi installer le paquet GPG. Pour cela, on tape la commande suivante :

1
# apt install apt-transport-https gpg

Maintenant, on procède à la configuration du dépôt. Pour cela, on tape les commandes suivantes :

1
2
# wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | tee /usr/share/keyrings/goaccess.gpg >/dev/null
# echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/goaccess.list

Installation de GoAccess

Nous pouvons procéder à l’installation de GoAccess. Voici les commandes :

1
2
# apt update
# apt install 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 paquet disponible sur le GitHub de Maxmind, qui fourni un binaire pour récupérer automatiquement la dernière version des bases de données. Pour cela, on tape les commandes suivantes :

1
2
# wget https://github.com/maxmind/geoipupdate/releases/download/v4.9.0/geoipupdate_4.9.0_linux_amd64.deb
# apt install geoipupdate_4.9.0_linux_amd64.deb

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
AccountId 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 la commande suivante :

1
# 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
# apt 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