jxla logo switch to english   

How to (15 avril 2005)

Vérification de la configuration

Pour éxécuter JXLA, il faut un JDK ( 1.3 ou supérieur )
Un ou des fichiers de log d'un serveur web.
La dernière archive disponible depuis sourceforge.net (préférer les versions incluant xerces ), ( si vous prenez la version 1.1, ne pas oublier de télécharger aussi org.nioto.browser-v0.2.1.jar pour avoir la dernière version. )

Installation

Décompressez l'archive, celà crée un répertoire jxla avec tout le nécessaire à l'intérieur, ( là encore, si c'est la version 1.1 qui a été choisie, remplacez le fichier jxla/lib/org.nioto.browser.jar par org.nioto.browser-v0.2.1.jar ).

nioto@serveur1:~$ tar -zxf jxla-1.1.1.tar.gz
nioto@serveur1:~$ cd jxla/
nioto@serveur1:~/jxla$ ls -al
total 44
-rwxr-xr-x  1 nioto nioto  574 Mar 19 18:24 Changelog
-rwxr-xr-x  1 nioto nioto 1657 Mar 19 18:16 README.txt
-rwxr-xr-x  1 nioto nioto  267 Jan 21  2002 ant.bat
-rwxr-xr-x  1 nioto nioto  210 Jan  6 14:18 ant.sh
drwxr-xr-x  2 nioto nioto 4096 Mar 19 18:17 bin
-rwxr-xr-x  1 nioto nioto 1350 Mar 19 17:33 build.xml
drwxr-xr-x  2 nioto nioto 4096 Jan  6 19:16 conf
drwxr-xr-x  3 nioto nioto 4096 Mar 19 17:29 doc
drwxr-xr-x  2 nioto nioto 4096 Mar 19 17:29 lib
-rwxr-xr-x  1 nioto nioto 2302 Jan  6 14:18 license.txt
drwxr-xr-x  3 nioto nioto 4096 Jan  6 19:17 src
nioto@serveur1:~$
Définir la variable d'environnement JAVA_HOME vers le bon chemin,
sur mon petit linux le JDK est dans /usr/local/jdk donc:
nioto@serveur1:~/jxla$ export JAVA_HOME=/usr/local/jdk
nioto@serveur1:~/jxla$ $JAVA_HOME/bin/java -version
java version "1.4.2_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_02-b03)
Java HotSpot(TM) Client VM (build 1.4.2_02-b03, mixed mode)
nioto@serveur1:~/jxla$

Configuration

La première chose à faire est de déterminer le chemin des fichiers de logs à parser et leur format,
pour apache il faut regarder du côté de httpd.conf.
Dans mon cas :

nioto@serveur1:~/jxla$ more /etc/apache/httpd.conf | grep Log | grep -v ^#
ErrorLog /var/log/apache/error.log
LogLevel debug
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T %v" full
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %P %T" debug
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog /var/log/apache/access.log combined
Donc, les fichiers de logss sont placés dans le répertoire /var/log/apache/ et ont leur nom
commençant par 'access.log' ( le programme rotatelog backup les vieux fichiers en apache.log.1.gz, apache.log.2.gz, etc ...).
Et le format choisi des lignes est "combined" :
%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"

Editez le fichier conf/conf.xml ( description ici ):
  1. dns : effectue ou non des résolutions dns inverses, si cette option est active, il faut préciser le chemin du fichier qui servira de cache pour les requêtes déjà émises ( quelque chose comme $JXLA_HOME/work/dnsrequest.dump ). Pour la démo, les résolutions dns ne sont pas effectuées pour accéler l'analyze
    <dns>
      <available>false</available>
      <filecache>/home/nioto/jxla/work/dnsrequest.dump</filecache>
    </dns>
    
  2. logfiles : spécifié le chemin des fichier à analyser et leur format
    dans mon cas: directory is /var/log/apache/ , filenameregexp ( la valeur est une expression régulière ) est access\.log.*.
    Le noeud 'format' est le plus difficile à s'approprier, voilà une conversion des différents éléments du format apache vers le format JXLA ( voir la documentation apache pour plus de détails ):
     %h : Remote host => $remote_host
     %l : Remote logname (from identd, if supplied ) => pas utiliser donc * ( toute chaine sans espaces )
     %u : Remote user => $user
     %t : Time, in common log format time format (standard english format,
          ex:[28/Mar/2005:20:32:57 +0200] ) => [d/m/y:h *]
     \"%r\" : First line of request quoted ( ex : "GET /index.html HTTP/1.0" ) => "* $uri *"
     %>s : Status => $status
     %b : Bytes send => $size
     \"%{Referer}i\" : quoted referer  => $referer
     \"%{User-Agent}i\" : quoted user-agent => $agent
    
    Si le format a changé depuis la mise en place du serveur web, il est autorisé de mettre plusieurs noeuds 'regexp' pour chacun des formats utilisés.
    <logfiles>
      <directory>/var/log/apache/</directory>
      <filenameregexp>access\.log.*</filenameregexp>
      <format>
        <regexp>$remote_host * $user [d/m/y:h *] "* $uri *" $status $size $referer $agent*</regexp>
      </format>
    </logfiles>
    
  3. pages : Mes pages ont pour extension htm, html et php
    et la page par défaut est index.html ( la page que le serveur web sert dans le cas d'un appel à une url terminant par / )
    <pages>
      <extensions>.htm, .html, .php</extensions>
      <defaultindex>index.html</defaultindex>
    </pages>
    
  4. max-values: les valeurs fournies dans le fichier sont acceptables
  5. localconfigclass: Le but de ce paramètre est de permettre d'analyser des fichiers communs à plusieurs sites ( pour éviter qu'apache n'ouvre trop de fichiers de logs dans le cas d'hébergement de plusieurs sites) dont on veut générer des rapports indépendants, dans mon cas, il n'y a qu'un seul site, donc pas de changement:
    <localconfigclass>org.novadeck.jxla.config.SimpleSiteConfig</localconfigclass>
    
    Note :
    si vous voulez analyser des fichiers de logs qui contiennent tous les logs de tous les sites hébergés (comme le cas d'une entreprise d'hébergement),
    il faut développer une classe qui implémente AbstractSiteConfig
  6. summary-name: nom du fichier du rapport par mois
    <summary-name>summary.xml</summary-name>
    
  7. history-filepath : chemin des ficheirs où sera gardé un fichier historique de l'analyse ( quelque chose comme $JXLA_HOME/work/history.dump )
    <history-filepath>/home/nioto/jxla/work/history.dump</summary-name>
    
  8. searchengines : configure les moteurs de recherche, utile pour connaitre les mots clés tapés par les personnes qui accèdent à votre site, les valeurs pas défaut sont ok.

Editez le script bin/runSimple(.sh|.bat)

définir les variables d'environnement OUTPUTDIR,JAVA_HOME, CONF et HOSTNAME
OUTPUTDIR : répertoire où seront mis les rapports
JAVA_HOME : le chemin du répertoire content le jdk
CONF : chemin de votre fichier de configuration
HOSTNAME : nom du site dont les fichiers de logs dépend

Testez votre configuration

Copiez bin/runSimple.(sh|bat) vers bin/viewConfig.(sh|bat) et modifier la dernière ligne

$JAVA_HOME/bin/java -Dhostname=$HOSTNAME -Doutputdir=$OUTPUTDIR org.novadeck.jxla.Main $CONF
to
$JAVA_HOME/bin/java -Dhostname=$HOSTNAME -Doutputdir=$OUTPUTDIR org.novadeck.jxla.Main $CONF viewConfig
et lancez-le, vous verrez votre configuration comme :
nioto@serveur1:~/jxla$ bin/viewConfig.sh
Your configuration is :

Class to get infos from hostnames : org.novadeck.jxla.config.SimpleSiteConfig
Requests with extensions in  [.htm, .html, .php ]
Reverse dns is disable,
List of files to parse : [ /var/log/apache/access.log, /var/log/apache/access.log.1,
/var/log/apache/access.log.2.gz, /var/log/apache/access.log.3.gz, /var/log/apache/access.log.4.gz,
/var/log/apache/access.log.5.gz, /var/log/apache/access.log.6.gz, /var/log/apache/access.log.7.gz,
/var/log/apache/access.log.8.gz, /var/log/apache/access.log.9.gz, /var/log/apache/access.log.10.gz,
/var/log/apache/access.log.11.gz, /var/log/apache/access.log.12.gz, /var/log/apache/access.log.13.gz,
/var/log/apache/access.log.14.gz, /var/log/apache/access.log.15.gz, /var/log/apache/access.log.16.gz,
/var/log/apache/access.log.17.gz, /var/log/apache/access.log.18.gz, /var/log/apache/access.log.19.gz ]

Max referers to output : 20
Max search engine keywords to output : 50
Max remote hosts to output : 25
Max uris to output : 30
Max file not found error to output : 10
Max referers to output : 20
Max Countries to output : 1000
Max Browsers to output : 50
Max Operating system to output : 50
The summary file of the log analysis will be write to 'summary.xml'
The history will be write to '/home/nioto/jxla/work/history.dump'
Default web page for your web server is 'index.html'
Available regexp for parsing logs are :
$remote_host * $user [d/m/y:h *] "* $uri *" $status $size $referer $agent*

Exécutez jxla

nioto@serveur1:~/jxla$ bin/runSingle.sh
file doesn't exist, will be created at end of process
22.0 seconds to parse 36055 lines
re  = $remote_host * $user [d/m/y:h *] "* $uri *" $status $size $referer $agent*
match 35598
nioto@serveur1:~/jxla$
La sortie indique :
1> le fichier historique est absent, il sera créé en fin de programme
2> celà a pris 22.0 seconds pour analyser les 36055 lignes ( mon linux tourne sur un vieille machine;-)
3> 35598 lignes ont été prises en compte
remarque : les (36055-35598) lignes non prises en compte proviennent de requêtes de scripts kiddies

Debug

Vous pouvez obtenir des informations de debuggage, en ajoutant la 'propriété système java' DEBUG à true
 


      Created with NetBeans!
      SourceForge.net Logo