Linux:Statistiques de site web avec Awstats

Un article de Djjnet.

Installer Awstat sous debian pour générer des pages de statistiques sur les visiteurs de vos sites web :
Nous installons awstats de manière à générer des pages statiques. La génération des statistiques se lance après la rotation des logs d'apache. Nous considérons dans cet exemple que les statistiques seront accessibles dans un sous-dossier de votre site web : votresite/statistiques/ et que le site est www.dj-j.net.

Un script /etc/awstats/genstats est lancé après la rotation des logs. Il lit les sites configurés dans /etc/awstats/sites.conf.
Le script va permettre de garder les statistiques de tous les mois.

Sommaire

Installation du package

apt-get install awstats liburi-perl

Configuration

Fichier de configuration d'apache :
Créer un fichier /etc/apache2/conf.d/awstats.conf
Y mettre la configuration suivante pour pouvoir accéder aux icons :

<Directory /usr/share/awstats/icon>
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Alias /awstats-icon/ /usr/share/awstats/icon/

Script de génération des statistiques

Créer un dossier pour les pages web générées :

mkdir /var/...cheminversvotresite/statistiques

Modifier la configuration de rotation des logs d'apache pour qu'ils soient journaliers, dans le fichier /etc/logrotate.d/apache2 changer weekly par daily.

Copier les scripts exemple permettant de traiter les statistiques plus facilement :

cp /usr/share/doc/awstats/examples/awstats_updateall.pl /etc/awstats/
cp /usr/share/doc/awstats/examples/awstats_buildstaticpages.pl /etc/awstats/


Créer un fichier /etc/awstats/genstats dont le contenu est ainsi :

#!/bin/bash
conf=/etc/awstats/sites.conf
mois=`date --date="1 day ago" +%m`
annee=`date --date="1 day ago" +%Y`
awoptionsmois="-month=${mois} -year=${annee} -builddate=${annee}${mois}"
awoptionsannee="-month=all -year=${annee} -builddate=${annee}"

nice perl /etc/awstats/awstats_updateall.pl now -awstatsprog=/usr/lib/cgi-bin/awstats.pl -configdir=/etc/awstats > /dev/null
for i in `grep ^site= $conf | cut -f 2 -d'='` do site=`echo $i | cut -f 1 -d';'` dossier=`echo $i | cut -f 2 -d';'` fichiermois=awstats.${site}.${annee}${mois}.html fichierannee=awstats.${site}.${annee}.html statsmois="" statsannee="" nice perl /etc/awstats/awstats_buildstaticpages.pl -update ${awoptionsmois} -config=${site} -awstatsprog=/usr/lib/cgi-bin/awstats.pl -dir=${dossier} > /dev/null nice perl /etc/awstats/awstats_buildstaticpages.pl -update ${awoptionsannee} -config=${site} -awstatsprog=/usr/lib/cgi-bin/awstats.pl -dir=${dossier} > /dev/null
ln -fs ${dossier}/${fichiermois} ${dossier}/defaut.html
       if [ -f ${dossier}/.listestatsmois ]; then
               statsmois=`grep ${fichiermois} ${dossier}/.listestatsmois`
       fi
       if [ -f ${dossier}/.listestatsannees ]; then
               statsannee=`grep ${fichierannee} ${dossier}/.listestatsannees`
       fi
       if [ ! -n "$statsmois"  ]; then
               echo ${mois}" "${annee}";"${fichiermois} >>${dossier}/.listestatsmois
       fi
       if [ ! -n "$statsannee"  ]; then
               echo "Année "${annee}";"${fichierannee} >>${dossier}/.listestatsannees
       fi
done


Rendre ce fichier exécutable :

chmod +x /etc/awstats/genstats

Créer un lien symbolique vers le script créé (il faut que le nom du lien soit choisi de façon à être lancé après logrotate) :

ln -s /etc/awstats/genstats /etc/cron.daily/logstats


Créer un dossier /etc/awstats/template.
Puis créer le fichier /etc/awstats/template/index.html avec pour contenu :

<html>
<frameset cols="100,*" noresize="noresize" frameborder="0">
   <frame name="menu" src="menu.php" title="menu" noresize="noresize" frameborder="0">
   <frame name="stats" src="defaut.html" title="stats">
</frameset>
</html>

Puis le fichier /etc/awstats/template/menu.php avec pour contenu :

<html>
<head>
<title>menu</menu>
</head>
<body>
<?php
       $lines=file("./.listestatsannees");
       foreach ($lines as $line_num => $line) {
               $affiche=strtok($line,";");
               $lien=strtok(";");
               echo '<a href="'.$lien.'" target="stats">'.$affiche.'</a>
'; } $lines=file("./.listestatsmois"); foreach ($lines as $line_num => $line) { $affiche=strtok($line,";"); $lien=strtok(";"); echo '<a href="'.$lien.'" target="stats">'.$affiche.'</a>
'; } ?> </body> </html>

Paramétrage d'un site

Ajouter dans le fichier /etc/awstats/sites.conf une ligne par site sous le modèle suivant :

site=adressesite;dossierstats

exemple :

site=www.dj-j.net;/var/www/www.dj-j.net/statistiques

Copier dans le dossier des statistiques les fichiers du dossier /etc/awstats/template.

Chaque site qui nécessite des statistiques possède son fichier de configuration situé dans le dossier /etc/awstats
Le fichier de configuration est nommé ainsi : awstats.nomdedomaine.conf dans notre cas : awstats.www.dj-j.net.conf

Déplacer le fichier de configuration exemple ainsi : mv /etc/awstats/awstats.conf /etc/awstats/awstats.www.dj-j.net.conf
Il ne doit pas y avoir de fichier non configuré dans le dossier /etc/awstats sinon il y aura une erreur à l'exécution du script plus loin.
Modification du fichier de configuration :
Le fichier exemple donne tous les paramètres disponibles, nous verrons que les principaux :
Fichier contenant les logs apache du site à analyser, il doit finir par 1 et n'est disponible qu'après une première rotation des log. Nous travaillons sur les logs de la veille afin d'éviter de perdre des données au moment de la rotation des logs :

LogFile="/var/log/apache2/www.dj-j.net-access_log.1";

Il est important d'avoir ses log au format combined pour avoir un maximum d'informations, dans la configuration d'apache de votre vhost, vous devez avoir une ligne de ce type :

CustomLog /var/log/apache2/www.dj-j.net-access_log combined

Indiquer 1 pour le format combined :

LogFormat=1

Déclarer le domaine du site web, il doit avoir la même valeur que pour le nom du fichier de configuration :

SiteDomain="www.dj-j.net";

Si vous avez des autres domaines qui pointent vers le même site :

HostAliases="www.dj-j.org www.dj-j.com";

Les données de travail d'awstats seront mises dans /var/lib/awstats/ :

DirData="/var/lib/awstats"

Le chemin vers les icons comme indiqué dans l'alias d'apache :

DirIcons="/awstats-icon"

Il peut être utile de ne pas comptabiliser les machines vous appartenant (ou les ip des outils de monitoring) pour ne pas fausser les statistiques :

SkipHosts="84.37.34.18 82.236.161.216 REGEX[^192\.168\.]"

Mettre la langue à français :

Lang="fr"

Vous pouvez changer le logo, le fichier image doit se situer dans /usr/share/awstats/icon/other/ :

Logo="logo-dj-j.net-150-56.png"
LogoLink="www.dj-j.net";

Pour ne pas avoir de problème d'affichage des accents, activer le plugin DecodeUTFKeys :

LoadPlugin="decodeutfkeys"