Sia per i siti Web sia per siti FTP ospitati su server IIS è possibile abilitare la registrazione (in inglese "Logging") delle informazioni relative alle richieste effettuate dai client. In questo articolo, esaminiamo sinteticamente le finalità della registrazione, i formati disponibili all'interno del server IIS e le principali opzioni di configurazione, per concludere infine con alcuni esempi di analisi statistica effettuata sui dati registrati.
Finalità della registrazione
Anche se possono risultare intuitive, è utile riassumere le motivazioni principali e le finalità del Logging:
- monitorare le prestazioni del Web server, allo scopo di conoscere la frequenza delle richieste HTTP ed i tempi di risposta, controllare il carico di lavoro del server, identificare eventuali colli di bottiglia e pianificare misure di protezione per il sito
- disporre di informazioni dettagliate sulle richieste HTTP che consentano di indagare sulla causa di eventuali malfunzionamenti del sito Web
- costruire una base dati relativa all'attività dei visitatori del sito, con l'obiettivo di effettuare analisi statistiche e comportamentali
I formati disponibili a confronto
IIS6.0 dispone di cinque differenti formati di registrazione, elencati nella tabella seguente insieme alle principali caratteristiche distintive:
Formato di file registro W3C esteso | Formato di file registro comune NCSA | Formato di file registro IIS | Registrazione ODBC | Registrazione binaria centralizzata | |
---|---|---|---|---|---|
Tipo di supporto | File di testo | File di testo | File di testo | Sorgente dati ODBC | File binario |
Carattere separatore | Spazio | Spazio | Virgola | ||
Orario ("Time zone") | UTC | Locale | Locale | Locale | Locale |
Misura del tempo totale di risposta | Sì | Sì | Sì | No | Sì |
Informazioni registrate | A scelta | Fisse | Fisse | Fisse | Fisse |
Prefisso del nome del file | ex (oppure extend) | nc (oppure ncsa) | in (oppure inetsv) | raw |
Tipo di supporto
I primi 3 tipi di formato prevedono la registrazione su file di testo. Per i siti Web è possibile selezionare la codifica UTF-8 invece della tabella codici locale (configurazione a livello di server), mentre per i siti FTP non è disponibile la codifica UTF-8.
Per impostazione predefinita i files sono memorizzati nella directory:
%systemroot%System32LogFiles
La Registrazione ODBC consente di memorizzare le informazioni di Logging all'interno di una fonte dati ODBC.
Orario ("Time zone")
Il Formato di file registro W3C esteso utilizza l'orario UTC (Coordinated Universal Time), mentre tutti gli altri utilizzano l'orario locale (quello impostato sul server IIS). Poichè UTC coincide sostanzialmente con GMT (Greenwich Mean Time), osservando un registro in formato W3C esteso, si nota che l'orario delle registrazioni risulta essere un'ora indietro rispetto all'orario italiano (due ore indietro quando è in vigore l'ora legale).
Misura del tempo totale di risposta
Tutti i formati, ad esclusione della "Registrazione ODBC", riportano l'informazione del tempo di elaborazione della richiesta e della risposta al netto del trasferimento in rete: viene misurato l'intervallo di tempo (in millisecondi) che intercorre tra l'istante in cui arriva il primo byte della richiesta e l'istante in cui termina l'invio della risposta.
Informazioni registrate
A differenza degli altri formati, il "Formato di file registro W3C esteso" consente di selezionare da un elenco le informazioni da registrare, omettendo quelle indesiderate, in modo da contenere la dimensione del registro.
Prefisso del nome del file
Il nome del file di log è costituito da un prefisso seguito da un numero progressivo (quando il criterio di rotazione è basato sulla dimensione massima) oppure da un identificativo di data e/o ora (quando il criterio di rotazione si basa su un intervallo temporale).
Formato di file registro W3C esteso
È l'unico formato personalizzabile, che consente cioè di selezionare quali proprietà si desidera registrare
L'esempio seguente mostra la registrazione della richiesta HTTP relativa alla pagina index.html secondo il formato W3C esteso (con la configurazione predefinita):
#Software: Microsoft Internet Information Services 6.0 #Version: 1.0 #Date: 2008-07-10 20:35:05 #Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status 2008-07-10 20:35:05 127.0.0.1 GET /index.html - 80 - 127.0.0.1 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.2;+.NET+CLR+1.1.4322) 200 0 0
#Fields
riporta i nomi delle proprietà registrate per ogni richiesta (sono le intestazioni di colonna). L'elenco completo delle proprietà registrabili è contenuto nella tabella seguente:
Informazione | Nome del campo | Descrizione del campo |
---|---|---|
Data | date |
Data della registrazione |
Ora | time |
Ora della registrazione |
Indirizzo IP client | c-ip |
Indirizzo IP del client |
Nome utente | cs-username |
Nome dell'utente autenticato (quando disponibile) |
Nome servizio | s-sitename |
Nome del servizio |
Nome server | s-computername |
Nome del server |
Indirizzo IP server | s-ip |
Indirizzo IP del server |
Porta server | s-port |
Numero della porta che ha ricevuto la richiesta |
Metodo | cs-method |
Metodo HTTP (GET, POST, ...) |
Origine URI | cs-uri-stem |
Risorsa richiesta |
Query URI | cs-uri-query |
Query effettuata dal client |
Stato protocollo | sc-status |
Codice di risposta del protocollo |
Stato Win32 | sc-win32-status |
Codice di stato o di errore di Windows (0 = nessun errore) |
Byte inviati | sc-bytes |
Numero di bytes inviati dal server |
Byte ricevuti | cs-bytes |
Numero di bytes ricevuti dal server |
Tempo impiegato | time-taken |
Tempo di elaborazione in millisecondi |
Versione protocollo | cs-version |
Versione del protocollo (HTTP, FTP). Nel caso del protocollo HTTP, la versione sarà HTTP 1.0 o HTTP 1.1 |
Host | cs-host |
Intestazione host |
Agente utente | cs(User-Agent) |
Informazioni sul browser utilizzato dal client |
Cookie | cs(Cookie) |
Eventuale contenuto del cookie inviato o ricevuto |
Provenienza | cs(Referer) |
URL precedente |
Legenda dei prefissi
s = server c = client cs = da client a server sc = da server a client
Per le informazioni mancanti viene indicato un trattino.
Formato di file registro comune NCSA
Questo formato è disponibile per i siti Web ma non per i siti FTP. L'esempio seguente mostra le registrazione relativa alla richiesta della medesima pagina index.html:
127.0.0.1 - - [10/Jul/2008:22:48:10 +0200] "GET /index.html HTTP/1.1" 200 2592
Scomponiamo questo log ed esaminiamo le informazioni registrate nella tabella seguente:
Informazione | Descrizione |
---|---|
127.0.0.1 |
Indirizzo IP del client |
- |
Nome del registro remoto (quando disponibile) |
- |
Nome dell'utente autenticato (quando disponibile) |
10/Jul/2008 |
Data |
22:48:10 |
Ora |
+0200 |
Differenza d'orario rispetto al GMT |
GET /index.html HTTP/1.1 |
Richiesta HTTP |
200 |
Codice di risposta del protocollo |
2592 |
Numero di bytes inviati dal server |
Formato di file registro IIS
L'esempio seguente mostra la registrazione della richiesta della medesima pagina index.html, questa volta con il formato "File registro IIS":
127.0.0.1, -, 7/10/2008, 22:49:44, W3SVC1, SERVER1, 127.0.0.1, 40, 306, 2592, 200, 0, GET, /index.html, -,
Le informazioni registrate sono descritte nella seguente tabella:
Informazione | Descrizione |
---|---|
127.0.0.1 |
Indirizzo IP del client |
anonymous |
Nome dell'utente autenticato (qualora disponibile) |
10/07/2008 |
Data |
22:49:44 |
Ora |
W3SVC1 |
Nome del servizio |
SERVER1 |
Nome del server |
127.0.0.1 |
Indirizzo IP del server |
40 |
Tempo di elaborazione in millisecondi |
306 |
Numero di bytes ricevuti dal server |
2592 |
Numero di bytes inviati dal server |
200 |
Codice di risposta del protocollo |
0 |
Codice di stato o di errore di Windows (0 = nessun errore) |
GET |
Metodo HTTP (GET, POST, ...) |
/index.html |
Risorsa richiesta |
- |
Parametri (qualora disponibili) |
Registrazione ODBC
Utilizza una fonte dati ODBC per la registrazione dell'attività del sito. L'elenco delle proprietà e il formato della tabella di destinazione sono fissi. Per configurare la registrazione ODBC occorre effettuare le seguenti attività:
- Creare un nuovo database (nel seguito si farà riferimento ad un database Microsoft Access)
- Creare la tabella per le registrazioni, eseguendo lo script Logtemp.sql contenuto all'interno della directory
%systemroot%System32Inetsrv
(si suggerisce di rinominare la tabella in "InternetLog" per coerenza con le impostazioni predefinite di IIS) - Definire un Data Source Name ODBC di sistema chiamato HTTPLOG, configurandolo per la connessione al database creato in precedenza
- Dalla finestra delle proprietà del sito Web, impostare i parametri per la connessione al database: il nome del DSN, il nome della tabella e le credenziali dell'utente.
Le informazioni registrate sono indicate nella tabella seguente:
Nome del campo | Tipo di dato | Descrizione |
---|---|---|
ClientHost |
varchar(255) |
Indirizzo IP del client |
Username |
varchar(255) |
Nome dell'utente autenticato (qualora disponibile) |
LogTime |
datetime |
Data e ora della registrazione |
Service |
varchar(255) |
Nome del servizio |
Machine |
varchar(255) |
Nome del server |
ServerIP |
varchar(50) |
Indirizzo IP del server |
ProcessingTime |
int |
Tempo di elaborazione in millisecondi |
BytesRecvd |
int |
Numero di bytes ricevuti |
BytesSent |
int |
Numero di bytes inviati |
ServiceStatus |
int |
Codice di risposta del protocollo |
Win32Status |
int |
Codice di stato o di errore di Windows (0 = nessun errore) |
Operation |
varchar(255) |
Metodo HTTP |
Target |
varchar(255) |
Risorsa richiesta |
Parameters |
varchar(255) |
Parametri (qualora disponibili) |
La registrazione ODBC consente di effettuare agevolmente analisi statistiche sugli accessi al sito Web. La query SQL seguente, per esempio:
SELECT InternetLog.target AS Pagina, Count(*) AS [Numero di richieste] FROM InternetLog GROUP BY InternetLog.target;
fornisce, per ogni risorsa, il numero totale di richieste effettuate ed è utile ad analizzare la distribuzione delle richieste degli utenti sull'intero parco di risorse disponibili nel sito Web.
La query SQL seguente:
SELECT DateSerial(Year(LogTime), Month(LogTime), Day(LogTime)) AS Data, Count(*) AS [Numero di richieste] FROM InternetLog GROUP BY DateSerial(Year(LogTime), Month(LogTime), Day(LogTime)) ORDER BY DateSerial (Year(LogTime), Month(LogTime), Day(LogTime));
costruisce un prospetto che fornisce il numero totale di richieste per ogni giorno, ed è interessante per l'analisi del carico giornaliero.
Infine la seguente query SQL:
SELECT Hour(LogTime) & ':00' AS Ora, SUM(InternetLog.bytessent) AS [Bytes inviati] FROM InternetLog WHERE Format(LogTime,'DD/MM/YYYY')=Giorno GROUP BY Hour(LogTime) ORDER BY Hour(LogTime);
consente di analizzare il carico orario in termini di numero totale di bytes inviati (per un determinato giorno inserito come parametro di input della query). Esportando poi il risultato della query su Microsoft Excel, è agevole creare un grafico che fornisce una visualizzazione immediata dell'analisi effettuata.
Registrazione binaria centralizzata
Questa impostazione consente a tutti i siti Web ospitati all'interno di in un server IIS specifico di registrare le informazioni di Logging in un unico contenitore centralizzato in formato binario. La trattazione dettagliata di questo tipo di formato esula dalle finalità del presente articolo.