Explotando tus logs con GoAccess

Gráfica mostrando un ritmo cardíaco

Los logs de tu servidor web son una fuente de información vital para la salud de tu sitio. Google Analytics está muy bien para temas de marketing, pero no captura ciertos errores del servidor, por no hablar de los accesos de la jauría de bots que asedian tu web cual ejército de caminantes blancos.

Es, pues, importantísimo no perder tus logs de vista. El problema, claro, es que estamos hablando de ficheros que pueden llegar a tener miles o incluso millones de líneas. ¿Qué hacemos para sacar algo en claro?

Existen multitud de herramientas para extraer información útil de esta avalancha de datos. En este artículo explico el uso de GoAccess, una muy potente herramienta de código abierto pensada para usarse en la línea de comandos, con lo que puede instalarse en el servidor y usarse accediendo mediante SSH.

Una advertencia antes de seguir: para sacarle el máximo partido a GoAccess necesitarás tener un mínimo de familiaridad con la línea de comandos. Si eres más de usar el ratón, quizá prefieras servicios como LogEntries o Loggly.

Instalación y uso básico

Las instrucciones de instalación son bastante sencillas. Por ejemplo, para instalar la última versión estable en Ubuntu:

$ echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
$ wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install goaccess

Para comprobar si lo tenemos correctamente instalado, podemos preguntar por la versión:

$ goaccess -V

La forma más sencilla de usar GoAccess es simplemente pasándole como parámetro el fichero de log que queramos analizar:

$ goaccess access.log

En la pantalla que aparece, elegimos el formato de log que use el fichero y pulsamos ENTER (por defecto, Apache y nginx usan el formato NCSA combinado).

Captura del menú de formatos de GoAccess

Una vez procesado el fichero, GoAccess mostrará una serie de paneles con diferentes estadísticas, que se actualizarán en tiempo real a medida que se vayan registrando nuevos accesos en el log.

Captura de GoAccess mostrando una gran cantidad de visitas procedentes de Ucrania.
Hmm… 1465 accesos desde 43 IP de Ucrania… Mal asunto.

Estas estadísticas están pensadas, entre otras cosas, para poder detectar fácilmente todo tipo de posibles anomalías (errores HTTP, bots abusivos, intentos de intrusión, caídas del servidor, etc.). Entre ellas están:

  • Accesos y visitas únicas por día.
  • URL solicitados.
  • Ficheros estáticos solicitados.
  • Recursos no encontrados (404).
  • Direcciones IP y nombres de host de los clientes.
  • Sistemas operativos.
  • Navegadores.
  • Distribución horaria de las visitas.
  • Visitas por servidor virtual (si hay varios y se registran en el log).
  • URL de procedencia de las visitas (Referrer).
  • Dominios de procedencia de las visitas.
  • Consultas en Google (no muy útil hoy día, mejor usar Google Search Console).
  • Códigos de estado HTTP.
  • Geolocalización de las visitas.

Una vez ahí, dispones de una serie de teclas interactivas para navegar fácilmente por los datos y sacarles el máximo partido. Por ejemplo, con la tecla s podrás elegir el criterio por el que ordenar los datos del panel actual; con / se abre el diálogo de búsqueda, que admite expresiones regulares, para buscar en todos los paneles (con la tecla n nos vamos desplazando por las sucesivas ocurrencias).

Instalación en alojamientos compartidos

Si tienes tu web en un alojamiento compartido, probablemente no podrás usar un gestor de paquetes como apt para instalar GoAccess. Pero si tu proveedor te da acceso al servidor mediante SSH, sí podrías instalarlo en tu espacio de usuario compilando los fuentes y especificando una ruta de instalación donde tengas permiso de escritura. Por ejemplo:

$ wget https://tar.goaccess.io/goaccess-1.3.tar.gz
$ tar -xzvf goaccess-1.3.tar.gz
$ cd goaccess-1.3/
$ ./configure --enable-utf8
$ make
$ make install DESTDIR=/home/usuario/goaccess

Instalación en local

En lugar de instalar GoAccess en el servidor, otra opción es instalarlo en local. Por ejemplo, en MacOS lo recomendable sería instalarlo con homebrew:

$ brew install goaccess

En este escenario, tendrías que descargar los logs a tu máquina (por ejemplo, vía FTP) y analizarlos en local.

En los logs, las fechas suelen estar codificadas con localización inglesa (p. ej., 21/Apr/2019 en lugar de 21/Abr/2019). En este caso, si la localización de tu sistema operativo es española, GoAccess probablemente no entenderá las fechas y mostrará un error. Para solucionarlo, puedes simplemente cambiar temporalmente la localización justo antes de ejecutarlo:

$ export LANG='en_US.UTF-8'
$ goaccess accesos.log

Usos avanzados

En la documentación oficial encontrarás muchos ejemplos de uso avanzado. Por ejemplo, puedes analizar varios ficheros de log a la vez:

$ goaccess accesos.log accesos.log.1

Puedes ver solamente los accesos de rastreadores (como buscadores, etc.):

$ goaccess accesos.log --crawlers-only

O, al contrario, para excluir los accesos de rastreadores:

$ goaccess accesos.log --ignore-crawlers

Preproceso mediante tuberías

Una característica muy interesante de GoAccess es que puedes enviarle los datos del log a través de una tubería (pipeline). De este modo, puedes usar cualquier otra herramienta para preprocesar el log. Por ejemplo, para enviarle el contenido de un archivo comprimido:

$ zcat accesos.log.2.gz | goaccess --log-format=COMBINED -

Como ves, en estos casos debemos pasar un guión como parámetro a GoAccess, para indicarle que va a recibir datos por la entrada estándar (STDIN). Además, el parámetro --log-format pasa a ser obligatorio.

Para analizar solamente los accesos que se están produciendo en estos instantes:

$ tail -f accesos.log | goaccess --log-format=COMBINED -

Para ver solo los accesos del robot de Google (¡en tiempo real!):

$ tail -f -n +0 accesos.log | grep --line-buffered 'Googlebot' | goaccess --log-format=COMBINED -

Y mucho más

Hasta ahora, solo hemos rascado la superficie. Hay otras opciones, como generar un informe en formato HTML (¡incluso en tiempo real!) o procesar ficheros de log incrementalmente (guardando los datos en una base de datos en disco).

Más información, en el manual. 🙂


Deja un comentario

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.