Utilizar Perl para automatizar el análisis de tus logs

Quizá por deformación profesional, los que nos dedicamos principalmente a los sitios webs y las aplicaciones vía Internet tenemos inconscientemente la imagen equivocada de que el lenguaje de programación Perl es un lenguaje creado y utilizado únicamente en la web. Pues no, Perl se diseñó, al menos en principio, para aplicaciones de escritorio, más concretamente de línea de comandos hace unos 20 años y después se aprovecharon sus cualidades para la World Wide Web.

Los ejemplos que os propongo en este artículo son para línea de comandos usando Perl como sustituto infinitamente más potente de los archivos batch de Windows (los famosos .bat o, en Windows NT y posteriores, .cmd).

Mi problema era que no encontraba un sistema que automáticamente analizara un bloque importante de archivos de log de servidor web para generar mis estadísticas con AwStats y Webalizer, debiendo usar herramientas para unificar todos los archivos en uno. Con Perl puedo hacer tandas y lograr que Awstats u otros programas me analicen los logs uno a uno automáticamente, sin tener que escribir la línea de comandos o modificar el archivo de configuración para cada uno (se genera un log por cada día), unificar los archivos ni cosas raras. Esto lo hago con un script como éste:

 
$year = "09";
$month = "03";  # Siempre dos digitos (ejemplos: enero = 01, diciembre = 12)
 
$cero = "0";
 
for ($i=1;$i<=9;$i++) {
 
	$archivo = "C:/Apache Software Foundation/Apache2.2/htdocs/stats/logs/$month$year/u_ex$year$month$cero";
	system ("awstats.pl -config=www.sitio.es -update -LogFile=$archivo$i.log");
}
 
for ($i=10;$i<=31;$i++) {
 
	$archivo = "C:/Apache Software Foundation/Apache2.2/htdocs/stats/logs/$month$year/u_ex$year$month";
	system ("awstats.pl -config=www.sitio.es -update -LogFile=$archivo$i.log");
}
 

En este caso mis logs son del servidor IIS para Windows pero se puede utilizar para Apache o cualquier otro tipo de servidor que genere un log más o menos estándar. Lo único que tengo que cambiar es el contenido de las variables $year y $month. Así se analizarán todos los logs que quiera, que tienen el formato u_ex0901.log (u_ex-año(dos cifras)-mes(dos cifras).log).

Si empleas Linux u otro sistema Unix compatible, el intérprete de Perl seguramente vendrá instalado en tu sistema. Si usas Windows, lo puedes descargar e instalar gratuitamente desde ActiveState (lo necesitarás también si quieres usar AwStats). Por otro lado, la versión original de Webalizer, aunque existe un port oficial para Windows, no reconoce el formato del log de IIS. En su lugar podemos utilizar el Webalizer para IIS de Stone Steps.

Artículos relacionados


Los comentarios están cerrados.