Documentation du Dr FRAPPE

Ce wiki regroupe les résultats de mes expériences en informatique accumulés au cours de mes recherches sur le net.

Dans la mesure du possible, j'ai cité mes sources ; il en manque certainement… :-)

Ceci est une ancienne révision du document !


Awstats : Surveillance d'un serveur HTTP

Introduction

AWStats analyse sur vos serveurs (Apache ou autre) les logs des sites Web qui s'y trouvent.

<WRAP center round info 60%> Nous prendrons ici l'exemple, d'un serveur Apache. </subnumberlist>

Pré-requis

  1. un serveur HTTP (apache, lighty ou autre) :
    • installé sur une machine
    • accessible par le domaine monsite.tld (ou framboise.local pour un Raspberry Pi sur le réseau),
    • sa racine étant en /var/www/html/.<WRAP center round info 60%>

que nous noterons $ROOT = /var/www/html/ </subnumberlist>

  1. Les scripts cgi doivent être activés :
    • sous Apache2, activez le module cgi

      $ sudo a2enmod cgi
      $ sudo apachectl restart

Installation

Nous allons placer awstats sur le serveur, sans installer le paquet. Cette méthode a l'avantage de ne rien modifier sur la machine hôte.

Allez sur le site http://www.awstats.org/. Cliquez sur [Downloads]. Dans le paragraphe Last stable, en bout de ligne, téléchargez le fichier awstats-v.x.tar.gz 1).

Décompressez-le et, via FTP, placez le répertoire résultant à la racine du serveur $ROOT 2).

Sur le serveur, renommez le répertoire awstats-v.x/awstats/

<WRAP center round info 60%> Voici l'arborescence obtenue :

$ROOT/awstats wwwroot cgi-bin (scripts et fichiers de configuration des hôtes) - awstats.pl programme principal AWStats - awredir.pl outil de suivi des clics de sortie - awstats.model.conf : fichier modèle de configuration plugins Répertoire des plugins optionnels icon icônes etc. tools Outils fournis docs Documentation de AWStats

Les fichiers de configuration sont installés dans $ROOT/awstats/wwwroot/cgi-bin/ </subnumberlist>

La doc est disponible :

Configuration

Configuration d'Awstats

Les fichiers de configuration se trouvent en : $ROOT/awstats/wwwroot/cgi-bin/

C'est ici que seront créés les fichiers servant à calculer les statistiques (awstats.localhost.conf, awstats.localhost.localdomain.conf, awstats.nom_d_hote.conf, awstats.monsite.tld.conf, awstats.sub.monsite.tld.conf, etc.).

Voyons maintenant comment créer :

  1. une configuration pour la totalité du site,
  2. une configuration pour un domaine particulier
  3. et une configuration pour un sous-domaine.

Pour éviter l'interaction avec les mises à jour, nous créerons un fichier awstats.conf.local qui sera inclus par les fichiers awstats.*.conf

Connectez-vous en ssh et allez au répertoire $ROOT/awstats/wwwroot/cgi-bin/ :

$ ssh framboise
$ cd $ROOT/awstats/wwwroot/cgi-bin/

Configuration pour la totalité du site

Nous supposons que les stats seront publiées à l'adresse http://stats.monsite.tld

  1. Créez le fichier awstats.conf pour y écrire ceci (adaptez avec votre site) :
    awstats.conf
    SiteDomain="monsite.tld"
    HostAliases="localhost 127.0.0.1 REGEX[monsite\.tld$]"
    
    Include "awstats.conf.local"
  2. Créez un fichier awstats.conf.local en copiant le modèle :

    $ cp awstats.model.conf awstats.conf.local

  3. Ouvrez le fichier $ROOT/awstats/wwwroot/cgi-bin/awstats.conf.local pour régler les paramètres suivants 3) :

<WRAP center round tip 60%>

LogType
LogType=W

Le fichier de log à analyser concerne un site web

LogFile
LogFile="/var/www/html/awstats/tools/logresolvemerge.pl /var/log/apache2/access.* |"

Fichiers journaux du serveur (apache, lighty …) à analyser

logresolvemerge.pl
Syntaxe :
logresolvemerge.pl [options] file_1 ... file_n

crée un fichier journal de sortie unique, trié par date, à partir de plusieurs sources. Deux options utiles :

dnslookup
Faire une recherche DNS inversée sur les adresses IP
addfilename
avec plusieurs fichiers, le nom de fichier peut être ajouté dans le premier champ du fichier de sortie.
Explorez /var/log pour savoir l'emplacement exact des fichiers (pour apache , c'est souvent /var/log/apache2, chercher aussi /var/log/httpd …
LogFormat
LogFormat=1

Format du fichier journal (1, 2, 3 ou 4) ; 1 est le plus courant pour Apache. Voir la doc pour les détails.

SiteDomain
SiteDomain="monsite.tld"

Site de base

HostAliases
HostAliases="localhost 127.0.0.1 REGEX[monsite\.tld$]"

(renseignez votre nom de domaine (“monsite”) et son extension (“tld”) dans l'expression REGEX pour que tous les domaines correspondent)

DNSLookup
DNSLookup=1

DNS complètement activé

AllowToUpdateStatsFromBrowser
AllowToUpdateStatsFromBrowser=1

Mettre un lien de mise à jour des stats sur la page de résultats

AllowFullYearView
AllowFullYearView=3

affichage de l'année entière. Options possibles :
0 - désactivé
1 - Activé pour le mode CLI uniquement et la valeur n'est pas visible dans la liste
2 - Idem que 1 mais la valeur est visible et non activable
3 - autorisé en modes CLI et CGI

SkipFiles
SkipFiles="/cgi-bin/awstats.pl"

pour éviter le logging l'activité propre à awstats

fichiers à ignorer lors du calcul des statistiques.
Séparez les entrées par un espace.
Vous ouvez utiliser une expression régulière, par exemple pour ignorer le dossier travail : REGEX[^\/travail]

Si elle existe, commentez la ligne :

#Include "/etc/awstats/awstats.conf.local"

pour éviter une boucle infinie </subnumberlist>

<WRAP center round info 60%> Syntaxe de Logformat : chaîne de format personnalisée.

Le format peut être précisé en utilisant des variables :

%hostnom d'hôte ou adresse IP du visiteur
%logname
ou %lognamequot
Login / utilisateur authentifié avec ou sans doubles quotes : john ou “john”
%time1,
%time2,
%time3,
%time4
ou %time5
Horodatage au format :
1 - [dd/mon/yyyy:hh:mm:ss +0000] ou [dd/mon/yyyy:hh:mm:ss]
2 - yyyy-mm-dd hh:mm:ss
3 - Mon dd hh:mm:ss ou Mon dd hh:mm:ss yyyy
4 - timestamp unix: dddddddddd
5 - format iso: yyyy-mm-ddThh:mm:ss
%methodurl
ou%methodurlnoprot
Méthode et URL avec ou sans le protocole :
“GET /index.html HTTP/x.x”
ou “GET /index.html”
%methodMéthode au format : GET
%urlURL seule au format : /index.html
%codecode de retour
%bytesdTaille du document en octets
%refererquot
ou %referer
URL de la page appelante avec ou sans doubles quotes :
http://from.com/from.htm
ou http://from.com/from.htm
%uabracket,
%uaquot
%ua
Navigateur de l'utilisateur :
- entre crochets : [Mozilla/4.0 (compatible, …)]
- avec doubles quotes : “Mozilla/4.0 (compatible, …)“
- ou sans rien : Mozilla/4.0_(compatible…)
%gzipinoctets d'entrée de compression de mod_gzip : In:XXX
%gzipoutoctets de sortie et ratio de compression de mod_gzip : Out:YYY:ZZpct.
%gzipratioratio de compression de mod_gzip : ZZpct.
%deflateratioratio de compression de mod_deflate au format : (ZZ)
%virtualnamenom d'hôte virtuel du serveur web. Utilisez cette étiquette quand le journal contient des données de plusieurs serveurs Web virtuels.
AWStats rejettera les demandes qui ne sont pas dans SiteDomain ni HOSTALIASES
%clusterSi le fichier journal vient de plusieurs journaux (fusionnés par logresolvemerge.pl), ceci définit le champ cluster id.
%otherun autre champ inutilisé
%otherquotid (avec quotes)

Exemple de journaux Apache combinés (ces deux exemples sont équivalents) :

LogFormat = 1
LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"

</subnumberlist>

C'est tout pour la configuration générale.

Configuration pour un domaine particulier

Même principe que pour la configuration générale.

Pour chaque site monautresite.tld à analyser, copiez le modèle awstats.model.confawstats.monautresite.tld.conf et redonnez-lui les permissions :

  • cp awstats.model.conf awstats.monautresite.tld.conf
    sudo chown -R www-data:www-data *

Ouvrez le fichier [RACINE]/awstats/wwwroot/cgi-bin/awstats.monautresite.tld.conf pour le modifier comme ceci :

/awstats/wwwroot/cgi-bin/awstats.SiteDomain.tld.conf
Include "[RACINE]/awstats/wwwroot/cgi-bin/awstats.conf.local"

SiteDomain="monautresite.tld"
HostAliases="localhost 127.0.0.1 REGEX[monautresite\.tld$]"

<WRAP center round box 60%>

SiteDomain
Domaine en cause
HostAliases
renseignez le domaine et l'extension dans l'expression REGEX
SkipHosts
permet d'éviter le logging de l'activité en provenance du réseau local

</subnumberlist>

Ajoutez tous les réglages voulus cf Configuration pour la totalité du site.

Configuration pour un sous-domaine

Configurons maintenant chaque sous-domaine.

Pour chaque sous-domaine à suivre, copiez le modèle awstats.model.confawstats.sub.monsite.tld.conf

  • cp awstats.model.conf awstats.sub.monsite.tld.conf

Redonnez les permissions:

  • sudo chown -R www-data:www-data *
    sudo chmod -R 2770 *

Puis ouvrez le fichier [RACINE]/awstats/wwwroot/cgi-bin/awstats.sub.monsite.tld.conf pour le modifier comme ceci :

/awstats/wwwroot/cgi-bin/awstats.sub.monsite.tld.conf
Include "[RACINE]/awstats/wwwroot/cgi-bin/awstats.conf"

SiteDomain="sub.monsite.tld"
HostAliases="sub.monsite.tld"

La configuration d'Awstats est maintenant terminée.

Configuration du serveur

Il faut maintenant que le serveur web connaisse awstats.

<WRAP center round important 60%> Pour que le serveur web exécute les scripts Perl, les fichiers scripts (comme awstats.pl) doivent être dans un répertoire défini sur votre serveur web comme un répertoire «< cgi », c'est-à-dire un répertoire configuré sur votre serveur web pour contenir des fichiers « exécutables » et non des fichiers de documents.

Voyez sur le manuel du serveur comment désigner un répertoire comme étant un répertoire cgi exécutable (dans Apache, utilisez l'option ExecCGI dans une section directory). </subnumberlist>

Cas d'un serveur Apache

Basé sur la documentation fournie dans http://monsite.tld/awstats/docs

<WRAP center round important 60%> N'oubliez pas d'activer les module cgi et alias !

  • sudo a2enmod cgi alias
    sudo systemctl restart apache2.service

</subnumberlist>

<WRAP center round info 60%> Voici le fichier /var/www/html/awstats/tools/httpd_conf fourni par le fichier awstats décompressé :

/var/www/html/awstats/tools/httpd_conf
#
# Content of this file, with correct values, can be automatically added to
# your Apache server by using the AWStats configure.pl tool.
#


# If using Windows and Perl ActiveStat, this is to enable Perl script as CGI.
#ScriptInterpreterSource registry


#
# Directives to add to your Apache conf file to allow use of AWStats as a CGI.
# Note that path "/usr/local/awstats/" must reflect your AWStats install path.
#
Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"
Alias /awstatscss "/usr/local/awstats/wwwroot/css/"
Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"
ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"


#
# This is to permit URL access to scripts/files in AWStats directory.
#
<Directory "/usr/local/awstats/wwwroot">
    Options None
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

</subnumberlist>

<WRAP center round info 60%> Apache 2.4 a quelques changements :

AllowOverride
est désormais par défaut à None
Require all granted
remplace le couple Order/Allow
Require all denied
remplace le couple Order/Deny
Define
possibilité de définir une variable :
Define variable valeur

à utiliser comme suit :

${variable}

même entre des doubles quotes.

</subnumberlist>

Pour que le serveur web exécute les scripts Perl (comme awstats.pl), le répertoire qui les contient doit être défini comme un répertoire « cgi », c'est-à-dire un répertoire qui contient des fichiers « exécutables » et non des fichiers de documents.

Pour cela, nous allons créer un hôte virtuel spécial pour Awstats et nous y définirons le répertoire des scripts avec l'option ExecCGI :

Créez avec les droits d'administration le fichier /etc/apache2/sites-available/awstats.conf pour y écrire ceci :

/etc/apache2/sites-available/awstats.conf
Define RACINE /var/www/html

DocumentRoot "/${RACINE}"

# Pour utiliser AWStats comme CGI.
Alias /awstatsclasses "/${RACINE}/awstats/wwwroot/classes/"
Alias /awstatscss "/${RACINE}/awstats/wwwroot/css/"
Alias /awstatsicons "/${RACINE}/awstats/wwwroot/icon/"
ScriptAlias /awstats/ "/${RACINE}/awstats/wwwroot/cgi-bin/"

# Autoriser l'accès par URL aux fichiers et scripts contenus dans le répertoire AWStats
<Directory "/${RACINE}/awstats/wwwroot">
    Require all granted
</Directory>    </Directory>

# Le répertoire cgi-bin contient des scripts accessibles par URL
<Directory "/${RACINE}/awstats/wwwroot/cgi-bin">
    Options +ExecCGI
    Require all granted
</Directory>

<VirtualHost *:80>
    ServerAdmin contact@monsite.tld
    
    ServerName awstats.monsite.tld
    ServerAlias stats.monsite.tld
    VirtualDocumentRoot /${RACINE}/awstats
</VirtualHost>

Redémarrez Apache pour appliquer les modifications :

  • sudo systemctl restart apache2.service

Pour être sûr que le changement de format de journal est actif, allez à votre page d'accueil et ouvrez votre fichier journal.

Voici un exemple du type d'enregistrements que vous devriez voir dans votre nouveau fichier journal après le redémarrage d'Apache :

62.161.78.75 - - [dd/mmm/yyyy:hh:mm:ss +0000] "GET / HTTP/1.1" 200 1234 "http://www.from.com/from.html" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"

Cas d'un serveur lighty

  • Ouvrez avec les droits d'administration le fichier /etc/lighttpd/lighttpd.conf pour vérifier les modules activés (dé-commentés au début du fichier). C'est en principe le cas du module mod_alias qui est activé par défaut.
  • Activez le module cgi :
    sudo lighty-enable-mod cgi
  • Ouvrez avec les droits d'administration le fichier /etc/lighttpd/conf-available/50-awstats.conf pour y écrire ceci :
    /etc/lighttpd/conf-available/50-awstats.conf
    alias.url += ( "/icon/" => "/var/www/awstats/wwwroot/icon/" )
    alias.url += ( "/stat" => "/var/www/awstats/wwwroot/cgi-bin/" )
    
    $HTTP["url"] =~ "^/stat($|/)" {
      # Pour que http://.../stat/ renvoie sur http://.../stats/awstats.pl
      index-file.names = ("awstats.pl")
      
      # perl et cgi
      cgi.assign = (
        ".pl" => "/usr/bin/perl",
        ".cgi" => "/usr/bin/perl"
      )
    }
  • Activez le module awstats :
    sudo lighty-enable-mod awstats
  • Redémarrez lighty :
    sudo service lighttpd restart
  • Redonnez les droits voulus :
    cd /var/www
    sudo chown -R www-data:www-data *
    sudo chmod -R 6770 *

Mise à jour toutes les 10 minutes (multi-domaines)

Si vous êtes en multi domaines, donc avec plusieurs fichiers de configuration dans [RACINE]/awstats/, le plus simple est de faire appel à awstats_updateall ( © Laurent Destailleur)

Pour chaque domaine ou sous-domaine à surveiller, créez ou ouvrez avec les droits d'administration le fichier /etc/cron.d/awstats pour y ajouter une ligne :

/etc/cron.d/awstats
0,10,20,30,40,50 * * * * www-data [RACINE]/awstats/wwwroot/cgi-bin/awstats.pl -config=domaine.tld
0,10,20,30,40,50 * * * * www-data [RACINE]/awstats/wwwroot/cgi-bin/awstats.pl -config=sub.domaine.tld

Utilisation

<WRAP center round tip 60%> En créant une page avec des liens vers les statistiques pour chaque sous-domaine, on peut facilement les lire. </subnumberlist>

Désinstallation

Pour supprimer complètement cette application, il suffit de :

  • effacer la ligne du fichier /etc/cron.d/awstats (cf Mise à jour toutes les 10 minutes (multi-domaines))
  • désactiver le module awstats de lighty :
    sudo lighty-disable-mod awstats
  • effacer le fichier /etc/lighttpd/conf-available/50-awstats.conf :
    sudo rm /etc/lighttpd/conf-available/50-awstats.conf
  • effacer le répertoire /var/www/awstats

Voir aussi

1)
v.x = numéro de version
2)
=/var/www/html/
3)
Le fichier $ROOT/awstats/wwwroot/cgi-bin/awstats.conf.local, représentant la configuration de base, sera inclus au début de chaque fichier de configuration