Awstats – Parser un log externe

Le titre peut sembler bizarre c’est pour cela que je vais l’expliquer. Mais tout d’abord je me dois de commencer par une petite explication de ce qu’est awstats :

AWStats is a free powerful and featureful tool that generates advanced web, streaming, ftp or mail server statistics, graphically. This log analyzer works as a CGI or from command line and shows you all possible information your log contains, in few graphical web pages. It uses a partial information file to be able to process large log files, often and quickly. It can analyze log files from all major server tools like Apache log files (NCSA combined/XLF/ELF log format or common/CLF log format), WebStar, IIS (W3C log format) and a lot of other web, proxy, wap, streaming servers, mail servers and some ftp servers. Source: site officiel d’awstats
En français et en un rien résumé ça donne : c’est un outil puissant pour réaliser des statistiques (graphiques) d’accès a des serveurs comme web, ftp, mail ou encore streaming. Il fonctionne en ligne de commande mais aussi en CGI sur votre serveur. Et il est capable de parser les logs les plus courants comme apache, IIS, et bcp d’autres.

Il faut savoir que l’outil est destiné à être installé une bonne fois pour toute dans le système et n’est pas réellement prévu juste pour parser une fois de temps à autre un log externe qui viendrait d’on ne sait trop où.

Situation initiale

Dans mon cas la situation initiale est assez simple, et qui me semble assez courante :

  • serveur apache sur un serveur dédié;
  • multi-domaines (domaines et sous domaines confondus);
  • je voudrais des stats pour tout le serveur d’un coup et pas par (sous) domaines;
  • serveur avec des droits hyper restreint (raison de sécurité) : Tu veux des accès root ?! Va te …

Awstats a été installé automatiquement pour chacun des domaines et chaque sous domaine.  Mais comme je l’ai dit ci-dessus, c’est pas vraiment ce que je veux.

Au boulot

Récupérer les logs sur le serveur

Je sous-entends que vous avez une connexion SSH vers ce serveur, et que vous avez les droits en lecture sur vos logs (souvent il vous est possible de les récupérer par ftp).

scp login@server: /chemin/vers/les/log/*.log .
Commande de copie sur SSH
Login SSH
Ip ou (dyn)dns vers votre serveur
Le chemin où les logs sont disponibles à distance :

N’oubliez pas qu’un chemin avec plusieurs wildcards du genre ‘/www/*/logs/*-access.log’ est tout à fait autorisé.
Cela se trouve être bien utile dans le cas où chaque sous domaine est “cloisonné” (y compris les logs) dans son propre répertoire.

De nombreux logs (je conserve l'anonymat de mes clients)

Et pour finir l’endroit où on les copie en local (‘.’ : répertoire courant dans ce cas)

Les rassembler/merger ensemble

On pourrait pour les rassembler simplement penser à l’utilitaire “cat” mais c’est sans tenir compte du fait que dans les logs il y un timestamp pour chaque requête et qu’elles doivent être retriées après.

Oui bien sur on a “sort“, etc. et cela n’est surement pas impossible mais on a plus simple :

awstats/tools/logresolvemerge.pl *-access.log > all.log

Le dossier awstats ci dessus étant la référence au dossier que vous avez décompressé de l’archive provenant d’ici.  Dans le dossier vous avez une beau petit script qui s’occupe de merger les différents logs ensemble et le sortir sur le stdout.
C’est pourquoi je redirige la sortie du programme dans un fichier nommé ici all.log.

Créer notre ‘faux’ fichier de config

On doit maintenant créer un fichier de configuration afin d’utiliser ce fameux log crée ci-dessus. Et cela se fait grâce à :

awstats/tools/ awstats_configure.pl

On a à répondre à une série de question maintenant :

  1. On se trouve dans un dossier qui n’est pas standard. Voulez vous continuer la configuration ? OUI. Dans notre cas une installation persistante est justement ce que l’on désire éviter.
  2. Il essaie de nous demander où se trouve notre serveur pour trouver nos logs. On n’a peut être meme pas de serveur installé. Réponse : none.
  3. Voulez vous créer un nouveau fichier de configuration ? OUI. C’est pour cela qu’on a lancé le script.
  4. Nom de votre ‘config’ ? all. C’est ce que je mets habituellement, vous n’êtes pas obligé de mettre le même nom que moi mais faites attention dans les étapes qui vont suivre.
  5. Où stocker le fichier de configuration de créé.  Soit le mettre directement le dossier où il devra se trouver à la fin ‘awstats/wwwroot/cgi-bin‘ soit le dossier courant ‘./‘ (ne pas oublier de le déplacer dans le dossier précité à la fin)
  6. Il nous dit qu’il n’est pas capable de l’ajouter au cron. Mais comme on s’en fiche, c’est pas grave ;-).
  7. Il donne quelques commandes pratiques, mais elles ne nous intéressent pas pour l’instant.

Editer le fichier de config

Les lignes commençant par DirData, LogFile devront être modifiées comme suit :

  • DirData=… #vous pouvez simplement mettre la ligne en commentaire (préfixée d’un ‘#’), il prendra automatiquement le dossier par défaut qui est le ‘./’
  • LogFile=”/chemin/vers/votre/all.log” #C’est évident non ?

Ensuite il faut retourner dans le dossier ‘awstats/wwwroot/cgi-bin/‘ et executer la commande suivante :

./awstats.pl -output -update -config=all > bouh.html

  1. L’exécutable;
  2. lui demande d’effectuer une sortie des données/stats;
  3. parse le fichier de log et met à jour ses ‘bases de données’ utilisées pour générer les stats;
  4. la configuration utilisée (vous retrouvez le nom qu’on a setté via awstats_configure). J’espère que vous n’avez pas oublié de placer le fichier de config généré dans le dossier courant;
  5. on redirige le flux stdout dans un fichier html. Ce sont nos stats.

Plus qu’a ouvrir le fichier html géneré et vous avez vos stats !

Autre solution

Il existe surement une autre solution et peut être plus simple, mais je ne l’ai pas trouvée. Si vous trouvez je prends volontiers. En attendant, en voilà déjà une.
En espérant que cela serve.

Posted in Web by El Gnap at December 21st, 2010.
Tags: , , , , ,

Comments are closed.