Configuración de GoAccess y nginx para contar visitas en sitio Web
Me solicitaron contabilizar las visitas y los visitantes únicos a uno de los sitios a los que le doy mantenimiento pero tenía que ser de una forma pública, una sola página, que se viera muy bien en varios tamaños de pantalla y que funcionara de lado del servidor. Luego de investigar decidí que GoAccess era la mejor solución, esta herramienta genera una página única (de momento) en forma de tablero mostrando varios datos además de visitas y visitantes únicos, como; navegadores usados, sistemas operativos, ubicación geográfica, etc.
GoAccess funciona como otros programas de estadísticas al analizar los logs del servidor web y aplicar las reglas y la base de datos geográfica de distribución de IP GeoLite. También funciona con GeoIP2.
Instalación
Utilicé la versión actual que es la 1.2, la instalación es rápida y sencilla. Es cuestión de obtener el archivo, descomprimirlo, configurar y compilar. Suponemos que todo lo vamos a trabajar en el directorio /estadisticas :
cd /estadisticas
wget http://tar.goaccess.io/goaccess-1.2.tar.gz
tar -xzvf goaccess-1.2.tar.gz
cd goaccess-1.2/
./configure --enable-utf8 --enable-geoip=legacy
make
make install
La opción –enable-geoip=legacy nos permite usar la base de datos de IP GeoLite City, también hay que descargarla del sitio oficial y descomprimirla:
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gunzip GeoLiteCity.dat.gz
Configuración
El directorio por defecto para los logs de nginx es /var/log/nginx/ de aquí vamos a sacar los archivos access a analizar.
También debemos ir a editar /usr/local/etc/goaccess.conf y configurar las siguientes opciones:
time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
Que se corresponde con un log en el siguiente formato
200.25.35.45 - - [29/May/2017:11:53:42 -0600] "GET /index.html HTTP/1.1" 200 133 "http://www.sitioweb.com/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
Más información de logs en Wikipedia, también ejecutando man strftime para información sobre el patrón. El archivo goaccess.conf también puede estar en /etc/ o en /usr/etc/ depende como se haya instalado.
Si ahora ejecutamos el programa usando:
goaccess-1.2/goaccess /var/log/nginx/access.log -o salida.html
nos generara un archivo con los resultados de analizar ese archivo, el primer problema viene de que access.log no va a tener todos los registros que necesitamos por lo cual debemos analizar los logs que ya han sido rotados (access*.gz). Y aquí ya hay otro problema, al analizar todos los archivos obtendremos datos de todo cuanto haya, depende tu configuración, pueden ser 2 meses o 3 o más. Ya que GoAccess de momento no cuenta con la capacidad para seleccionar las estadísticas por mes hay que delimitar qué se le va a enviar al programa.
Vamos a generar un archivo .html por cada mes de un determinado año. Abrimos un archivo de shell (visitas.sh) y copiamos los siguientes contenidos
|
|
Llegando a este punto ya es funcional, salimos del editor de texto, le damos permisos de ejecución al archivo y lo lanzamos:
chmod +x visitas.sh
./visitas.sh
Si no aparece ningún mensaje quiere decir que se generó el archivo .html en la ubicación definida, ya se puede acceder vía navegador.
Automatización
Como siempre hay que automatizar estos procedimientos para que no dependan de una persona, por ejemplo usando CRON:
sudo crontab -e
y dentro escribimos:
58 * * * * /estadisticas/visitas/visitas.sh #Estadísticas de visitas
Generará el reporte cada hora en el minuto 58.
Conclusión
Según leo, en el futuro tendrá disponibles otros idiomas y la posibilidad de elegir fechas en el análisis de los logs o directamente en la interfaz. Pero así como está funciona bastante bien para un análisis rápido y muy llamativo al interesado.