Cómo instalar GoAccess Web Log Analyzer en Rocky Linux 8

GoAccess es un analizador de registros ligero y de código abierto que puede leer y analizar archivos de registro de múltiples formatos, incluyendo Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, Caddy, etc. Está escrito en lenguaje C y utiliza la biblioteca ncurses para su interfaz de panel de control, a la que se puede acceder desde la línea de comandos.

Puede generar informes en formato HTML, JSON y CSV, que pueden compartirse con otros. Incluso puede generar informes HTML en tiempo real que pueden mostrarse a través de un enlace público.

En este tutorial, aprenderás a instalar GoAccess Analyzer en un servidor Rocky basado en Linux y a configurarlo para que lea los registros de Nginx y genere informes en tiempo real.

Requisitos previos

  1. Un servidor con Rocky Linux 8.
  2. Un usuario no root con privilegios sudo.
  3. Nginx ejecutándose en el servidor para acceder a los registros.
  4. Asegúrate de que todo está actualizado.
    $ sudo dnf update
    

Paso 1 – Instala las dependencias para GoAccess

La última versión de GoAccess v1.5.2 no está disponible en el repositorio por defecto. Para instalar la última versión de GoAccess, vamos a compilarla desde el código fuente. El primer paso es descargar las dependencias necesarias para construir el paquete GoAccess.

$ sudo dnf install ncurses-devel libmaxminddb-devel openssl-devel 
$ sudo dnf groupinstall 'Development Tools'

Paso 2 – Descargar e instalar GoAccess

Descarga la última versión del archivo de GoAccess. Puedes encontrar la última versión de GoAccess en la página oficial de descargas.

$ wget https://tar.goaccess.io/goaccess-1.5.2.tar.gz

Extrae los ficheros del archivo.

$ tar -xzvf goaccess-1.5.2.tar.gz

Configura e instala el paquete.

$ cd goaccess-1.5.2
$ autoreconf -fi
$ sudo ./configure --enable-utf8 --enable-geoip=mmdb --with-openssl
$ sudo make
$ sudo make install

Comprueba que GoAccess se está ejecutando.

$  goaccess --version
GoAccess - 1.5.2.
For more details visit: https://goaccess.io/
Copyright (C) 2009-2020 by Gerardo Orellana

Build configure arguments:
  --enable-utf8
  --enable-geoip=mmdb
  --with-openssl

Paso 3 – Descarga la Base de Datos GeoIP

Puedes descargar la Base de Datos GeoIP desde DB-IP o desde Maxmind. Si vas a descargarla desde Maxmind, tendrás que crear una cuenta y generar una clave de licencia gratuita. La descarga desde DB-IP puede hacerse directamente.

Descarga el archivo zip del país desde cualquiera de las fuentes anteriores. Una vez descargados, extráelos y sube el archivo .mmdb al servidor a una carpeta personalizada como /home/<user>/geoip.

Paso 4 – Configurar GoAccess

GoAccess almacena su archivo de configuración en /usr/local/etc/goaccess/goaccess.conf. Puedes comprobar la ubicación del archivo en tu sistema utilizando el siguiente comando.

$ goaccess --dcf
/usr/local/etc/goaccess/goaccess.conf

Abre el archivo para editarlo.

$ sudo nano /usr/local/etc/goaccess/goaccess.conf

La mayoría de las opciones están comentadas. Puedes utilizar estas opciones a través de la línea de comandos o establecerlas aquí en el archivo. Para activar una opción, elimina el carácter # que aparece delante de ella.

En primer lugar, vamos a activar la opción time-format. En nuestro tutorial analizaremos archivos de Nginx, así que activa la opción destinada a los registros de Apache/Nginx.

# The following time format works with any of the
# Apache/NGINX's log formats below.
#
time-format %H:%M:%S

A continuación, activa la opción date-format de Nginx.

# The following date format works with any of the
# Apache/NGINX's log formats below.
#
date-format %d/%b/%Y

A continuación, activa la opción log-format. En nuestro tutorial, utilizaremos el formato de registro combined, que es el que suele utilizar Nginx.

log-format COMBINED

Si tus archivos de registro contienen el campo Host virtual, activa en su lugar la siguiente opción.

log-format VCOMBINED

Supongamos que deseas un mayor control sobre el formato de registro. En ese caso, puedes habilitar la siguiente línea en su lugar (dependiendo del registro al que accedas) y añadir o quitar parámetros según tus necesidades.

log-format %v:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

Para activar el módulo GeoIP, activa la siguiente opción introduciendo la ruta a la base de datos GeoIP.

# For GeoIP2 Country database:
# Download the GeoLite2-Country.mmdb.gz
# gunzip GeoLite2-Country.mmdb.gz
#
geoip-database /home/geoip/dbip-country-lite-2021-10.mmdb

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida una vez hayas terminado.

Paso 5 – Ejecutar GoAccess

Normalmente, si quieres ejecutar GoAccess, tendrás que utilizar el siguiente comando.

$ sudo /usr/local/bin/goaccess /var/log/nginx/access.log

Necesitamos utilizar sudo porque los usuarios normales no pueden abrir los archivos de registro. Además, tendrás que utilizar la ruta completa para el ejecutable con el comando sudo porque éste no reconoce las aplicaciones del directorio /usr/local/bin. Sin embargo, puedes evitar esta limitación creando un enlace simbólico.

Para ello, ejecuta el siguiente comando.

$ sudo ln -s /usr/local/bin/goaccess /usr/bin/goaccess

Ahora puedes ejecutar GoAccess directamente.

$ sudo goaccess /var/log/nginx/access.log

Los archivos de registro de Nginx guardan un registro de todo el tráfico HTTP entrante. Si tu servidor lleva funcionando mucho tiempo, verás varios registros de acceso con los registros más antiguos en formato comprimido .gz. Los archivos de registro más antiguos se generan como resultado de la rotación de registros.

Una vez que ejecutes el comando, te aparecerá el siguiente panel de control.

Panel GoAccess

GoAccess te proporciona varios atajos de teclado para navegar por el panel de control.

  • TAB para avanzar por los módulos disponibles y SHIFT+TAB para retroceder.
  • F5 para actualizar el panel de control.
  • g para ir a la parte superior de la pantalla del panel de control y G para ir a la parte inferior.
  • o o ENTER para expandir el módulo seleccionado.
  • j y k para desplazarte hacia abajo y hacia arriba dentro del módulo activo.
  • s para mostrar las opciones de ordenación del módulo activo.
  • / para buscar en todos los módulos y n para pasar a la siguiente coincidencia.
  • 0-9 y SHIFT+0 para activar rápidamente el módulo numerado correspondiente.
  • ? para ver el diálogo de ayuda rápida.
  • q para salir del programa.

Veamos brevemente todos los paneles.

  1. Visitantes únicospor día – Este panel se explica por sí mismo. Enumera los visitantes únicos, las visitas y el ancho de banda acumulado para cada fecha. También incluye por defecto los rastreadores y arañas web.
  2. Archivos solicitados (URLs ) – Este panel proporciona las estadísticas relativas a los archivos no estáticos más solicitados en tu servidor.
  3. Peticionesestáticas – Es similar al panel anterior, salvo que gestiona archivos estáticos como imágenes, CSS, JavaScript, etc.
  4. URLs no encontradas (404s ) – Este panel registra todas las peticiones a archivos y rutas no encontradas en tu servidor.
  5. Nombres de host e IP de visitantes – Este panel ofrece más información sobre los visitantes de tu sitio. Puedes pulsar o para ampliar el panel y obtener información detallada como el país de origen, la ciudad y el DNS inverso.
  6. Sistemas operativos – Este panel muestra los distintos sistemas operativos utilizados por los visitantes.
  7. Navegadores – Este panel muestra los distintos navegadores utilizados por los visitantes.
  8. Distribución Horaria – Este panel ofrece un informe horario del número de visitas, visitantes únicos y ancho de banda consumido.
  9. Anfitriones virtuales – Este panel muestra los anfitriones virtuales analizados a partir del archivo de registro. Sólo se mostrará si utilizas el formato de registro VCOMBINED en el archivo de configuración anterior o si %v forma parte de la configuración del formato de registro.
  10. URL de referencia – Enumera las URL que remiten a los visitantes a tu servidor. Este panel está desactivado por defecto. Para activarlo, comenta la siguiente línea en el archivo de configuración añadiendo # delante de ella.
    #ignore-panel REFERRERS
    
  11. Sitios de referencia – Este panel muestra las direcciones IP de los hosts de referencia.
  12. Frases clave – Este panel muestra las palabras clave utilizadas en la Búsqueda de Google, la caché de Google o Google Translate que llevan a tu sitio. Este panel también está desactivado por defecto. Actívalo comentando la siguiente línea en el archivo de configuración.
    #ignore-panel KEYPHRASES
    
  13. Códigos de estado HTTP – Este panel muestra las estadísticas de los códigos de estado HTTP devueltos por tu servidor cuando responde a una petición.
  14. Usuario Remoto (Autenticación HTTP) – Este panel muestra el ID de usuario de la persona que accede a un documento en tu servidor, protegido por autenticación HTTP. Este panel sólo funciona si %e forma parte de la configuración del formato de registro.
  15. Estado de la cach é – Este panel determina si una petición está siendo almacenada en caché y servida desde ella. Este panel sólo funciona si %c forma parte de la configuración del formato de registro.
  16. Ubicación geográfica – Este panel proporciona una lista de ubicaciones geográficas de los visitantes que acceden a tu sitio. Sólo aparecerá si has descargado y añadido su ubicación en el archivo de configuración.

Paso 6 – Ejecutar GoAccess sin privilegios

Como buena práctica de seguridad, cuanto menos código funcione como root, mejor. Para ejecutar GoAccess sin ser root, necesita permisos para leer los archivos de registro.

Los archivos de registro del servidor suelen formar parte del grupo adm. Puedes comprobarlo utilizando el siguiente comando.

$ ls -l /var/log/nginx
total 68
-rw-r----- 1 nginx adm 30547 Oct 10 12:47 access.log
-rw-r----- 1 nginx adm 35063 Oct 10 12:47 error.log

Como puedes ver, no necesitas ser usuario root para abrir los archivos de registro. Cualquier usuario perteneciente al grupo adm puede abrir los archivos.

La forma más sencilla de ejecutar GoAccess sin ser root es añadir al usuario actualmente conectado al grupo adm. De ese modo, podrás ejecutar GoAccess con ese usuario sin sudo.

Ejecuta el siguiente comando para añadir el usuario actual al grupo adm.

$ sudo usermod -aG adm $USER 

Ahora, cierra la sesión y vuelve a entrar para aplicar el cambio. O puedes ejecutar el siguiente comando sin necesidad de cerrar la sesión para aplicar el cambio.

$ su $USER

Deberías poder ejecutar GoAccess directamente sin necesidad de sudo.

$ goaccess /var/log/nginx/access.log

Paso 7 – Generar Informes HTML

GoAccess puede utilizarse para generar informes HTML que puedes servir en línea. Utiliza el siguiente comando para generar un informe HTML.

$ goaccess /var/log/nginx/access.log -o stats.html

Puedes descargar el archivo en tu PC local para ti o en la carpeta de tu sitio web para servirlo públicamente.

Informe HTML de GoAccess

Incluso puedes generar un informe HTML en tiempo real utilizando GoAccess. Pero primero, necesitas abrir el puerto 7890 para que se ejecute el Websocket de GoAccess. Abre el puerto utilizando el siguiente comando.

$ sudo firewall-cmd --permanent --add-port=7890/tcp

Recarga el cortafuegos para aplicar el cambio.

$ sudo firewall-cmd --reload

Ahora, ejecuta el siguiente comando para generar un informe HTML en tiempo real.

$ goaccess /var/log/nginx/access.log -o /usr/share/nginx/html/livereport.html --real-time-html

Esto generaría un informe en tiempo real en la ubicación especificada. El comando anterior mantendrá GoAccess ejecutándose en primer plano como un WebSocket a la escucha de conexiones.

Hay una pequeña advertencia al ejecutar el comando anterior. El comando anterior funcionará cuando GoAccess tenga permisos de usuario en el directorio /usr/share/nginx/html. Como estamos ejecutando GoAccess con el usuario que ha iniciado la sesión, tienes que darle permisos sobre el directorio /usr/share/html. Si por alguna razón no puedes esperar, tendrás que ejecutar GoAccess utilizando sudo.

$ sudo goaccess /var/log/nginx/access.log -o /usr/share/nginx/html/livereport.html --real-time-html

Si quieres ejecutar GoAccess en segundo plano, puedes hacerlo como demonio utilizando el siguiente comando.

$ goaccess /var/log/nginx/access.log -o /usr/share/nginx/html/livereport.html --real-time-html --daemonize
Daemonized GoAccess: 78315

Para detener el demonio GoAccess, mata el proceso con el siguiente comando.

$ sudo kill -9 78315

Aquí estamos utilizando el ID del proceso que obtuvimos en nuestro comando anterior. Si no recuerdas el ID del proceso, también puedes utilizar el siguiente comando para matarlo.

$ sudo kill -9 `pidof goaccess`

Fíjate en que estamos utilizando el entrecomillado (`) en nuestro comando. Si utilizas comillas normales, el comando fallará.

Conclusión

Con esto concluye nuestro tutorial sobre la instalación y ejecución de GoAccess Log Analyzer en el servidor Rocky Linux 8. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...