Génération de statistiques de fréquentation avec awstats

modifié le : 13 septembre 2022,
par Guillaume Chéramy
 

awstats permet grâce à la lecture des fichiers de logs de générer des graphiques statistiques de fréquentation de serveurs web, ftp, mail.

Le mettre en place lors de l'installation d'un site ne pose pas de problèmes, les fichiers de logs sont analysés toutes les nuits et les graphiques sont mis à jour au fur et à mesure. Par contre générer les statistiques d'un site fonctionnant déjà depuis plusieurs mois peut être un peu plus complexe à mettre en place.

Tout mes vhosts Apache utilisent cronolog pour générer les logs, je me retrouve pour chaque site avec une arborescence de logs comme celle-ci :

apache/
|-- 2009
|   |-- 47
|   |   |-- 25-access.log
|   |   |-- 25-error.log
|   |   |-- 26-access.log
|   |   |-- 26-error.log
|   |   |-- 27-access.log
|   |   |-- 27-error.log
|   |   |-- 28-access.log
|   |   |-- 28-error.log
|   |   |-- 29-access.log
|   |   `-- 29-error.log
...

On retrouve un répertoire pour l'année, puis un sous répertoire par semaine (commençant à 0 pour la première semaine de l'année) et un fichier de log d'accès et un fichier de log d'erreur par jour. A partir de la on va pouvoir récupérer les fichiers de logs d'accès de chaque jour de chaque mois pour générer nos graphiques.

Installation d'awstats

Mise en place

On télécharge la dernière version, la 6.95 à l'heure actuelle (06 Juin 2010) :

# cd /opt
# wget http://prdownloads.sourceforge.net/awstats/awstats-6.95.tar.gz
# tar xvzf awstats-6.95.tar.gz ; rm awstats-6.95.tar.gz
# ln -s /opt/awstats-6.95 /opt/awstats

 

On crée deux répertoires nécessaires au fonctionnement d'awstats :

# mkdir /etc/awstats
# mkdir /var/lib/awstats

 

On crée un répertoire dans lequel les fichiers html seront stockés

# mkdir /var/www/stats
# mkdir /var/www/stats/url
# cp -r /opt/awstats/wwwroot/icon /var/www/stats/

Fichier de configuration

On va créer un fichier de configuration par site, téléchargez (il vous faut subversion bien sur) et adaptez le fichier suivant :

# cd /etc/awstats
# echo 't' | svn --username anonymous --password anonymous export https://subversion
.cheramy.name/admin/awstats/etc/awstats.url.conf

Remplacer url par l'url principale de votre vhost.

Dans le fichier modifiez les lignes :

LogFile="/var/www/url/var/log/apache/%YYYY-24/%Wy-24/%DD-24-access.log"
SiteDomain="url"
HostAliases="url alt_url1 alt_url2"

On remplace "url" par l'url principale du site et alt_urln par les noms alternatifs du vhost.

 

Générer les statistiques des mois passés

Générer un fichier de log par mois

On va aller dans le répertoire var/log/apache/2010 et générer un fichier de logs d'accès pour le mois de janvier et ainsi de suite, pour janvier les semaines sont 00, 01, 02, 03, 04, on recopie donc les fichiers 01-access.log, 02-access.log ... 31-access.log dans un répertoire temporaire et on concatène tout ces fichiers :

# for ((x=1;x<=31;x+=1)); do /bin/cat `/usr/bin/printf "%02d" $x`-access.log 
>> 32-access.log; done

 

On va pouvoir maintenant générer le fichier de statistiques :

# rm /var/lib/awstats/awstats012010.url.txt
# /usr/bin/perl /opt/awstats/wwwroot/cgi-bin/awstats.pl -config=url -update 
-LogFile=./32-access.log

Ce qui va nous générer un fichier awstats012010.url.txt.

 

On génère maintenant les fichiers html :

# /usr/bin/perl /opt/awstats/tools/awstats_buildstaticpages.pl -config=url 
-update -lang=fr -awstatsprog=/opt/awstats/wwwroot/cgi-bin/awstats.pl -dir=
/var/www/stats/url/ -builddate=
'01' -month='01' -year='2010'

Cette commande génère les fichiers awstats.url.janvier.html

 

Il faut enfin générer un fichier d'index pour avoir une page d'accueil :

# cd /var/www/stats/url/
# echo 't' | svn --username anonymous --password anonymous export https://subversion
.cheramy.name/admin/awstats/www/awstats.index.html

Remplacer url par l'url de votre site et nom_site par le nom de votre site.

 

Continuez pour les mois suivants, attention de bien supprimer les fichiers dans /var/lib/awstats qui ne concernent pas les mois déjà fait, par exemple en mars supprimer les fichiers awstats03* awstats06*.

 

Modifier le fichier de vhosts

Rajouter les lignes suivantes dans votre vhost :

    Alias /stats "/var/www/stats/url"
     <Directory "/var/www/stats/url">
        AuthType Basic
        AuthName "Stats site"
        AuthUserFile /etc/apache2/users
        Require valid-user
        Options Indexes MultiViews
        DirectoryIndex awstats.index.html
        AllowOverride None
        Order allow,deny
        allow from all
     </Directory>
     Alias /icon "/var/www/stats/icon"
     <Directory "/var/www/stats/icon">
        #Options None
        Options Indexes MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

 

Générer les statistiques toutes les nuits

Il faut maintenant ajouter les scripts dans la crontab de façon à ce que awstats analyse toutes les nuits les logs de la journée précédente :

23 4 * * * nice -n 19 /usr/bin/perl /opt/awstats/wwwroot/cgi-bin/awstats.pl 
-config=url -update|grep -i error|grep -v errors404
32 4 * * * nice -n 19 /usr/bin/perl /opt/awstats/tools/awstats_buildstaticpages.pl
-config=url -update -lang=fr -diricons=/icon  -awstatsprog=/opt/awstats/wwwroot/
cgi-bin/awstats.pl -dir=/var/www/stats/url -builddate=%MM|grep -i error|grep -v errors404