Installation

apt-get install webalizer

Cette commande installe le binaire webalizer mais ajoute aussi le fichier /etc/cron.daily/webalizer qui permet de mettre les graphiques à jour quotidiennement.

Configuration pour un simple fichier

Le fichier de configuration par défaut se trouve ici

/etc/webalizer.conf

Spécifier le fichier de log à utiliser

LogFile         /var/log/squid/access.log

Le dossier de destination

OutputDir       /var/www/webalizer

Configurer plusieurs virtual hosts sur une machine

Fichier de configuration

Les différents fichiers de configuration propre à chaque virtual host doivent se trouver dans /etc/webalizer/. Le fichier doit être nommer en utilisant son Hostname et terminé par l'extension .conf. Chaque fichier de configuration doit au moins avoir les directives suivantes de définies: HostName (domain), OutputDir et LogFile. Il est possible de définir tous les autres paramètres tel que HideReferrer, HideSite...

Dans l'exemple ci-dessous, webalizer utilisera 3 fichiers de configurations (apache, apachessl et squid).

debian:/etc/webalizer# ll
total 68
-rw-rr 1 root root   127 2007-03-15 18:22 apache.conf
-rw-rr 1 root root   142 2007-03-15 18:43 apachessl.conf
-rw-rr 1 root root   148 2007-03-15 18:25 squid.conf

Voici l'exemple d'un fichier de configuration contenant le strict minimum:

debian:/etc/webalizer# cat apache.conf
LogFile /var/log/apache2/access.log
OutputDir /var/www/webalizer/apache
ReportTitle Statistiques pour Pache
HostName apache

Selon vos OutputDir, il faut penser à créer le dossier de destination.

Mise à jour des statistiques

Si vous souhaitez mettre vos statistiques à jour, vous pouvez utiliser la commande suivante:

for i in /etc/webalizer/*.conf; do webalizer -c $i; done

Sinon, le fichier /etc/cron.daily/webalizer créé automatiquement lors de l'install, cherche les fichiers *.conf situés dans le dossier /etc/webalizer quotidiennement et mets à jour les statistiques.

Centraliser les statistiques de plusieurs serveurs sur une même machine

Dans le cas suivant nous récupérons quotidiennement les fichiers situés sur différents serveurs avant de les analyser avec webalizer. Ainsi tous les graphiques de l'ensemble de mon parc sont centralisés.

Fichiers de configurations

La définition d'un virtual host est maintenant défini dans 2 fichiers de configuration différents, prenons l'exemple d'un serveur web1, service http :

  • web1.http.conf : contient les directives propre à webalizer.
  • web1.http.conf.remote : contient les informations relatives à la récupération des logs sur le serveur distant. Ce fichier s'appelle obligatoirement HostName.conf.remote.

Voici mes fichiers:

# cat web1.http.conf
LogFile /etc/webalizer/web1.http.log

OutputDir /var/www/webalizer/web1.http
ReportTitle Statistiques pour web1 - HTTP

HostName web1.http
# cat web1.http.conf.remote
RemoteLogFile /var/log/apache2/access.log

RemoteHostName web1

Mise à jour de webalizer

Il faut maintenant indiquer à webalizer comment récupérer ces données et comment les traiter. Par défaut, le script situé dans cron.daily cherche dans le dossier /etc/webalizer/ tous les fichiers terminant par .conf et passe ensuite ces fichiers à webalizer.

Il faut maintenant modifier ce script et lui indiquer d'aller chercher les informations de connexion au serveur distant dans le fichier *.conf.remote.: nom de la machine ou adresse ip et nom du fichier de log définit dans la directives RemoteLogFile. Le fichier est alors récuperer en scp le fichier à l'aide d'une commande du genre:

/usr/bin/scp root@$web1:/var/log/apache2/access.log ./web1.http.log

Les modifications interviennent sur le fichier /etc/cron.daily/webalizer:

...
# Boucle à la recherche de tous les fichiers *.conf
for i in ${WEBALIZER_CONFDIR}/*.conf; do
 LOGFILE=`awk '$1 ~ /^LogFile$/ {print $2}' $i`;
 # On récupere la destination du fichier de log dans le fichier HostName.conf.remote.
 REMOTELOGFILE=`awk '$1 ~ /^RemoteLogFile$/ {print $2}' $i.remote`;
 
 HOSTNAME=`awk '$1 ~ /^HostName$/ {print $2}' $i`;
 REMOTEHOSTNAME=`awk '$1 ~ /^RemoteHostName$/ {print $2}' $i.remote`;
 
 # On récuperer le fichier de configuration en scp.
 /usr/bin/scp root@${REMOTEHOSTNAME}:${REMOTELOGFILE} ./${HOSTNAME}.log
...

Attention : pour la récupération automatique en scp il faut penser à mettre en place des clés ssh.

Liens