Derrière ce titre qui veut tout et rien dire, un besoin réel.
Récemment, sur un site web avec une audience non négligeable (sans être démentielle : 70 000 hits hebdo), j’ai eu à mettre en place un outil de statistiques vite fait bien fait. J’ai choisi webalizer car je connaissais et car ça se met en place en 3 minutes et que ça sort mine de rien déjà pas mal d’infos (volume de hits, pays d’origine, mots-clefs, référant etc). Et c’est mieux que « pas de stats du tout » dans un premier temps.
Il y avait deux trucs tout bêtes dans l’histoire : j’avais un an de logs non « synthétisés » par webalizer. Il a donc fallu les faire passer dans webalizer pour rattraper l’historique. Et deuxièmement, c’est à ce moment là que j’ai vu que le HostnameLookups
était à Off dans la conf /etc/apache2/apache2.conf
. Donc les logs ne contenaient que les IP, pas les hostname. Donc pas de statistiques par pays dans Webalizer. Dommage pour une boîte internationale qui veut voir un peu où en est sa notoriété sur la planète…
J’ai donc remédié à tout ça. Cet article présente donc l’installation de la conf rapide de Webalizer (et Apache2 en conséquence) et donne une ligne de commande pour récupérer l’année d’historique (apache2 garde par défaut 52 fichiers de logs en rotation hebdo) et enfin, le plus marrant, mouliner sur les logs pour retrouver les hostnames correspondants aux IP… (en espérant que mon hébergeur ne me flingue pas en voyant le nombre de requête DNS que je crache en ce moment même 😀 Je lui ai posé la question, ne négligez pas ce point, ce serait bête de se faire des ennemis)
Installation et conf Webalizer
Sous Debian, un simple :
aptitude install webalizer
L’outil de conf pose 2/3 questions assez simples à répondre, comme votre nom de serveur web, le nom du fichier « logrotaté », typiquement /var/log/apache2/access.log.1
(et pas /var/log/apache2/access.log
).
De toute manière, on va repasser sur le fichier de conf tout de suite après l’install. Sachez que « webalizer » fait ses calculs via la cron.daily
, au petit matin (par défaut sur Debian) quand vous dormez.
Je mets 2/3 commentaires sur certains paramètres ; voyons ce que donne egrep -v "^$|^#" /etc/webalizer/webalizer.conf
:
LogFile /var/log/apache2/access.log.1 OutputDir /var/www/webalizer # A vous de voir. Pensez à un htaccess si besoin... Incremental yes ReportTitle Statistiques d'utilisation de mon serveur web HostName toto.com TopReferrers 50 TopAgents 30 HideSite *toto HideSite *toto.com HideReferrer www.toto.com/ # sinon vous passez votre temps à votre les mouvements interne au site HideReferrer toto.com/ # idem HideReferrer Direct Request HideURL *.gif HideURL *.GIF HideURL *.jpg HideURL *.JPG HideURL *.ra HideURL *.png GroupURL /cgi-bin/* GroupAgent MSIE HideAgent MSIE* GroupAgent Mozilla HideAgent Mozilla* GroupAgent Lynx HideAgent Lynx* GroupAgent Konqueror HideAgent Konqueror* GroupAgent Opera HideAgent Opera* IgnoreSite localhost # je tunnele l'accès à mon propre site et je suis un gros visiteur de mon propre site IgnoreReferrer localhost # idem MangleAgents 4
Dans la conf Apache2 /etc/apache2/apache2.conf
, pensez à activer le paramètre HostnameLookups
si vous voulez avoir un semblant de trace des pays rendant visite à votre site web (et rechargez Apache).
Chargement de l’historique
Il faut décompresser les logs Apache puis les importer un à un dans webalizer.Simple.
En considérant que vous avez copié vos fichiers access.log.*.gz dans /tmp, vous faites ceci :
for i in access*gz do gunzip $i done
Et ensuite, lancement de l’import :
for i in `./seq_reverse.py` do webalizer access.log.$i done
Je ne sais plus si on peut faire un seq
sortant les chiffres de 1 à 52 dans l’ordre inverse, alors j’ai pondu un script python pour le faire.
A la fin, si votre répertoire /var/www/webalizer
est blindé de fichiers, c’est bon. Vous pouvez voir vos stats sur l’année écoulée.
Retrouver les hostnames
C’est la partie amusante (et bourrin). Si vous n’aviez pas les hostnames des IP visitant votre serveur web, vos logs Apache ressemblait à ça :
86.x.y.190 - - [15/Mar/2007:06:25:25 +0100] "GET /favicon.ico HTTP/1.1" 200 2238 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.2) Gecko/20070219 Firefox/2.0.0.2"
Si vous aviez activé le lookup dans Apache, vos logs ressemblent partiellement à ce qu’il y a ci-dessus (pour les serveurs n’ayant pas de nom) et généralement, ils contiennent plutôt ça :
truc.machin.com - - [02/Mar/2008:06:26:27 +0100] "GET / HTTP/1.1" 200 27488 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
L’idée est de retrouver les noms lorsque vous n’avez que les IP. J’ai écrit un script Python pour ça (excusez-moi, je débute en Python). Script Python pour retrouver les hostnames à partir des IP d’un log Apache2
Et donc à la fin, vous envoyez la purée :
for i in /tmp/access.log.* do ./retrouve_hostname.py $i done
Attention, c’est bourrin, faites le sur un petit fichier d’abord. Le script vous génère un fichier $i.new
, à vous de vider vos statistiques webalizer (rm /var/www/webalizer/*
) ensuite et de relancer la moulinette d’import sur ces nouveaux fichiers.
walaaaa, c’est tout pour aujourd’hui.
Voilà pour faire une séquence de 52 à 1 :
seq 1 52 | sort -rn
c’est un peu plus simple…
ou encore :
seq 52 -1 1
Webalizer fonctionne sur windows ?
Salut,
Aucune idée : http://www.webalizer.com/download.html
Je dirais non, sauf à le recompiler en CYGWIN ; et du moment qu’il s’agit bien d’attaquer des logs apache sur ce windows.