Servidors Web. Apache. Logs i estadístiques

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Logs a l'Apache

Els fitxers de log els trobarem com és habitual en la carpeta /var/log/, on trobarem la carpeta apache2/. Anem a veure si és veritat mirant el fitxer de configuració /etc/apache2/apache2.conf. Cercant dins el fitxer trobem:

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here.  If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
#
ErrorLog ${APACHE_LOG_DIR}/error.log

#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel warn
...
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
# If you are behind a reverse proxy, you might want to change %h into %{X-Forwarded-For}i
#
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combine
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

Un altre lloc (posterior) on es pot definir una altra vegada el log és als fitxers de configuració dels sites, per exemple, a /etc/apache2/sites-available/default:

ErrorLog ${APACHE_LOG_DIR}/error.log

Dins la carpeta /var/log/apache2 trobem el fitxer error.log actual, i tots els fitxers històrics que s'han generat anteriorment i que es guarden empaquetats. Quan el fitxer error.log arriba a un cert tamany, s'empaqueta i es renombra, i es comença amb un nou fitxer.

Anem a provocar un error. Accedim en el servidor a un recurs que no existeix. Per exemple:

Anem a veure el missatge que s'ha logat en el fitxer error.log:

$ tail error.log
[Thu Oct 16 18:01:25 2014] [error] [client 127.0.0.1] File does not exist: /var/www/no_existeix

Fem servir tail per veure les últimes línies del fitxer.

Si volem registrar els accessos que tenen les nostres pàgines es fa servir normalment el fitxer access.log, tal com està definit a /etc/apache2/sites-available/default:

CustomLog ${APACHE_LOG_DIR}/access.log combined

Per exemple, el professor accedeix al recurs http://localhost/artropodes (un recurs que existeix), i en el fitxer access.log podem veure:

127.0.0.1 - - [16/Oct/2014:18:21:47 +0200] "GET /icons/back.gif HTTP/1.1" 200 507 "http://localhost/artropodes/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:27.0) Gecko/20100101 Firefox/27.0"

Aquí és interessant remarcar que podem tenir fitxers logs d'accés diferenciats en funció del site. Per exemple, podem definir que per al site www.iaw.org, que l'alumne ha definit a /etc/apache2/sites-available/www.iaw.org:

CustomLog /var/log/apache2/access_iaw.log combined

Amb la qual cosa tenim un log diferenciat per visualitzar els accessos a www.iaw.org.

Amb la informació continguda en aquests fitxers es poden fer estadístiques de pàgines més accedides, temps de residència en cada pàgina, temps de residència en el site, navegador i sistema operatiu. I amb la IP es pot saber el país de procedència.

NOTA, cas pràctic. A vegades pot ser interessant cercar dins dels fitxers per una paraula concreta. Utiltizem la comanda find. Per exemple, si volem cercar artropodes en els fitxers continguts en el directori /var/log/apache2 faríem:

$ find /var/log/apache2 -type f -print | xargs egrep -i artropodes
./ssl_access.log:127.0.0.1 - - [10/Oct/2014:16:52:59 +0200] "GET /artropodes/ HTTP/1.1" 200 1036 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:27.0) Gecko/20100101 Firefox/27.0"
./ssl_access.log:127.0.0.1 - - [10/Oct/2014:16:52:59 +0200] "GET /icons/folder.gif HTTP/1.1" 200 618 "https://localhost/artropodes/" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:27.0) Gecko/20100101 Firefox/27.0"

En l'exemple vist a classe accedíem a https://localhost/artropodes, però no veiem el rastre dins el fitxer access.log. I gràcies a l'anterior comanda hem vist que la petjada estava al fitxer ssl_access.log, que és el fitxer per defecte definit a default-ssl, doncs estàvem accedint per https.

Anàlisi de les estadístiques a partir dels logs amb AWStats

Avui en dia és habitual utilitzar serveis com Google Analytics o bé alexa.com per fer un anàlisi estadístic de l'accés a la nostra web. Això implica inserir un codi dins les nostres pàgines html, i implica una comunicació (ús d'ample de banda) amb els servidors de Google o alexa.com.

L'altra possibilitiat, que és la que s'ha utilitzat tota la vida, és analitzar els logs. I tenim programari que fa la feina d'analitzar la informació dels logs, i ens la posa amb una bonica interfície gràfica. Per exemple AWStats. Per tal d'analitzar les estadístiques d'accés al nostre servidor Apache podem instal.lar AWStats.

'NOTA. També es pot instal.lar Awstats amb el paquet d'Ubuntu awstats. També ha de funcionar. Tingues present però que els directoris d'instal.lació seran diferents.

Anem a instal.lar una projecte web per analitzar les estadístiques del nostre lloc www.iaw.org. A diferència de molts projectes web que veurem al llarg del curs, que estan basats en PHP+MySQL, el projecte AWStats està basat en Perl. Això és per motius històrics, doncs el projecte ja té una colla d'anys (2004). Però didàcticament és interessant per veure que en e servidor Apache podem tenir scripts perl (i d'altres) per a ser executats, i que la seva execució genera pàgines html que són servides als clients (Firefox, Chrome,...).

Comencem la instal.lacikó. Anem a la pàgina oficial:

mirem els característiques, captures de pantalla,... i anem a Downloads. Aquí podem veure com el projecte es remunta a 2004, veiem com durant tot aquest temps el projecte ha estat actiu, i que la última versió per descarregar és molt recent, del juliol de 2015, que significa que el projecte és actiu. Això és important per nosaltres, només hem de confiar en projectes actius i dels quals podem rebre suport. Així doncs, descarreguem el fitxer awstats-7.6.tar.gz en una carpeta personal. Mirem el document README.txt, i d'aquí veiem que les instruccions d'instal.lació estan en la carpeta docs/, en format html.

Descomprimim i llegim el fitxer README.md. Podem descomprimir la carpeta en la web de l'assignatura (no cal que sigui el directori estàndard que es proposa, /usr/local/awstats, però ho pots descomprimir aquí si així ho prefereixes).

La documentació està en el docs/ directory. Aquí trobem el fitxer index.html, que obrim amb el navegador. Llegim en el Reference Manual > Install, Setup and Use AWStats.

Anem a fer el step 1. Abans de començar, assegura't de que el teu lloc www.iaw.org funciona correctament. Crearem les estadístiques per a aquest lloc.

Dins la carpeta tools/ trobem el script de configuració:

$ sudo perl awstats_configure.pl 

L'hem d'executar com a sudo perquè tocarem fitxers de configuració de l'Apache.

...
Enter full config file path of your Web server.
    /etc/apache2/httpd.conf

En aquest punt, si estàs utilitzant Ubuntu, el teu fitxer de configuració principal és apache2.conf en comptes de httpd.conf. Per tant, posarem /etc/apache2/apache2.conf

Do you want me to build a new AWStats config/profile?
    Diem que sí (''y''), doncs volem crear un perfil per a ''www.iaw.org'':

Your web site, virtual server or profile name:
    > www.iaw.org

Següent pas:

-----> Define config file path
In which directory do you plan to store your config file(s) ?
Default: /etc/awstats

Crearem el perfil a /etc/awstats/. És important llegir el que ens diu al final de l'execució del script:

-----> Create config file '/etc/awstats/awstats.www.iaw.org.conf'
 Config file /etc/awstats/awstats.www.iaw.org.conf created.

-----> Restart Web server with '/etc/init.d/apache restart'

-----> Add update process inside a scheduler
Sorry, configure.pl does not support automatic add to cron yet.
You can do it manually by adding the following command to your cron:
/home/joan/IAW/awstats-7.6/wwwroot/cgi-bin/awstats.pl -update -config=www.iaw.org
Or if you have several config files and prefer having only one command:
/home/joan/IAW/awstats-7.6/tools/awstats_updateall.pl now

El fitxer apache2.conf s'ha modificat i queda de la següent manera:

#
# Directives to allow use of AWStats as a CGI
#
Alias /awstatsclasses "/home/joan/IAW/awstats-7.6/wwwroot/classes/"
Alias /awstatscss "/home/joan/IAW/awstats-7.6/wwwroot/css/"
Alias /awstatsicons "/home/joan/IAW/awstats-7.6/wwwroot/icon/"
ScriptAlias /awstats/ "/home/joan/IAW/awstats-7.6/wwwroot/cgi-bin/"

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

    Require all granted
</Directory>

NOTA: Si us surt forbidden, afegim Require all granted per tal de donar permisos.

És a dir, hem afegit un lloc web, un àlies, que es diu awstats/, que apunta a awstats-7.6/wwwroot/cgi-bin/ (dins el directori on has descomprimit el projecte).

Per tant, per actualitzar les estadístiques executem el script awstats.pl que trobem a wwwroot/cgi-bin/ (ara és el moment de navegar a www.iaw.org per tal de registrar activitat en el log).

perl awstats.pl -update -config=www.iaw.org

Però si mirem el resultat veiem que no s'actualitza.

Si mirem el fitxer de configuració /etc/awstats/awstats.www.iaw.org.conf veiem què passa. Espera que els logs estiguin a:

#LogFile="/var/log/httpd/mylog.log"

però nosaltres hem definit que els nostres logs per al site www.iaw.org estiguin a /var/log/apache2/access_iaw.log (això ho hem definit quan definíem el site www.iaw.org, a /etc/apache2/sites-available/www.iaw.org.

Per tant, en el fitxer de configuració del Awstats posem:

LogFile="/var/log/apache2/access_iaw.log"

Tornem a executar el update, i ara sí que s'actualitza:

Parsed lines in file: 7
 Found 0 dropped records,
 Found 0 comments,
 Found 0 blank records,
 Found 0 corrupted records,
 Found 0 old records,
 Found 7 new qualified records.t

Un altre problema és que protesta perquè no troba la carpeta /var/lib/awstats. Aquest és el directori on es guarda la base de dades, i l'haurem de crear manualment:

$ sudo mkdir /var/lib/awstats

Podem veure el contingut dels arxius que hi ha a la carpeta /var/lib/awstats, per ex:

$ cat /var/lib/awstats/awstats112017.www.iaw.org.txt
...
# URL - Pages - Bandwidth - Entry - Exit
# The 10 first Pages must be first (order not required for others)
BEGIN_SIDER 2
/ 4 2067 2 2
/PHP/taules_multiplicar.php 3 2866 1 0
END_SIDER

Veiem que hi ha un fitxer per cada mes, per ex, awstats112017.www.iaw.org.txt correspon al novembre 2017.

I ara ja podem veure les estadístiques, amb l'aplicatiu web:

Awstats.jpg

També és possible que en comptes d'executar-se el script awstats.pl, l'Apache no ho sàpiga fer i el que fa és descarregar el script. Això vol dir que l'Apache no sap executar scripts perl. Això ho arreglem fent:

$ sudo apt-get install libapache2-mod-perl2
i habilitem el mòdul cgi:
$ sudo a2enmod cgi

Ara només falta fer el cron.

NOTA: si el servidor web no sap obrir el script awstats.pl, és que has d'instal.lar el paquet:

$ sudo apt-get install libapache2-mod-perl2

Configurar el cron

Ara que ja tenim les estadísques funcionant, hem d'actualitzar-les de forma automàtica i desatesa. Utilitzarem el cron.

Primer de tot, definirem un script que llençi el updater de les estadístiques (recorda ficar la ruta correcta del teu script):

$ sudo joe /etc/cron.daily/awstats

#!/bin/sh
perl /home/joan/IAW/awstats-7.6/wwwroot/cgi-bin/awstats.pl -update -config=www.iaw.org > /dev/null

Li donem permís d'execució i l'executem:

$ sudo chmod +x /etc/cron.daily/awstats
$ sudo /etc/cron.daily/awstats

Els scripts que estan en la carpeta /etc/cron.daily/ s'executen cada dia.

NOTA: dins del fitxer /etc/crontab existeix la línia:

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

que gestiona els scripts de cron.daily de forma anacrònica, és a dir, tenint en compte que la màquina pot estar apagada. Fixar-se bé que el script s'executarà com a root.

Així doncs, ja tenim un client gràfic per controlar les estadístiques del nostre site, que s'actualitza cada dia.


creat per Joan Quintana Compte, oct 2015, nov 2016, nov 2017

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines