Estadísticas de acceso Web independientes y exportables con GoAccess

Trucos y Utilidades 4 de ene. de 2023

GoAccess es una aplicación de análisis web de código abierto para sistemas operativos Unix y GNU/Linux.
La aplicación tiene una interfaz de usuario basada en texto y una aplicación web. GoAccess puede proporcionar análisis en tiempo real al monitorear continuamente los registros del servidor web.

GoAccess puede analizar y presentar datos de logs de cualquier formato de Servidor Web: Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, Caddy, etc.


Sin embargo yo os voy a comentar una de sus opciones, quizás la menos usada, que es la capacidad de generar un informe HTML completo, independiente y exportable.
Estos informes son una herramienta excelente para el análisis, monitoreo y visualización de datos, así como para generar informes o extraer datos en formato JSON.

HTML dinamico e independiente con GoAccess

Con GoAccess podemos generar un html directamente a partir de un log de un servidor web, sin necesidad de tener en nuestro servidor el servicio de GoAccess ejecutándose.

Para ello vamos a utilizar Docker para usar una imagen de GoAccess de modo temporal, pasarle nuestro Log y generar el HTML que podemos publicar independientemente del servidor, enviarlo por email,  etc.

Teneis disponibles en mi github.com/luisgulo/goaccess, los ficheros necesarios (el Dockerfile y los ficheros .conf) para que cada uno pueda crear y/o ajustar su propia imagen de GoAccess.

La imagen final, creada sobre una base Debian, está publicada y disponible en docker hub: https://hub.docker.com/r/luisgutierrez/goaccess

Pasos para lanzar el contenedor que nos generará el informe

Lo primero que necesitaremos será disponer de un fichero access.log de cualquier servidor web (apache, nginx, etc)

Para probar podeis descargar un log disponible y público, con el siguiente comando:

wget https://raw.githubusercontent.com/linuxacademy/content-elastic-log-samples/master/access.log -O example-elactic.log

Ahora simplemente iniciaremos nuestro contenedor, le pasaremos el fichero de log y una serie de parámetros para generar el html y por ultimo destruiremos el contenedor.

# Iniciamos un contenedor (estadistica) a partir de la imagen -> luisgutierrez/goaccess
docker run -d -ti --name estadistica --restart always luisgutierrez/goaccess:latest

# Nos aseguramos que  'estadistica' está iniciado
docker start estadistica

# Pasamos como 'entrada (stdin)' al contenedor estadistica el contenido del Log
cat example-elactic.log | docker exec -i estadistica goaccess - -a --anonymize-ip --html-report-title="Estadistica de Ejemplo" -o html > informe.html

Al finalizar saca un mensaje poco descriptivo del tipo:
[PARSING -] {9430} @ {0/s} @ {0/s}
Indicando que ha procesado todas las entradas y ha finalizado.

Si no vamos a generar más informes con nuestro contenedor, podemos destruirlo (y volver a lanzar las veces que queramos) para que consuma memoria.

# Borramos el contenedor 'estadistica' enviando parada SIGKILL (-f)
docker rm -v -f estadistica
Nota: Se puede realizar todo el proceso en un único paso, pero he preferido mostrarlo desglosado para que sea más sencillo de entender como funciona.

Ahora podemos abrir el fichero html generado: informe.html

Además veréis que se puede interactuar con el fichero HTML ya que lleva embebidos los datos y el código JavaScript que permite modificar la visualización de los resultados de forma instantánea.

Fichero HTML generado que permite interactuar con los datos embebidos

Desde ese mismo HTML, en el menú de la izquierda podemos exportar los datos directamente a formato JSON:

Exportar datos a formato JSON

Etiquetas

Luis GuLo

🐧 SysAdmin GNU/Linux - 🐳 Docker - 🖥️ Bash Scripting - 🐪 Perl - 🐬 MySQL - 👥 Formador de TI - 👥 Formador de SysAdmin's - 💢 Ansible - ☁️ Cloud Computing - ❤️ Debian GNU/Linux