
Utilidades
Log Parser es una poderosa herramienta para el acceso a datos basados en texto que permite obtener información sobre distintos orígenes como ficheros log de Internet Information Services (IIS), del visor de eventos, del Directorio Activo, ficheros XML o CSV mediante sencillas sentencias muy similares al lenguaje T-SQL.
Además de permitir una gran variedad de orígenes permite una gran cantidad de formatos de salida como veremos en este artículo.
Las utilidades de esta navaja multiuso son infinitas, yo lo he implantado en mi empresa para depurar aplicaciones en explotación (detectando errores HTTP 500 o 404), obtener datos de uso como número de sesiones, bytes descargados, tiempo medio de respuesta del servidor, etc.
Parte de mi trabajo es administrar los servidores de mi empresa, la mayoría servidores WEB, y a medida que el número de servidores aumenta , la tarea me consume más y más tiempo. Por eso intento buscar herramientas que me ayuden a reducir el tiempo que empleo o que me permitan sacar más partido de toda la información que me rodea. Ya sabéis, aumentar la productividad es aumentar el sueldo
Cualquier administrador de servidores WEB sabe que existe una caja negra, rebosando de información a la espera de que alguien la explote: los ficheros log, en el caso de mi empresa los ficheros log de IIS. Estos ficheros contienen una gran cantidad de datos pero es dificil explotarlos directamente precisamente por la abrumadora cantidad de información que poseen pero si somos capaces de sacar partido de esta caja negra seremos capaces de obtener datos importantes como:
- Análisis forense de datos. Detectar errores en aplicaciones en explotación y resolverlos adecuadamente.
- Información imprescindible para marketing. Estadísticas de visitas, páginas mas vistas, tiempo de estancia en el sitio, etc.
- Análisis de seguridad. Detección de ataques.
- Datos sobre la salud del servidor para tomar decisiones como ampliación de hardware, aumento del número de servidores..
En este artículo me voy a centrar en el uso de Log Parser orientado a la explotación de datos provenientes de los ficheros log del Internet Information Server , aunque existen otras muchas posibles utilidades como muestra el siguiente diagrama:

Para empezar necesitaremos descargar Log Parser desde el sitio de Microsoft, por supuesto se trata de una descarga gratuita. Una vez instalado veremos que además de un acceso directo para ejecutar directamente el programa tenemos un completo manual en formato CHM con documentación sobre cómo usarlo.
Al ejecutar Log Parser, se nos abre una ventana de MSDOS donde podemos empezar a ejecutar nuestras sentencias desde linea de comandos. Por ejemplo una sentencia como ésta nos devolverá el tamaño medio en bytes servidor->cliente por día:
C:\Program Files\Log Parser 2.2>
logparser “SELECT Date, AVG(sc-bytes) AS Bytes FROM C:\iis.log GROUP BY Date ORDER BY Date ASC” -i IISW3C
date Bytes
———- —–
2009-03-20 257
Como veis la sintaxis se parece mucho al formato T-SQL, en general lo que funciona en SQL funciona en Log Parser con algunas excepciones.
En la claúsula FROM indicamos la ruta del fichero LOG del IIS que deseamos leer. También podemos usar la sintaxis C:\directorio\*.log para indicar que queremos que lea todos los ficheros LOG contenidos en un directorio específico.
Después de la sentencia SQL añadimos el parámetro -i para indicar el formato de los datos de entrada, es decir, el formato de los datos en bruto que vamos a analizar. En nuestro caso se trata de un fichero LOG del IIS, por lo tanto el formato es IISW3C.
Si no indicamos nada más el resultado se nos muestra en la misma linea de comandos, pero podríamos añadir el parámetro -o para indicar el formato de la salida y guardarlo en un fichero CSV, por ejemplo:
logparser “SELECT Date, AVG(sc-bytes) AS Bytes INTO C:\resultado.csv FROM C:\iis.log GROUP BY Date ORDER BY Date ASC” -i IISW3C -o CSV
O en una Base de datos Access.
logparser “SELECT Date, AVG(sc-bytes) AS Bytes INTO C:\resultado.csv FROM C:\iis.log GROUP BY Date ORDER BY Date ASC”
-i IISW3C
-o:SQL -oConnString:”Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\MyDB\MyDB.mdb;Uid=MyUsername;Pwd=MyPassword”
El modo de conseguir el máximo rendimiento de esta herramienta es utilizarla dentro de scripts (VBS por ejemplo) y programar tareas para que se ejecuten periódicamente. Así, por ejemplo podemos programar un script que recorra diariamente todos los ficheros logs del IIS generados en ese día por el servidor y que vuelque los datos una una base de datos Microsoft SQL para poder explotarlos posteriormente. El script sería parecido a éste:
‘************************** Set Input and Output formats *********************
Set objLogParser = CreateObject(“MSUtil.LogQuery”)
Set objInputFormat = CreateObject(“MSUtil.LogQuery.IISW3CInputFormat”)
Set objOutputFormat = CreateObject(“MSUtil.LogQuery.SQLOutputFormat”)
objOutputFormat.Server =”ip DB server”
objOutputFormat.database =”IISLogsDatabase”
objOutputFormat.username =”IISLogsDatabaseUsername”
objOutputFormat.password =”IISLogsDatabasepass.”
objOutputFormat.CreateTable = True ‘ create table if not exists
‘********************************* Today IIS log file exaammdd.log *************
strDate=Date
d = DatePart(“D”,strDate)
m = DatePart(“M”,strDate)
y = DatePart(“YYYY”,strDate)
if len(d) < 2 then
d = “0″ & d
end if
if len(m) < 2 then
m = “0″ & m
end if
strInputDate = right(y,2) & m & d
todayiislogfile = “ruta_al_directorio_logsIIS\ex” & strInputDate & “.log”
‘===================================================================================
‘********************************* Main Program **********************************
LogParserExecuteQuery todayiislogfile,”dbname”
sub LogParserExecuteQuery(LogFile,DataBaseName)
‘===================================================================================
‘******************************** This calls the job **********************************
objInputFormat.iCheckPoint=”C:\CheckPoints\” & DataBaseName & “.lpc” ‘parsing input incrementally
strQuery = “select ….”
objLogParser.ExecuteBatch strQuery, objInputFormat, objOutputFormat
end sub
Otra utilidad muy interesante de Log Parser es la capacidad que tiene para generar gráficos. En este caso en vez de indicar que el formato de salida es SQL, debemos indicar que el formato de salida es CHART, es decir:
Set objOutputFormat = CreateObject(“MSUtil.LogQuery.ChartOutputFormat”)
Podemos personalizar el gráfico de salida con algunos parámetros como el título, el tamaño y el tipo, por ejemplo:
objOutputFormat.chartType =”ColumnClustered”
objOutputFormat.chartTitle =”Titulo del grafico”
objOutputFormat.groupSize =”420×280″
El resultado sería algo similar a esto:

Como ves el único límite a Log Parser es tu imaginación.
Puedes descargar Log Parser desde aquí. En nuestra sección de descargas encontrarás un manual muy completo en formato CHM y una herramienta visual GUI para construir tus sentencias más fácilmente. También te recomiendo pasarte por el foro no oficial de Log Parser.
Como último recurso aquí tienes un libro muy completo.