Table des matières
Awstats : Surveillance d'un serveur HTTP
Introduction
AWStats analyse sur vos serveurs (Apache ou autre) les logs des sites Web qui s'y trouvent.
Nous prendrons ici l'exemple, d'un serveur Apache.
Pré-requis
-
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/.
que nous noterons $ROOT = /var/www/html/
-
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/
Voici l'arborescence obtenue :
Les fichiers de configuration sont installés dans $ROOT/awstats/wwwroot/cgi-bin/
La doc est disponible :
-
en html sur http://monsite.tld/awstats/docs
-
en pdf sur http://monsite.tld/awstats/docs/awstats.pdf
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 :
-
une configuration pour la totalité du site,
-
une configuration pour un domaine particulier
-
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
-
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"
-
Créez un fichier awstats.conf.local en copiant le modèle :
$ cp awstats.model.conf awstats.conf.local
-
Ouvrez le fichier $ROOT/awstats/wwwroot/cgi-bin/awstats.conf.local pour régler les paramètres suivants 3) :
- 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
Syntaxe de Logformat : chaîne de format personnalisée.
Le format peut être précisé en utilisant des variables :
%host nom d'hôte ou adresse IP du visiteur %logname
ou %lognamequotLogin / utilisateur authentifié avec ou sans doubles quotes : john ou “john” %time1,
%time2,
%time3,
%time4
ou %time5Horodatage 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%methodurlnoprotMéthode et URL avec ou sans le protocole :
“GET /index.html HTTP/x.x”
ou “GET /index.html”%method Méthode au format : GET %url URL seule au format : /index.html %code code de retour %bytesd Taille du document en octets %refererquot
ou %refererURL de la page appelante avec ou sans doubles quotes :
“http://from.com/from.htm“
ou http://from.com/from.htm%uabracket,
%uaquot
%uaNavigateur de l'utilisateur :
- entre crochets : [Mozilla/4.0 (compatible, …)]
- avec doubles quotes : “Mozilla/4.0 (compatible, …)“
- ou sans rien : Mozilla/4.0_(compatible…)%gzipin octets d'entrée de compression de mod_gzip : In:XXX %gzipout octets de sortie et ratio de compression de mod_gzip : Out:YYY:ZZpct. %gzipratio ratio de compression de mod_gzip : ZZpct. %deflateratio ratio de compression de mod_deflate au format : (ZZ) %virtualname nom 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%cluster Si le fichier journal vient de plusieurs journaux (fusionnés par logresolvemerge.pl), ceci définit le champ cluster id. %other un autre champ inutilisé %otherquot id (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"
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.conf → awstats.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$]"
- 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
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.conf → awstats.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.
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).
Cas d'un serveur Apache
Basé sur la documentation fournie dans http://monsite.tld/awstats/docs
N'oubliez pas d'activer les module cgi et alias !
-
sudo a2enmod cgi alias sudo systemctl restart apache2.service
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>
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.
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
-
Pour afficher les les statistiques pour le domaine domaine.tld, visitez la page http://domaine.tld/stat.
-
Pour afficher les les statistiques pour le sous-domaine sub.domaine.tld, visitez la page http://sub.domaine.tld/stat.
En créant une page avec des liens vers les statistiques pour chaque sous-domaine, on peut facilement les lire.
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
-
(en) http://www.awstats.org/ (site officiel du logiciel)
-
(en) http://server.vijge.net/archive/awstats-statistics-with-sub-domains-on-lighttpd/ (tutoriel bien fait)
-
(en) doc officielle : http://www.awstats.org/docs/awstats_setup.html
Basé sur « [(http://server.vijge.net/archive/awstats-statistics-with-sub-domains-on-lighttpd/]]//
-
-