GoAccess: herramienta opensource para analizar accesslogs

En este post vamos a revisar una herramienta opensource para analizar accesslogs (de Apache, Tomcat, IIS, etc.) que es bastante fácil de usar y es opensource. Sobre el final, comento algunas cosas para las que me ha resultado muy útil analizar estos archivos.

¿Por qué quisiera analizar accesslogs?

Los accesslogs guardan un registro de todos los requests hechos a nuestro servidor, con la información que nosotros configuremos que queremos salvar, como por ejemplo: la IP de origen, el host y la URL accedida, los bytes enviados, el tiempo de respuesta que llevó responder ese request (conocido como time-taken). Por ejemplo, como se ve en la siguiente imagen que encontré por ahí:

Ahora, para poder aprovechar toda esa información hace falta contar con herramientas que puedan parsear este texto y mostrarlo en una manera que nos facilite el análisis. Ahí es donde entra en juego GoAccess.

Vale aclarar que cada servidor web tiene un formato por defecto diferente para su accesslog, y a su vez, es posible configurarlos. Por lo general, se configura en una variable llamada LogFormat. Si conocemos el LogFormat de nuestro accesslog, entonces va a ser mucho más fácil configurar la herramienta para parsearlo. Si no lo conocemos, no te preocupes que podemos experimentar un poco hasta descifrarlo.

GoAccess

Es una aplicación opensource para mostrar gráficamente la información agregada sobre accesslogs. Funciona por consola, donde se le pueden pasar diversos parámetros. También existe un archivo de configuración donde se puede establecer todo lo necesario para operar. En este sentido, la herramienta es muy flexible, y diría que se puede adaptar al formato de accesslog que tengamos definido.

Como resultado nos genera un reporte HTML bastante lindo, donde se puede ver gráficamente el contenido de los accesslogs analizados. Acá hay un ejemplo del reporte HTML generado para un accesslog. Vale destacar que se puede configurar para analizar uno o varios accesslog, varios que estén comprimidos, e incluso, se puede ver en vivo.

Instalar en Windows con Cygwin

La aplicación está basada en sistema Linux, con lo cual yo la tuve que instalar en Cygwin para poder utilizarla sobre Windows. Los pasos de esta instalación están acá.

Algo importante es que al instalar Cygwin se deben elegir todos los paquetes que se indican en la guía de instalación de GoAccess, sino hay que volver a ejecutar la instalación de Cygwin.

Configuración de GoAccess

Cuando se instala en Cygwin, para configurar la herramienta a que se adapte a nuestro accesslog es necesario editar el archivo .conf que está en C:\cygwin64\usr\local\etc (o el correspondiente según hayan hecho la instalación). La aclaración es porque la configuración no la toma del archivo que queda en la carpeta de instalación.

La otra opción es pasar los parámetros por línea de comando al ejecutar:

goaccess -f accesslog.log --log-format='%d %t %^ %m %U %q %^ %e %h %u %s %^ %^ %L' --date-format=%Y-%m-%d --time-format=%T --http-protocol=no --ignore-panel=REFERRING_SITES -a -o report.html

En la documentación dice que simplemente hay que pasar el nombre del archive del accesslog, pero a mí no me funcionó a menos que le agregue “-f” antes.

Configuración de GoAccess con IIS

La primera línea del log de IIS describe el contenido de cada columna del archivo, lo cual da una pista de cómo está definido el LogFormat en IIS, en caso que no tengamos acceso. Por ejemplo:

#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken

El log format debería ser:

log-format='%d %t %^ %m %U %q %^ %e %h %u %s %^ %^ %L

Acá algo que me parece importante es que nos aseguremos que se esté guardando información del time-taken, ya que ahí vamos a poder sacar mucha información interesante en cuanto a la performance del sistema.

Generar reporte a partir de varios access logs

Por el mismo problema de la necesidad de poner “-f” antes del nombre del archivo de log, no pude ejecutar con varios archivos tal como indica en la documentación, así que la forma que pude hacerlo fue haciendo que tome los datos a través de un pipe de Linux. Entonces, con el comando “cat” hago que los distintos archivos se escriban en consola, y con un pipe hago que eso se use en realidad como entrada del proceso goaccess.

cat accesslog1.log accesslog2.log | goaccess -a -o report.html

En el caso que sean más se puede intentar con:

cat logs/* | goaccess -a -o report.html.

Si hay varios logs comprimidos, la linea a pasar sería:

zcat *log* | goaccess -a -o  report.html

Algunos comentarios luego de usar GoAccess

Pude ver en forma ordenada y agrupada los distintos requests sobre el servidor web, pudiendo identificar fácilmente varios datos interesantes, como por ejemplo:

Througput, visitas por día

 

Por horas

 

Ocurrencia de errores (mirando los códigos de respuesta 5xx o 4xx)

 

Y en particular ver cuáles son esas URLs que dan 404 (not found)

 

Además, se pueden ordenar los requests por tiempo de respuesta promedio o por máximo tiempo de respuesta, y eso es un muy buen punto de partida como para intentar optimizar el sistema.

 

También nos sirve para conocer a nuestros usuarios, qué browser usan, qué sistema operativo, de dónde vienen, de dónde son.

 

Nos sirve para poder procesar información para diseñar una prueba de carga. Podemos ver cuáles son los requests más pedidos y qué cantidad hay por intervalos de tiempo, y además, saber qué porcentaje del total representan.

De todos modos, no recomendaría GoAccess para analizar al detalle los tiempos de respuesta. Si bien me permite ordenar distintas tablas en base al peor tiempo de respuesta, o al promedio, le faltan varias cosas:

Más allá de esto, es una herramienta que todo QE, DevOp, o interesado en el tema, debería tener a la mano para analizar accesslogs.

 

 

7 thoughts on “GoAccess: herramienta opensource para analizar accesslogs

  1. Nicolas Santibañez says:

    Hola Fede, estoy tratando de implementar goaccess y tengo problemas con el log-format, el formato de mi log es:
    – log-format:
    c-ip date time sc-status cs-method cs-uri-stem cs-uri-query bytes time-taken

    Esta es una linea de ejemplo que presenta mi log:
    30.xxx.x.99 2017-06-04 19:40:50 200 POST /EstoEsUnaPrueba/PXxxx999_ServicioPrueba111 – 7900 0.099

    ejecute el comando y me arroja errores:
    goaccess -f access.log –log-format=%h %d %t %s %m %U %q %^ %T –date-format=%Y-%m-%d –time-format=%H:%M:%S –http-protocol=no –ignore-panel=REFERRING_SITES -a -o reporte.html

    doesn’t match specifier ‘%h’

    Format Errors – Verify your log/date/time format

    me podrias ayudar a analizar que le falta al comando, desde ya muchas gracias.

    Nico

    1. Federico says:

      Nico qué tal?
      Probaste escribir esas configuraciones en el archivo de configuración en lugar de por línea de comandos? Recuerdo que alguna cosa me quedó más fácil hacerla ahí…

      1. Nicolas Santibañez says:

        Fede, al final me funciono el siguiente log format, me faltaban los tabuladores, gracias.

        1. Federico says:

          Perfecto!!
          Saludos

        2. Federico Ferreira says:

          Nicolas, buenas,
          Como lo pudiste solucionar? me paso lo mismo al intentar sacar un reportes de los error.log
          Utilizando el siguiente comando:
          goaccess -f error.log log-format=’%d %t %^ %m %U %q %^ %e %h %u %s %^ %^ %L’ –date-format=%Y-%m-%d –time-format=%T –http-protocol=no –ignore-panel=REFERRING_SITES -a -o reportes.html

  2. Gustavo says:

    Hola Fede, primero que todo darte las gracias por el artículo. Es muy buena la herramienta GoAccess: liviana, sencilla y muy potente.
    Saludos!

Leave a Reply

Your email address will not be published. Required fields are marked *