Si dice che un’immagine valga mille parole, quindi dopo aver introdotto LogParser ed aver mostrato alcuni script d’esempio per filtrare vari tipi di log, vediamo questa volta come presentare l’output delle nostre query in un grafico.

Per prima cosa dobbiamo installare gli Office Web Components, senza di questi otterremmo un errore simile a questo:

Error creating output format "chart": This output format requires a licensed Microsoft Office Chart Web Component to be installed on the local machine

Mentre l’help di LogParser ci dice questo:

chartType
Values: name of chart type
Default: Line
Description: Chart type
Details: The set of available chart types depends on the version of the Microsoft Office Web Components installed on the local computer.
For a list of the available chart types, type the following
help command from the command-line shell: 
     LogParser -h -o:CHART

L’ultima versione degli Office Web Components che ho trovato disponibile su Internet è la versione 11, rilasciata con Office 2003, ecco i link per il download:

Alcuni esempi

Basato su un log di IIS, questo grafico a torta mostra la quantità di bytes serviti per ogni tipo di file:

LogParser 
"SELECT TO_UPPERCASE(EXTRACT_EXTENSION(cs-uri-stem)) AS PageType, MUL(PROPSUM(sc-bytes),100.0) AS Bytes
INTO Pie.gif FROM *.log
GROUP BY PageType ORDER BY Bytes DESC"
-chartType:PieExploded -chartTitle:"Bytes per data type" -categories:off -o:chart -i:iisw3c

bytes per data type


Questa volta vediamo gli stessi dati ma espressi in percentuale e con una torta in 3D

logparser 
"select extract_extension(cs-uri-stem) as Resource, mul(propcount(*),100.0) as ResourceHits
into percentage.jpg from *.log
group by Resource order by ResourceHits desc"
-chartType:PieExploded3D -chartTitle:"Percentages per data type" -categories:off -o:chart -i:iisw3c

percentages per type

Questo può essere interessante per farsi un’idea delle pagine di un sito che ricevono il maggior numero di visite:

logparser 
"select quantize(time, 60) as TimeGenerated, count(*) as Hits
into qnt.gif from *.log
where to_lowercase(extract_extension(cs-uri-stem))='aspx' group by TimeGenerated"
-i:iisw3c -o:chart -chartType:Line


aspx pages per minute

Ottenere il numero di visitatori unici (in effetti si tratta del numero di ip univoci) che visitano il nostro sito è un po’ più complesso. Teoricamente la query da utilizzare sarebbe questa:

select date, count(distinct c-ip) into UniqueIPs.gif from *.log group by date" -i:iisw3c -o:chart -chartType:Line


ma se provassimo, otterremmo questo errore:

Error: Semantic Error: aggregate functions with DISTINCT arguments are not supported with GROUP BY clauses

In questo caso la soluzione sta nel dividere la query in due, salvando il risultato della prima in un file di testo sul quale lavoreremo nella seconda query:

@echo off 

logparser
"select distinct date, c-ip into dates.txt from *.log" -i:iisw3c -o:w3c

logparser
"select date, count(c-ip) as UniqueIPs into UniqueIPs.gif
from dates.txt group by date order by date"
-i:iisw3c -o:chart -chartType:SmoothLine -view:on


ip univoci

 

Script di configurazione

Usando un linguaggio di scripting tipo JScript o VBScript è possibile creare una sorta di file di configurazione che permette di avere un maggiore controllo sul grafico che creeremo: questo maccanismo si basa su due oggetti globali che espongono Proprietà e Metodi che possono essere utilizzati per modificare aspetti quali i colori ed i font utilizzati, ed un buon numero di altri attributi. Questi due oggetti globali sono istanze degli oggetti chart e chartSpace appartenenti al Microsoft Office Web Components ChartSpace object model: per maggiori informazioni circa questi oggetti vi consiglio la MSDN ChartSpace Object Model documentation.

Riprendendo l’esempio precedente, possiamo modificare il colore di sfondo del grafico, aggiungere una Caption e modificare la dimensione del font utilizzato:

// Add a caption
chartSpace.HasChartSpaceTitle = true;
chartSpace.ChartSpaceTitle.Caption = "Generated by Log Parser 2.2";
chartSpace.ChartSpaceTitle.Font.Size = 8;
chartSpace.ChartSpaceTitle.Position = chartSpace.Constants.chTitlePositionBottom;

// Change the background color
chart.PlotArea.Interior.Color = chartSpace.Constants.chColorNone;

 
@echo off 

logparser
"select distinct date, c-ip into dates.txt from *.log" -i:iisw3c -o:w3c

logparser
"select date, count(c-ip) as UniqueIPs into UniqueIPs.gif
from dates.txt group by date order by date"
-i:iisw3c -o:chart -chartType:SmoothLine -config:MyScript.js -groupSize: 800x600 -view:on


ip univoci con script di configurazione

Partendo da qui dovreste avere materiale sufficiente per fare altri esperimenti e migliorare ulteriormente l’aspetto dei vostri grafici: il limite è solo la vostra immaginazione Smile

Carlo Cardella
Senior Support Engineer
EMEA IIS and Web Developer Support