Oggi interroghiamo in pò di log…

Oggi, dopo diversi mesi, sono tornato nuovamente a giocare (si fa per dire) con LogParser di Microsoft per cercare di estrapolare un pò di dati utili dai log prodotti da Windows Media Server. Fin qui niente di particolare, a parte qualche accorgimento per interpretare correttamente i dati memorizzati il resto è solo questione di capire precisamente cosa si vuol mettere in evidenza. Il compito è indubbiamente facilitato proprio da LogParser che permette di interrogare i dati memorizzati in log di varia natura e nei formati più disparati con un linguaggio in stile SQL. Ve l’ho mai detto che è uno strumento eccezionale ed utilissimo? Se non ci credete o non lo avete mai visto all’opera, scaricatelo e provatelo dandogli in pasto qualche log, poi stupitevi. Giunti a questo punto mi sono detto “perfetto, ma se volessi automatizzare un pò il tutto?“. Beh nessun problema, dovete sapere che oltre a essere un tool da linea di comando, questo simpatico applicativo offre la possibilità di essere integrato in altri programmi presentandosi come oggetto COM, nessuno quindi vieta di crearsi il proprio progettino in C# (o quello che preferite) con cui interrogare le vostre tonnellate di log attraverso il suo motore, fornendogli semplicemente delle query ad hoc. Tutto molto bello, però mi sono dimenticato di confessarvi una cosa e cioè che oggi ero particolarmente svogliato, sinceramente l’idea di aprire Visual Studio non mi ispirava per niente e quindi mi sono chiesto: “Ruby?“. Per rispondermi ho semplicemente aperto il mio fido SciTE e ho cominciato a buttar giù due righe…

1 require 'win32ole' 2 3 logparser_query = WIN32OLE.new('MSUtil.LogQuery') 4 logparser_input = WIN32OLE.new('MSUtil.LogQuery.W3CInputFormat') 5 6 recordset = logparser_query.execute("SELECT c-ip FROM prova.log", logparser_input) 7 8 while !recordset.atEnd do 9 record = recordset.getRecord 10 puts record.getValue('c-ip') 11 recordset.moveNext 12 end

L’idea funziona, non avevo dubbi del resto. Potrei quasi farci un servizio windows usando la gemma win32-service e fargli generare dei report giornalieri, settimanali e mensili da inviare in mail. In più potrei usarlo per scremare i dati eliminando le colonne inutili e precalcolando alcuni valori per poi inviare il tutto con cadenza giornaliera verso un unico database (anche MySQL andrebbe benissimo) che raccolga nella nostra intranet i dati utili raccolti da più server media. Non è un lavoro complesso, più che altro preferirei la massima flessibilità e proprio per questo vorrei usare Ruby appoggiandomi però alle potenzialità di LogParser, insomma il meglio di due mondi diversi. Una piccola pecca ci sarebbe, il codice risultante si presenta in maniera veramente poco Ruby-ish con quel while, quel moveNext e quel getValue. Orribile… e se facessi una piccola libreria wrapper? Uhm, interessante… :)


Puoi scrivere un commento oppure inviare un trackback dal tuo sito.

Lascia un commento

Puoi utilizzare i seguenti tag XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>