Log Parser. Analizar y explotar la información de los ficheros logs de IIS.

Utilidades
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:

logparser_diagrama1

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 FilesLog 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:MyDBMyDB.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_logsIISex» & 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:

sesiones_chart

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.

José Manuel Martín

Me llamo Jose Martin, me dedico al mundo del e-learning desde el año 2001. Actualmente soy Director de producto en NETEX y estoy especialmente interesado en: Gamificación, Learning Analytics, Mobile learning, learning Experience Platforms y, en general, todos los proyectos de formación online que requieren de una parte tecnológica y de innovación importante.

13 comentarios en “Log Parser. Analizar y explotar la información de los ficheros logs de IIS.”

  1. Hola!
    Queria felicitarte por esta web. Es la unica que me ha ayudado a empezar con Log Parser.
    Como te digo estoy empezando y me resulta bastante complicado.
    Los log que tengo que analizar no son de microsoft, si no de exportacion de SQL.
    Tambien me valdria esta aplicacion?

    Un saludo

  2. Buenas noches,
    Me gustaria saber de que forma puedo saber el numero de correos electronico que entran cada dia por usuario. Utilizo Outlook. Muchisimas gracias

  3. Buenos días José Manuel, me parece muy interesante la herramienta de parseo que presentas, y me gustará conocer más sobre ella.
    Mi idea es exportar a sql un log de un servidor w2003 para obtener datos estadísticos y gráficos.

    Creo que esta aplicación me puede ser muy útil, ¿sabes donde puedo encontrar algún manual?

    Gracias, un saludo!

  4. José Manuel, he estado recabando información sobre herramientas que me permitieran auditar el log en un terminal server, porque piwik me parecía más orientado a la obtención de estadísticas web.
    Mi búsqueda ha sido nefasta, todo el software que he encontrado es de pago, hoy voy a intentar si piwik me aporta los datos que necesito, si conoces de otra herramienta me serías realmente de ayuda.
    He probado con Observe IT, pero me da problemas con w7.

    Saludos

  5. Pues te comento, pensaba hacer mi proyecto fin de carrera sobre auditorías de terminal server, he estado probando demos de algunos de pago, como «solidaudit», «terminal server log», «splunk» lo he tocado también pero no he sacado nada en claro. Si hubiese alguno free me sería de utilidad, pero no encuentro.

    Por otro lado estoy tras la búsqueda de los ficheros del servidor w2003 que me aporten la informacion sobre las conexiones/desconexiones, ip, tiempos de conexion, etc…
    Había pensado usar parselog para extraer los datos en una bbdd SQL y realizar un pequeño programa de consulta.

  6. Ya te entiendo.

    Creo que Logparser se adapta perfectamente a lo que necesitas pero primero asegúrate de que configuras el IIS para que almacene toda la información que requieres.

    Los logs del IIS te pueden dar información sobre Ips, fecha-hora de conexión, etc y si lo combinas con WMI (Set wmi = GetObject(«winmgmts:root/cimv2»)), podrías tener datos en tiempo real sobre número de conexiones simultáneas, usuarios, máximo de conexiones soportadas, etc.

    Lo más complicado es obtener el número de sesiones, porque no es fácil controlar la salida de sesión

  7. Ya he encontrado los ficheros de sucesos que buscaba y los he filtrado para obtener solo las conexiones y desconexiones, ahora manos a la obra sobre c# .net 😀

    A ver si sale algo potable, gracias por todo Jose Manuel, un saludo!

  8. Hola Jose Manuel, vi que quedo pendiente una respuesta que es la misma que estoy necesitando inicialmente para trabajar sobre los message tracking del Exchange 2003. Sabrías indicarme como reportar los correos que entran por usuarios.
    Gracias y muy explicativa el post!
    Saludos

  9. Hola Jose Manuel

    te hago la siguiente consulta
    tengo que procesar un log de auditorias de un windows nt 4
    probe con logparser 2.2 y 2.1 y no los puedo procesar me dicen que debo usar logparser 2.0 pero no se donde conseguir esta version.
    Otra forma q se me ocurre es haciendo una pequeña aplicacion en .net pero no se que namespace utilizar
    desde ya muchas gracias

    Saludos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *