Devinez qui vient consulter votre blog ?🔗
Introduction
Quand vous montez un site web, qui plus est un blog, il est bon de savoir qui vient le consulter. Ça vous permet un minimum de rétroaction: si personne ne vient vous consulter, il y a un problème souvent d'ordre technique (ou social si vous n'avez pas d'amis). Au contraire, il peut arriver que des personnes totalement inconnues à votre cercle proche viennent se connecter à votre site, par exemple, les netbots des moteurs de recherche (voir mon précédent billet sur le sujet).Et puis, c'est pas merveilleux de voir que votre production (qui vous coute tellement de temps) est partagée et diffusée ? Autant avoir des chiffres pour se satisfaire et avoir une idée de sa notoriété.
Dans le monde du libre, le serveur Web est souvent Apache, car il est en règle général assez bien packagé par les distributions. Ce serveur produit des logs par défaut qui permettent à minima (out-of-the-box) de savoir quelles sont les adresses IP qui se sont connecté à telle page. Dans les logs sont également présents les erreurs d'accès. Apache produit par défaut une assez bonne quantité de logs qu'il s'agit d'exploiter. Ces fichiers sont en règle générale situés dans /var/log/apache2
. On peut bien évidemment les lire en direct mais, si vous vous prêtez à l'exercice, vous verrez que c'est très pénible. L'informatique est faite pour régler les problèmes de capacité de cerveaux des utilisateurs, autant l'utiliser… Ce qu'il nous faut: un bon outil d'analyse de logs Apache
Quand on regarde sur les différents paquets Debian, on constate qu'il n'y a guère que Awstats qui est utilisable et reconnu (et aussi mis à jour). La suite du billet sera donc constituée par quelques infos sur l'installation de ce logiciel libre…
Awstats, késaco ?
- C'est un outil d'analyse de logs pour serveur Web (Apache/IIS/lighthttpd/etc.)
- Il s'agit d'un script Perl.
- Qui produit des fichiers HTML et des images pour affichage dans un navigateur web.
- On peut l'utiliser directement en ligne de commande.
- Ou bien l'intégrer au serveur web via une exécution CGI afin de visualiser les statistiques du serveur directement depuis le serveur.
- Le paquet Debian d'Awstats est en version 6.7.
- Il supporte de nombreuses langues.
Quelle utilisation d'Awstats ?
Comme je suis paranoïaque, j'estime que mettre à disposition une analyse de logs via le serveur web est risqué. En effet, qui me dit qu'Awstats est exempt de bugs et de failles de sécurité (il y en a eu dans le passé). De plus, mon serveur Web est une machine limitée en capacité de traitement (1Ghz et peu de RAM). Inutile donc d'en rajouter.
Au contraire, je dispose d'une vraie puissance de calcul sur ma machine de bureau qui est bien plus puissante (mais plus gourmande). De plus, pour consulter ces stats, je vais avoir besoin d'un navigateur web qui sera, de toute manière, lancé depuis cette machine de bureau. Autant lui faire faire la totalité du traitement, c'est plus efficace.
Donc, l'objectif est d'installer Awstats sur ma station de travail, de récupérer les logs du serveur via une connexion SSH ou via rsync, de faire le traitement puis de lire les résultats. Conséquence, j'estime que 90% du job est à faire sur la station de travail !
Installation et configuration d'Awstats sous Debian Lenny
Installation
L'installation du paquet ne pose aucun problème: aptitude install awstats
Encore une fois, la force d'une distribution réside dans le travail de ses contributeurs et dans sa facilité d'utilisation (au sens administration système).
Toutefois, il me semble inopportun de laisser le paquet en tant que tel. En effet, il est orienté serveur et notre utilisation est complètement différente: nous ne voulons générer des stats qu'à un moment particulier et non en continu à disposition de tous. Par défaut, Awstats rafraichi ses stats toutes les 10 minutes. Ceci est indiqué dans le fichier /etc/cron.d/awstats. Un simple: rm /etc/cron.d/awstats
suffit à nous épargner des traitements inutiles.
Fonctionnement d'awstats
Sous Debian, voici comment Awstats est installé et comment il fonctionne:
- L'exécutable qui génère des rapports est situé dans:
/usr/lib/cgi-bin/awstats.pl
. - Le fichier de configuration est situé dans:
/etc/awstats
ou dans le répertoire du script awstats.pl. - Awstats s'exécute en deux temps: le premier génère les informations de base de données, le second génère un rapport HTML.
- Par défaut, /usr/lib/cgi-bin/awstats.pl -config=monserveur lance awstats en utilisant le fichier de conf
/etc/awstats/awstats.monserveur.conf
.
Donc lancer la commande suivante: /usr/lib/cgi-bin/awstats.pl -Logfile=./access.log-config=mon.serveur.org
aura pour effet de lancer le traitement d'extraction des informations de database et la commande: /usr/lib/cgi-bin/awstats.pl -Logfile=./access.log -config=mon.serveur.org -output -static-links > ./awstats.html
générera une page HTML permettant de visualiser les résultats du log.
Configuration
Voici quelques directives de mon fichier de configuration:
DirData="~/awstats" PurgeLogFile=1 LevelForWormsDetection=2 Lang="fr" DetailedReportsOnNewWindows=0
Ce fichier de configuration est placé dans mon espace utilisateur (pour la suite, je le nomme awstats.conf).
Le script awstats_buildstaticpages.pl
Ce script permet de construire toutes les pages HTML complètes du rapport d'Awstats. En une seule commande, on peut donc générer toute l'information qui nous est nécessaire sans trop se casser la tête pendant des heures… Un exemple d'utilisation:
/usr/share/doc/awstats/examples/awstats/buildstaticpages.pl \ -config=mon.serveur.org \ -dir=./awstats/ \ -awstatsprog=/usr/lib/cgi-bin/awstats.pl
Il suffit ensuite de prendre un navigateur Web et d'aller ouvrir le fichier./awstats/awstats.mon.serveur.org.html
.
Récupérer les informations du serveur Web
Ici, c'est simple, on utilise scp
pour ça. Comme de surcroit, on va scripter tout ça, il nous reste à pouvoir nous connecter sans mot de passe ! C'est possible en utilisant une configuration de SSH pour utiliser l'authentification par clef. Je ne vais pas m'appesantir sur ce sujet, il y a plein d'exemples sur le Web. Voici les commandes pour y arriver:
- Sur le serveur Web, vérifier que l'option AuthorizedKeys est décommentée dans
/etc/ssh/sshd\_config
et qu'elle vaut%h/.ssh/autorized\_key
. - Redémarrer le service SSH:
/etc/init.d/ssh restart
. - Créer le répertoire /home/user/.ssh/:
mkdir /home/user/.ssh
- Génération de la clef sur le client (la station de travail):
ssh-keygen -t dsa
. - Copier la clef au bon endroit:
scp user@serveur:/home/user/.ssh/authorized\_keys
Maintenant, un simple ssh user@serveur vous permet d'accéder à un shell distant sans mot de passe !
Automatiser le traitement: Bash vient à notre aide
Nous avons tous les éléments de la chaine:
- L'application est installée et configurée,
- Nous pouvons récupérer les logs du serveur
- Nous savons quelles commandes lancer pour avoir nos informations.
Reste à automatiser cette chaine… en mode utilisateur, sans utiliser le compte root (parce que pour le principe, c'est une application à destination de moi). Pour cela:
- Créer un répertoire ~/awstats:
mkdir \~/awstats
. - Créer un lien symbolique du script awstats pour prendre en comptenotre fichier de configuration:
ln -s /usr/lib/cgi-bin/awstats.pl\~/awstats/awstats.pl.
* Créer un fichier de configuration bien nommé:cp/etc/awstats/awstats.conf \~/awstats/awstats.mon.serveur.org.conf
. - Editer ce fichier avec les éléments de configuration suivants:
LogFile="/tmp/awstats/access.log" SiteDomain="mon.serveur.org" DirData="/tmp/awstats" PurgeLogFile=1 LevelForWormsDetection=2 Lang="fr"
Un petit script Bash qu'on peut lancer via un lanceur sous Gnome ou KDE (ou XFCE ou Fluxbox ou etc…):
# Script d'analyse de statistiques Web # C'est du GPL ! AWSTATS=/usr/lib/cgi-bin/awstats.pl AWSTATS_DATA_DIR=/tmp/awstats CONFIG=mon.serveur.org AWSTATS_REPORT_DIR=~/awstats BROWSER=iceweasel DISTANT_SERVER=mon.serveur.org DISTANT_USER=user DISTANT_TARGET_FILE=/var/log/apache2 LOGFILENAME=access.log AWSTATS_BUILD=/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl # Création du répertoire de données if ! [ -d $AWSTATS_DATA_DIR ] then mkdir $AWSTATS_DATA_DIR fi # Création du répertoire cible if ! [ -d $AWSTATS_REPORT_DIR ] then mkdir $AWSTATS_REPORT_DIR fi # Récupération des informations depuis le serveur scp $DISTANT_USER@$DISTANT_SERVER:$DISTANT_TARGET_FILE/$LOGFILENAME $AWSTATS_DATA_DIR 1>/dev/null 2>&1 # Lancement de l'analyse $AWSTATS -config=$CONFIG -Logfile=$AWSTATS_DATA_DIR/$LOGFILENAME 1>/dev/null 2>&1 # Génération des rapports: $AWSTATS_BUILD -config=$CONFIG -dir=$AWSTATS_REPORT_DIR -awstatsprog=$AWSTATS 1>/dev/null 2>&1 # Nettoyage: # Des données d'extration: if [ -e $AWSTATS_DATA_DIR ] then rm -r $AWSTATS_DATA_DIR fi # Du fichier de log # Ouverture du navigateur Web pour affichage: $BROWSER $AWSTATS_REPORT_DIR/awstats.$CONFIG.html # End of job !
Quelques modifications sur le serveur Web ?
Ben même pas ! Par défaut, Apache enregistre des informations de logs en mode normal qui cache les informations liées au navigateur web. Pour obtenir ces informations, il suffit d'enregistrer les logs au format combined
. Sous Debian , le log par défaut de Apache est en combined… Moi je dis, c'est quand même bien fait !
Références:
- http://packages.debian.org/lenny/awstats Page du paquet Debian pour Lenny
- http://awstats.sourceforge.net/docs/index.html Documentation de référence pour Awstats
- http://www.sshkeychain.org/mirrors/SSH-with-Keys-HOWTO/SSH-with-Keys-HOWTO-4.html Petite doc pour SSH sans password