Consulta de registros de IIS con Log Parser
Estamos llegando al final del ciclo de vida de los servidores actuales y nos estamos preparando para migrar de IIS a RedHat. Mientras se lleva a cabo la planificación de esta migración, es necesario obtener estadísticas sobre el tráfico en ciertas carpetas y los horarios de uso. Esto nos permitirá decidir qué se migrará y qué se conservará únicamente en el snapshot final.
Para esta tarea, recurrí a Log Parser, una herramienta lanzada en 2010 que permite ejecutar consultas sobre archivos de texto (en mi caso, archivos .log) utilizando una sintaxis similar a SQL. Sin embargo, me encontré con una sorpresa: aunque utiliza SQL, no se trata del estándar, ni siquiera del SQL usado por SQL Server. Su sintaxis es particular y algo de nicho, lo que hace que sea complicado obtener ayuda directa de herramientas de inteligencia artificial.
Probé generar consultas con ChatGPT y Gemini, pero ambas herramientas fallaron al dar una respuesta precisa debido a la naturaleza especializada, y no estandarizada del lenguaje que usa Log Parser. Por ello, aquí dejo algunos ejemplos de consultas que me han funcionado para generar estadísticas simples, por si a alguien más le resulta útil.
Configuración
Descarga Log Parser desde el sitio oficial https://www.microsoft.com/en-us/download/details.aspx?id=24659Aparentemente, la ruta de Log Parser no se agrega a la ruta de variables de entorno, lo que significa que no se puede llamar simplemente desde la consola, por lo que se tiene especificar su ruta completa (C:\Program Files (x86)\Log Parser 2.2\LogParser.exe)
En mi caso hice un archivo.bat para que pueda escribir los archivos .sql aparte."C:\Program Files (x86)\Log Parser 2.2\logparser.exe" -i:IISW3C -o:CSV file:%~1
Documentación
Dependiendo de lo que se quiera consultar, Log Parser utiliza determinadas columnas que espera estén en los archivos de texto, mismas columnas se puede consultar con el parámetro -h (help) e -i: (input), donde especificamos el formato a consultar, en mi caso son los logs de IIS (IISW3C)logparser -h -i:IISW3CLo que nos devuelve la lista de columnas con su respectivo tipo, en éste caso lo remuevo para mayor facilidad al copiar y pegar, adicionalmente de algunos ejemplos.
LogFilename , LogRow , date , time , c-ip , cs-username , s-sitename , s-computername , s-ip , s-port , cs-method , cs-uri-stem , cs-uri-query , sc-status , sc-substatus , sc-win32-status , sc-bytes , cs-bytes , time-taken , cs-version , cs-host , cs(User-Agent), , cs(Cookie), , cs(Referer), , s-event , s-process-type , s-user-time , s-kernel-time , s-page-faults , s-total-procs , s-active-procs , s-stopped-procs
Consultas
Quiero hacer una lista de carpetas que se han usado en éste año (u_ex25*.log), y saber cúantas veces ha sido servido un recurso, (asociado a una carpeta, usando EXTRACT_TOKEN para obtener el primer folder), de manera exitosa (status 200).SELECT COUNT(*) AS Hits, EXTRACT_TOKEN(cs-uri-stem, 1, '/') AS Service INTO servicios.csv FROM C:\inetpub\logs\LogFiles\W3SVC3\u_ex25*.log WHERE sc-status = 200 AND cs-uri-stem LIKE '/%' GROUP BY Service ORDER BY Hits DESC
Curiosamente, la herramienta ya estaba instalada en el servidor, lo que me hace pensar que ya había intentado usarla en el pasado… y que seguramente me desesperó. Conociéndome, es muy probable que en aquel momento incluso haya escrito alguna herramienta propia para obtener las estadísticas que necesitaba.