AWStats est un analyseur de log web, ftp et mail, écrit en Perl et disponible sous licence GPL. Il propose un rendu graphique des visites à vos serveurs au travers d'un interface web.

Il permet d'afficher le nombre de visites, de visiteurs uniques, de pages, de hits, de transferts, par domaine/pays, hôte, heure, navigateur, OS, … Les statistiques peuvent être actualisées via le navigateur grâce à un script CGI ou en ligne de commande.

awstats_logo4.png

Présentation

À la différence de Piwik ou Google Analytics, AwStats n'utilise pas un code javascript de tracking mais analyse directement les fichiers de logs des serveurs. Il doit donc être installé sur la même machine que le serveur web à analyser, à moins qu'un serveur de logs ne soit en place sur le réseau.

AwStats supporte les principaux serveurs Web (Apache, NGinx, Lighttpd, IIS), FTP (proftpd, vsftpd), et mails (Postfix, Sendmail, QMail). Il est également capable d'analyser les logs de serveurs proxy comme Squid, et de serveur de streaming comme FluMotion.

La procédure suivante est valide sur Debian Squeeze. Quelques adaptations seront nécessaire sur d'autres distributions GNU/Linux.


Installation

Toujours la même rengaine :

apt-get install awstats

Configuration

Le répertoire contenant les fichiers de configuration est "/etc/awstats". Le fichier par défaut, "/etc/awstats/awstats.conf" peut servir de modèle pour les serveurs à analyser. Il suffit donc de le copier avec le nom adéquat :

cp /etc/awstats/awstats.conf /etc/awstats/awstats.www.domain.tld.conf

Pensez bien à nommer correctement votre fichier de configuration. Si la variable SiteDomain (voir plus bas) a pour valeur "www.domain.tld", votre fichier de configuration doit être nommé "awstats.www.domain.tld.conf". Sans cela AwStats, qui est très tatillon et exige une configuration de base sans ambiguïté, refusera de mettre à jour les statistiques du site !

Voici les principales variables à renseigner :

La variable LogFile permet de spécifier le chemin du fichier de log à analyser :

LogFile="/var/log/apache2/www.domain.tld.access.log"

La variable LogType permet de spécifier le type du fichier de log (les logs d'un serveur web, ou d'un serveur de mails, etc). Les différentes valeurs possibles sont :

  • W pour un fichier de log HTTP. C'est la valeur par défaut.
  • S pour un fichier de log d'un serveur de streaming.
  • M pour un fichier de log mail.
  • F pour un fichier de log FTP.
LogType=W

La variable LogFormat permet de spécifier le format du fichier de log. Il s'agit de l'ordre d'affichage des informations dans le fichier. Les valeurs possibles sont :

  • 1 pour le format combiné d'Apache ou Lotus Notes/Domino.
  • 2 pour IIS ou ISA.
  • 3 pour le format Webstar.
  • 4 pour le format d'Apache ou Squid natif.

Le format 1 est fonctionnel par défaut avec une installation fraîche d'Apache2 sous Debian et Ubuntu.

Il est également possible d'indiquer manuellement l'ordre des informations, de cette façon :

LogFormat = 1
LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"

Les deux lignes ci-dessus sont équivalentes.

La variable SiteDomain permet de spécifier le nom principal du site à analyser. C'est une variable indispensable, en particulier sur un serveur hébergeant plusieurs sites.

SiteDomain="www.domain.tld"

La variable HostAliases permet de spécifier les alias au nom principal. C'est utile pour permettre à l'analyse de ne pas considérer comme referer extérieur une adresse interne.

HostAliases="localhost 127.0.0.1 www.domain.tld domain.tld"

Voilà pour les variables essentielles à renseigner pour paramétrer une analyse fonctionnelle. Il en existe beaucoup d'autres pour peaufiner votre configuration, et je vous invite à lire les commentaires du fichier de configuration par défaut, très riches et instructifs.


Utilisation

Pour mettre à jour les statistiques, il est préférable d'utiliser une commande faisant appel au script "awstats.pl" plutôt que d'autoriser les mises à jour via l'interface web. La commande suivante fait l'affaire :

/usr/lib/cgi-bin/awstats.pl -config=subdomain.domain.tld -update

Encore une fois, AWStats est très exigeant. Si le message d'erreur suivant apparaît, il vous faut vérifier les permissions de vos fichiers et répertoires de logs et de configuration, ainsi les variables de votre commande et de vos fichiers de configurations.

Error: SiteDomain parameter not defined in your config/domain file. You must edit it for using this version of AWStats.
Setup ('/etc/awstats/awstats.conf' file, web server or permissions) may be wrong.
Check config file, permissions and AWStats documentation (in 'docs' directory).

Si tout se passe bien, voilà ce qui vous attend :

Create/Update database for config "/etc/awstats/awstats.subdomain.domain.tld.conf" by AWStats version 6.95 (build 1.943)
From data in log file "/var/log/apache2/subdomain.domain.tld.access.log"...
Phase 1 : First bypass old records, searching new record...
Direct access after last parsed record (after line 32715)
Jumped lines in file: 32715
 Found 32715 already parsed records.
Parsed lines in file: 45
 Found 0 dropped records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 45 new qualified records.

Voilà votre page de statistiques mise à jour !


Consulter les statistiques

Par défaut, les statistiques seront visibles sur http://subdomain.domain.tld/cgi-bin/awstats.pl?config=vhost.domain.tld.

Les deux lignes suivantes dans le fichier de configuration du vhost d'Apache permettent :

  1. D'avoir droit aux jolies icônes de l'interface web
  2. De raccourcir l'URL vers http://subdomain.domain.tld/awstats.pl?config=vhost.domain.tld
Alias /awstats-icon "/usr/share/awstats/icon/"
ScriptAliasMatch ^/awstats\.pl$ /usr/lib/cgi-bin/awstats.pl

Il y a beaucoup de solutions pour, par exemple, utiliser un vhost particulier pour l'affichage des statistiques, rendre les URL de consultations plus courtes, etc. Les tutos ne manquent pas sur le web.


Création directe d'un fichier html

Vous pouvez également opter pour la création automatique d'un fichier statique contenant les statistiques d'un domaine. C'est une solution idéale pour les serveurs web comme NGinx, qui ne supportent pas aisément les CGI. Pour cela, voilà la commande :

/usr/lib/cgi-bin/awstats.pl -config=www.domain.tld -update -output > /chemin/vers/stats-www.domain.tld.html

En indiquant le chemin d'un répertoire accessible via un serveur web, vous pourrez consulter les statistiques à l'adresse http://www.domain.tld/stats-www.domain.tld.html.

Cette méthode ne créera pas les pages statiques de données complémentaires (les liens "Full list"). Pour cela il faut les créer avec la commande suivante :

/usr/share/awstats/tools/awstats_buildstaticpages.pl -dir=/chemin/vers/repertoire/ -update -config=www.domain.tld

Et mettre à jour la page principale avec l'option "-staticlinks" :

/usr/lib/cgi-bin/awstats.pl -staticlinks -config=www.domain.tld -update -output > /chemin/vers/repertoire/stats-www.domain.tld.html

Et vous voilà avec une page complète.

Logrotate et AwStats

LogRotate pourrait vous faire perdre quelques statistiques s'il fait tourner votre fichier de log entre deux passages d'AwStats. Pour éviter ce désagrément, il suffit d'indiquer dans le fichier de LogRotate de lancer AwStats avant de faire tourner le fichier, de cette façon :

sharedscripts
prerotate
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.domain.tld
endscript

Les quatre lignes ci-dessus sont à ajouter juste avant la ligne commençant par "postrotate".

Si vous avez plusieurs vhosts, il ne sera pas possible de multiplier les lignes comme dans l'exemple ci-dessous pour mettre à jour plusieurs domaines/sous-domaines :

sharedscripts
prerotate
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.domain.tld
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.otherdomain.tld
endscript

La solution consiste à utiliser un script pour lancer la mise à jour de chaque fichier de configuration présent dans le répertoire "/etc/awstas/". Et pour bien faire, AwStats fournit un tel script, que vous trouverez en "/usr/share/doc/awstats/examples/awstats_updateall.pl".
Les paramètres possibles sont :

  • -awstatsprog=/chemin/vers/awstats.pl
  • -configdir=/chemin/vers/fichiers/de/configuration
  • -excludeconf=nom des fichiers à exclure de la mise à jour

Par exemple :

sharedscripts
prerotate
/chemin/vers/awstats_updateall.pl -awstatsprog=/usr/lib/cgi-bin/awstats.pl -configdir=/etc/awstats now -excludeconf=awstats.www.onedomaine.tld.conf
endscript
Mise à jour des statistiques via Cron

Pour automatiser la procédure de mise à jour des statistiques, le plus simple est d'utiliser Cron. Le fichier /etc/cron.d/awstats se prête bien à cet usage. Ajoutez-y la ligne suivante :

0 * * * * www-data [ -x /usr/lib/cgi-bin/awstats.pl -a -f /etc/awstats/awstats.subdomain.domain.tld.conf -a -r /var/log/apache2/subdomain.domain.tld.access.log ] && /usr/lib/cgi-bin/awstats.pl -config=subdomain.domain.tld -update > /dev/null

Cette ligne vérifie d'abord que "/usr/lib/cgi-bin/awstats.pl" est exécutable, que "/etc/awstats/awstats.subdomain.domain.tld.conf" existe bien en tant que fichier régulier, et que "/var/log/apache2/subdomain.domain.tld.access.log" existe et est lisible, avant d'exécuter la commande de mise à jour, en envoyant les retours vers "/dev/null".

Vous pouvez bien sûr utiliser un script pour appeler "awstats_updateall.pl", ou utiliser directement votre CronTab plutôt que le fichier /etc/cron.d/awstats.

Il est également possible de spécifier les domaines à mettre à jour avec un petit script (trouvé ici) comme ci-dessous :

#!/bin/bash
# Chemin vers awstats.pl
AWPATH=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl 
 
# Liste des domaines separes par un espace
DOMAINS="domaine1.tld domaine2.tld domaine3.tld"
 
# On lance la commande pour chaque domaine de la liste
for d in ${DOMAINS}
do
   ${AWPATH} -update -config=${d}
done

Enfin, il est aussi possible de créer directement les fichiers statiques de statistiques avec les lignes suivantes :

4 * * * * www-data /usr/lib/cgi-bin/awstats.pl -config=www.domain.tld -update -output > /chemin/vers/repertoire/stats-www.domain.tld.html
5 * * * * www-data /usr/share/awstats/tools/awstats_buildstaticpages.pl -dir=/chemin/vers/repertoire/ -update -config=www.domain.tld

Analyser les logs de vsFTPd

Il faut utiliser un fichier awstats.ftp.domain.tld.conf semblable à celui ci-dessous (pensez bien sûr à adapter les variables) :

LogFile="/var/log/xferlog"
LogType=F
LogFormat="%time3 %other %host %bytesd %url %other %other %method %other %logname %other %code %other %other"
LogSeparator="\s"
SiteDomaine="ftp.domaine.tld"
HostAliases="localhost 127.0.0.1 ftp.domain.tld"
DirData="/var/www/awstats-data"
DirIcons="/awstats-icon"
DNSLookup=1
#AllowAccessFromWebToFollowingIPAddresses="1.2.3.4"
BuildReportFormat=html
NotPageList=""
LevelForBrowsersDetection=0
LevelForOSDetection=0
LevelForRefererAnalyze=0
LevelForRobotsDetection=0
LevelForWormsDetection=0
LevelForSearchEnginesDetection=0
ShowLinksOnUrl=0
ShowMenu=1
ShowSummary=UVHB
ShowMonthStats=UVHB
ShowDaysOfMonthStats=HB
ShowDaysOfWeekStats=HB
ShowHoursStats=HB
ShowDomainsStats=HB
ShowHostsStats=HBL
ShowAuthenticatedUsers=HBL
ShowRobotsStats=0
ShowEMailSenders=0
ShowEMailReceivers=0
ShowSessionsStats=1
ShowPagesStats=PBEX
ShowFileTypesStats=HB
ShowFileSizesStats=0
ShowBrowsersStats=0
ShowOSStats=0
ShowOriginStats=0
ShowKeyphrasesStats=0
ShowKeywordsStats=0
ShowMiscStats=0
ShowHTTPErrorsStats=0
ShowSMTPErrorsStats=0 
LoadPlugin="hashfiles"
Lang="auto"
DirLang="/usr/share/awstats/lang"
Include "/etc/awstats/awstats.conf.local"
Logo="awstats_logo6.png"
LogoLink="http://awstats.sourceforge.net"
BarWidth=260
BarHeight=90
StyleSheet=""

Le fonctionnement est similaire à m'analyse des logs d'un serveur web.


Activer GeoIP

Par défaut, AwStats utilise la résolution inverse des adresses IP pour déterminer le pays d'origine d'une connexion. C'est un procédure gourmande en ressource et très imprécise. Par exemple, les visiteurs ayant un abonnement chez Free.fr ont un nom d'hôte se terminant par "proxad.net", ce qui ne donne aucune information sur le pays...

Pour pallier à ce problème, AwStats dispose des plugins nommées "geoip" et "geoip_city_maxmind", qui utilise les informations fournies par le site Maxmind.com. Ces informations permettent de déterminer le pays et la ville d'origine d'une IP.

geoip.png

Ces deux modules requièrent la présence du module Perl Geo::IP.
Pour l'installer :

apt-get install libgeo-ip-perl

Il faut ensuite télécharger et décompresser les fichiers de données GeoIP.dat.gz et GeoLiteCity.dat.gz.
Idéalement, ces deux fichiers sont à placer dans le répertoire "/usr/share/awstats/plugins". Le petit script ci-dessous réalise cette tâche :

#!/bin/bash
LOCALPATH=/usr/share/awstats/plugins/

if [ -f "$LOCALPATHGeoIP.dat.gz" ]; then
rm -f "$LOCALPATHGeoIP.dat.gz"
fi
/usr/bin/wget -q --output-document="$LOCALPATHGeoIP.dat.gz" http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip -f "$LOCALPATH/GeoIP.dat.gz"

if [ -f "$LOCALPATHGeoLiteCity.dat.gz" ]; then
rm -f "$LOCALPATHGeoLiteCity.dat.gz"
fi
/usr/bin/wget -q --output-document="$LOCALPATHGeoLiteCity.dat.gz" http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gunzip -f "$LOCALPATHGeoLiteCity.dat.gz"

Reste enfin à activer les deux plugins dans chaque fichier de configuration de AwStats en y ajoutant les deux lignes suivantes :

LoadPlugin="geoip GEOIP_STANDARD /usr/share/awstats/plugins/GeoIP.dat"
LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /usr/share/awstats/plugins/GeoLiteCity.dat"

Pensez à utiliser le fichier "/etc/awstats/awstat.conf.local" si vous avez de nombreux vhosts.