{{tag>logiciel BROUILLON}} ====== 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** ((**v.x** = numéro de version)). Décompressez-le et, via FTP, placez le répertoire résultant à la racine du serveur **$ROOT** ((=**/var/www/html/**)). Sur le serveur, renommez le répertoire **awstats-v.x/** -> **awstats/** 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/** 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) : 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 ((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)) : ; LogType : LogType=WLe 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_ncré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=1Format 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=1DNS complètement activé ; AllowToUpdateStatsFromBrowser : AllowToUpdateStatsFromBrowser=1Mettre un lien de mise à jour des stats sur la page de résultats ; AllowFullYearView : AllowFullYearView=3affichage 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 %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"| ^%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 %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...)| ^%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 : 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 : 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é : # # 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. # Options None AllowOverride None Order allow,deny Allow from all 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 : 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 Require all granted # Le répertoire cgi-bin contient des scripts accessibles par URL Options +ExecCGI Require all granted ServerAdmin contact@monsite.tld ServerName awstats.monsite.tld ServerAlias stats.monsite.tld VirtualDocumentRoot /${RACINE}/awstats 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 : 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** ( (c) 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 : 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) * **(fr)** [[https://technique.arscenic.org/monitoring/awstats/article/installation-et-configuration-de-base-d-awstats]] * **(fr)** [[http://www.jouvinio.net/wiki/index.php/Awstats_sous_Apache]] * **(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]] * **(en)** [[https://www.fladi.at/posts/separate-awstats-for-multiple-apache2-vhosts/]] * **(en)** [[https://debian-administration.org/article/277/Setting_Up_Awstats__for_Apache]] * **(en)** [[https://wiki.apache.org/httpd/ConfigureApacheForAwStats]] ---- //Basé sur << [(http://server.vijge.net/archive/awstats-statistics-with-sub-domains-on-lighttpd/]]//