Impostazione di una procedura di generazione automatica di report e statistiche varie degli accessi su server Apache


Indice

  1. CGI (Common Gateway Interface): generazione di pagine dinamiche ed esecuzione di script/applicativi lato server

  2. Generazione di un report di statistiche mediante l'esecuzione di uno script CGI

  3. Generazione di statistiche su base cronologica accessibili come testi statici via web


Come esempio di esecuzione di uno script CGI e di generazione di pagine HTML con le statistiche di accesso al web server, si userà il pacchetto Analog (http://www.analog.cx) che fornisce sia un eseguibile binario (installato in /usr/bin/analog su Fedora Linux 12) che uno script CGI installato in /var/www/cgi-bin/anlgform.pl .

Il file eseguibile binario si può adoperare per generare periodicamente una pagina HTML statica di statistiche sfruttando il servizio di sistema cron . Lo script Perl è stato invece progettato per essere usato come script CGI per generare dinamicamente pagine di statistiche HTML.

Nel seguito si tratteranno dunque i temi seguenti:

  1. configurazione di Apache per l'esecuzione di applicativi CGI (Common Gateway Interface);

  2. installazione di un analizzatore dei file di log di Apache e generatore di pagine HTML di statistiche;

  3. configurazione del crontab di sistema per l'esecuzione cronologica della generazione delle statistiche;

  4. preparazione di una pagina web per la visualizzazione delle statistiche.

1 - CGI (Common Gateway Interface): generazione di pagine dinamiche ed esecuzione di script/applicativi lato server

Nel file di configurazione del web server Apache (/etc/httpd/conf/httpd.conf nella distribuzione Fedora 12) si può intervenire in due modi per permettere al web server di eseguire comandi locali invece di fornirne il contenuto al client come fossero documenti qualsiasi:

  1. si definisce una certa directory del filesystem del server come uno ScriptAlias;

  2. si aggiunge l'opzione ExecCGI ad una direttiva Directory o Location;

  3. si definisce un'estensione del nome di certi file eseguibili come indicativi del fatto che siano script CGI, ovunque si trovino nel filesystem del web server.

Un esempio del caso (1) è la direttiva seguente:

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

<Directory "/var/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>


Nella direttiva Directory non serve attivare l'opzione ExecCGI perché alla directory di riferimento /var/www/cgi-bin è già stato dichiarato uno ScriptAlias nella directory /cgi-bin/.

Un esempio del caso (2) è la direttiva seguente, in cui si definiscono le cartelle /home/*/public_html/cgi-bin come contenitori di script CGI:

<Directory /home/*/public_html/cgi-bin>
Options ExecCGI
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
</Directory>

Un esempio del caso (3) è la direttiva seguente:

AddHandler cgi-script .cgi .sh .awk .pl

Supponiamo che siano state abilitate le pagine utente sul web server cui sono fatte corrispondere le directory di default public_html, e che un utente di nome webroot abbia questo file index.html nella propria directory ~/public_html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Sito web di WebRoot</TITLE>
</HEAD>
<BODY>
Pagina di <kbd>controllo</kbd> dello stato del <i>server</i>.
<H1>Men&ugrave; del sito</H1>
<a href="cgi-bin/netstat.sh">Stato delle connessioni di rete del server</a>
<br>
<br>
<a href="cgi-bin/anlgform.pl">Qui</a> sono invece disponibili i dati statistici
sull'accesso al sito.<br>
<br> <a href="anlgform.html">Qui</a> si pu&ograve; ottenere una statistica
degli accessi al sito selezionandone gli specifici campi con un modulo
</BODY>
</HTML>

Il file netstat.sh contiene lo script che segue:

#!/bin/dash
cat <<EOF
Content-Type: text/html

<HTML>
<HEAD>
<TITLE>Stato connessioni di rete</TITLE>
</HEAD>
<BODY>
<img alt="connessioni" src="../Immagini/connessioni_48.png"><br>
<pre>
$(netstat -atu 2>&1)
</pre>
</BODY>
</HTML>
EOF

La pagina web si presenterà in questo modo:

Pagina di controllo dello stato del server.

Menù del sito

Stato delle connessioni di rete del server

Qui sono invece disponibili i dati statistici sull'accesso al sito.

Qui si può ottenere una statistica degli accessi al sito selezionandone gli specifici campi con un modulo

Mandando in esecuzione lo script netstat.sh il server HTTP otterrà in output la pagina web dinamica, che sarà simile a quella riprodotta nell'illustrazione 1.

Output script netstat.sh
Illustrazione 1: netstat.sh

Torna all'indice

2 - Generazione di un report di statistiche mediante l'esecuzione di uno script CGI

Usando la stessa pagina html del paragrafo precedente, mandando in esecuzione il secondo script lì disponibile, ossia anlgform.pl, si apre una pagina riportante i risultati dell'analisi dei log effettuata dal comando analog.

Da notare che mettendo nel file di configurazione generale di analog, ossia in /etc/analog.cfg, la riga:

LOGFILE access_log

il comando analog andrà a leggere i dati da analizzare nel file /var/log/httpd/access_log, ossia assume di default che il file risieda nella directory /var/log/httpd. Si ricordi che analog si legge il file di configurazione globale /etc/analog.cfg sia quando è mandato in esecuzione da una pagina del sito di default (in /var/www/) che quando è mandato in esecuzione dal sito di un utente (in ~utente/public_html) che da un sito virtuale (ovunque sia collocato sul filesystem). E perciò le voci di default di questo file di configurazione varranno per tutti i siti gestiti dal web server. In genere questo non è quello che si desidera. Ad esempio, potendo il web server gestire i log dei siti virtuali in file specifici diversi da dominio a dominio, si vorrà con ogni probabilità usare questi file per avere le statistiche di un sito specifico, invece di avere le statistiche generali di tutto il server. Inoltre si vorrà anche cambiare il nome dell'HOST e la sua HOSTURL sulla pagina delle statistiche perché riflettano il nome e la URL del sito virtuale cui si riferiscono le statistiche.

Nel seguito si esporranno due modi in cui si può far analizzare ad analog il file /var/www/log/sito.log invece di quello di default /var/log/httpd/access_log:

  1. si fa uso dell'ultimo link a disposizione nella pagina index.html del sito e si edita il file anlgform.html installato dal pacchetto analog che si è copiato nella directory del sito cambiando nella riga seguente il percorso e/o il nome del file di log da:

    <input type=hidden name="LOGFILE" value="/var/www/access_log">

    a:

    <input type=hidden name="LOGFILE" value="/var/www/log/sito.log">

    (si tenga a mente il fatto che i log in /var/log/httpd/ sono di solito inaccessibili agli utenti non privilegiati e quindi anche al processo analog);

  2. editando lo stesso file per aggiungere nel modulo la possibilità di specificare un file di propria scelta diverso da quello di default modificando la riga:

    <input type=hidden name="LOGFILE" value="/var/www/log/access_log">

    in, ad esempio:

    Logfile name: <input type=text name="LOGFILE"
     value="/var/www/log/access_log">

È opportuno anche fare in modo che il titolo della pagina delle statistiche rifletta il nome e l'indirizzo del sito, piuttosto che lasciare quello di default specificato nel file di configurazione.

Nel file di configurazione /etc/analog.cfg questi dati sono specificati nelle due righe seguenti:

HOSTNAME "localhost.localdomain"
HOSTURL "http://localhost.localdomain/"

Se si è configurato il web server per gestire numerosi siti, per diversi utenti o siti virtuali, si deve specificare di volta in volta ad analog quali valori queste voci devono avere. A mano, direttamente sulla riga di comando, per generare un tale file di log si farebbe così (tutto sulla stessa riga):

[utente@server ~]$ analog +C'HOSTNAME "Miosito.it"' \
+C'HOSTURL "http://miosito.it"' +Opublic_html/statistiche.html \
public_html/accessi_log

Questa riga di comando istruisce analog a produrre il file di statistiche public_html/statistiche.html a partire dai dati di log contenuti nel file public_html/accessi_log.  Inoltre deve prima cambiare il valore della voce HOST con la stringa “Miosito.it” e della voce HOSTURL con la stringa “http://miosito.it”, ignorando i valori che queste voci possono avere nel file di configurazione.

Si faccia attenzione a NON lasciare spazi tra gli switch +C e +O e i loro parametri!  In questo caso analog non si comporta come il tipico comando UNIX.

Il file con il modulo html anlgform.html installato dal pacchetto analog è predisposto per permettere all'utente di cambiare il nome del sito (ossia la variabile HOSTURL) nella quarta ed ultima sezione della pagina, Layout (si veda l'illustrazione 2).

Modulo anlgform.html - 1
Illustrazione 2: anlgform.html


Per attribuire alla variabile HOSTURL un valore di default (che non è impostato nel file del modulo e che quindi assume il nome di host del server, in generale diverso dal nome di un dominio virtuale), vi si cambia la riga:

<br>URL: <input type=TEXT name="HOSTURL" size=60>

in:

<br>URL: <input type=TEXT name="HOSTURL" value="http://miosito.it" size=60>

La stessa cosa si può fare con la variabile HOSTNAME, cambiando nel file del modulo html la riga:

<input type=TEXT name="HOSTNAME" size=60>

in:

<input type=TEXT name="HOSTNAME" value="miosito.it" size=60>

La pagina con il modulo html alla fine si presenta, nella sua parte finale, senza input da parte dell'utente:

Modulo anlgform.html - 2
Illustrazione 3: anlgform.html - modificato


Cliccato il tasto “Produce statistics” si ottiene il report finale, riprodotto nell'illustrazione 4:

Output script anlgform.pl
Illustrazione 4: report finale

Torna all'indice

3 - Generazione di statistiche su base cronologica accessibili come testi statici via web

Nel caso si volesse generare una pagina di statistiche non dinamicamente via web ma ad ogni dato momento, ad esempio ogni giorno a mezzanotte, allora si può configurare un cron job come il seguente nel file di configurazione del cron di sistema /etc/crontab1:

0 0 * * * root /usr/bin/analog -G +g~tecnico/.analogrc \
+O~tecnico/public_html/statistiche_$(date '+%Y-%m-%d').html \
/var/log/httpd/miosito.it-access_log

Questo cronbjob esegue alle 0:0 di ogni giorno (ossia a mezzanotte, alcuni cron ammettono come equivalente l'ora 0 24) il comando analog che:

Il file di configurazione ~tecnico/.analogrc potrebbe essere una copia di quello globale /etc/analog.cfg cui sono state modificate le voci:


Sarà quindi responsabilità del webmaster (di chi sviluppa il sito, cioè) rendere le pagine così generate disponibili ad una precisa pagina del sito stesso.
Torna all'indice


Note
1Si ricordi che a seconda dell'implementazione del servizio cron installato questo file potrebbe non esistere
On line da marzo 2010
Ultima modifica: 12 agosto 2011


< Torna al livello superiore <
<< Torna alla pagina inziale <<