Jun 042012
 
Artículo Apache

Existen muy buenas aplicaciones open source, como por ejemplo AWStats, que permiten realizar un análisis en profundidad de la información contenida en los logs de acceso de un servidor web.

En otro artículo comentaremos la funcionalidad de dicha herramienta, y la manera de instalarla y configurarla.

Sin embargo, en ocasiones nos puede interesar realizar un proceso ad-hoc de los ficheros de logs de nuestro servidor, para obtener información específica de la estructura de nuestro sitio web, de un modo que no está contemplado en una herramienta general como AWStats.

En este artículo vamos a ver la manera de realizar este proceso en un script perl desarrollado por nosotros mismos.

Formato del fichero de log de accesos

El formato más común de un fichero de log de accesos es el formato “combined” de Apache. En este formato, el fichero de log consta de una línea por cada acceso. Cada línea consta de una serie de campos separados por espacios. Los campos que puedan contener espacios se escriben entre comillas. Por ejemplo (Los datos a continuación son una única línea en el fichero de log de accesos, aunque aquí los dividimos en varias líneas para mejorar la legibilidad):

Los campos que aparecen en el formato “combined”, y sus valores en el ejemplo son:

  1. ip: 190.121.30.129   La dirección IP del cliente que accede al servidor web
  2. client_id: El identificador de cliente en la máquina cliente. En el ejemplo, el dato no está disponible y por eso su valor es un simple guión
  3. user_id: identificador de usuario validado en el servidor web. En el ejemplo, el valor es un guión porque el usuario no se ha validado.
  4. fecha: [01/Jun/2012:04:59:02 +0200] fecha y hora en que se produce el acceso
  5. petición_recibida: “GET /templates/beez_20/css/general.css HTTP/1.1” petición enviada por el cliente, inidicando el tipo (normalmente GET o POST), la URL y la versión del protocolo utilizado (normalmente HTTP/1.1).
  6. código_de_respuesta_http: 200 El código 200 corresponde a una petición atendida normalmente. Otros códigos habituales son 404 (página no encontrada), 302 (redirección temporal) y 301 (redirección permanente).
  7. tamaño_de_respuesta: 1447 Es el número de bytes entregados por el servidor en la página de respuesta a la petición.
  8. referrer: Es la página en donde se encuentra el enlace que ha generado la petición al servidor.
  9. agent: Es una cadena que identifica al navegador desde el cual se ha realizado la petición. En el ejemplo, podemos ver que se trata de un navegador Chrome.

Lectura del fichero de log, y desglose de cada línea en sus campos.

El siguiente código realiza la lectura y desglose de la entradas en el fichero de log de accesos:

 

Una vez que tenemos funcionando este script, podemos incorporar un código que realice un proceso que nos interese. Por ejemplo, queremos obtener las diez páginas con mayor número de accesos ‘orgánicos’ desde el buscador de google, y para cada una de ellas queremos que nos presente las consultas que realizaron los usuarios en google.

Para ello, identificamos los accesos procedentes de google orgánico, que son aquellos en donde el hostname del referrer contiene la cadena “google”, y también contiene un argumento “&q=” cuyo valor es la consulta realizada:

Como vemos, en la primera línea estamos descartando todos los accesos realizados por Googlebot y por otros crawlers que se identifican a sí mismos como ‘Crawler’ en el valor del parámetro ‘agent’ (También tendríamos que incluir ‘bingbot’ y muchos otros).

En las líneas 2 a 5 determinamos que el hostname de referrer contiene la cadena “google”, y en la línea 6 comprobamos que contiene un argumento “&q=”, cuyo valor es la consulta que ha realizado el usuario.

Una vez identificada la página accedida y la consulta con la que se accedió a ella, se añaden a una hash %pages, que contiene, para cada página, el total de accesos, y una referencia a una hash de consultas, cada una de las cuales contiene a su vez un total de veces que se ha utilizado la consulta para acceder a la página.

Con esto, ya sólo queda añadir un código para presentar en pantalla el resultado obtenido:

Con pequeñas modificaciones del código que hemos comentado en este artículo, es posible obtener otras estadísticas interesantes, como por ejemplo las direcciones IP que realizan un mayor número de accesos. Esto nos permitiría identificar crawlers que no se identifican a sí mismos en el ‘user agent’.

Por otra parte, si geolocalizamos las direcciones IP, podríamos obtener el listado de ciudades o países desde los cuales más accesos se realizan a nuestro servidor.

Indice de artículos sobre programación en lenguaje Perl

 Publicado por en 7:21 pm

 Deja un comentario

(requerido)

(requerido)