Ejemplos de asql: consultar logs de Apache con SQL

Después de haber mostrado la lista de comandos disponibles en asql, en esta ocasión veremos cómo utilizar algunos de ellos. También mostraremos cómo utilizar consultas SQL estándar para acceder a la información de los logs de Apache. Mediante los siguientes ejemplos de asql tendremos un panorama más claro sobre el uso de esta herramienta.

Ejemplos de asql

Para empezar, recordemos que debemos iniciar asql para luego cargar los logs que deseemos inspeccionar utilizando el comando load. Por ejemplo,

load /var/log/apache2/access.*

cargará todos los archivos contenidos dentro de /var/log/apache2/ y cuyo nombre comience con access.*.

Ejemplo 1

Con la siguiente consulta podremos ver la lista de accesos registrados luego de las 00:00 hs. del día 1 de julio de 2017. En particular, visualizaremos la IP fuente de la consulta, la fecha, y el estado (la respuesta HTTP) de cada una:

SELECT source, date, status FROM logs WHERE date >= '2017-07-01T00:00:00';

Ejemplo 2

Si deseamos saber los tamaños (en bytes) de las respuestas de Apache, agrupadas por IP fuente y mostradas en orden descendente, podemos usar:

SELECT source,SUM(size) AS Number FROM logs GROUP BY source ORDER BY Number DESC;

En este ejemplo, a diferencia del anterior, no especificamos una restricción de fechas. Es por esa razón que veremos un acceso de una IP fuente no mostrada antes.

Ejemplo 3

Inspeccionar las consultas que apuntaron a URL no existentes en el servidor (código de respuesta HTTP 404), podemos utilizar:

SELECT source,date,status,request FROM logs WHERE status='404' ORDER BY date;

En la documentación disponible en MDN se puede encontrar la lista completa de códigos de respuesta HTTP.

Ejemplo 4

Como explicamos anteriormente, es necesario cargar los logs antes de hacer las consultas SQL. Dependiendo en el tamaño y en la cantidad de los archivos, esta operación puede llegar a tomar un cierto tiempo. Para evitar esta espera en cada ocasión, se pueden guardar la base de datos ya parseada en un archivo dentro del directorio actual. Posteriormente, este archivo puede cargarse más rápidamente evitando la necesidad de tener que parsear los logs nuevamente.

Para guardar la base de datos, utilizaremos el comando save seguido del nombre que queramos darle al archivo. Para restaurarla, haremos lo mismo pero utilizando el comando restore.

En la Fig. 1 vemos cada uno de los ejemplos presentados:

Ejemplos de asql
Figura 1 – Ejemplos de asql

Espero que este post les haya resultado útil. ¡Hasta pronto!