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