Todo lo que pasa con un servicio queda registrado. El historial de registro es un recurso fundamental para encontrar problemas y representan muchas veces la primer miga de pan para resolverlos. En aquellos servicios expuestos a ingresos externos, el monitoreo en tiempo real puede ayudarnos a prevenir o reparar distintos tipos de problemas. Uno de estos servicios podría ser un servidor web, como por ejempo Apache. GoAccess es una solución de monitoreo en tiempo real de cualquier tipo de log. Cuanta con una interfaz por consola pero también es capaz de generar un archivo estático html para controlar todo desde un navegador.
El paquete de GoAccess está disponible en varias distribuciones para instalarlo con un solo comando. Pero si queremos utilizar la web y via SSL será mejor compilarlo. Estas son las dependencias para Fedora:
dnf install ncurses-devel geoip-devel tokyocabinet-devel openssl-devel
Al momento de escribir este artículo la versión disponible es la 1.3. Antes de copiar y pegar comandos, sería bueno comprobar la última versión en GitHub.
wget https://tar.goaccess.io/goaccess-1.3.tar.gz tar -xzvf goaccess-1.3.tar.gz cd goaccess-1.3/ ./configure --enable-utf8 --enable-geoip=legacy --with-openssl make make install
Una vez instalado, será necesario abrir el puerto 7890 que es el predeterminado del WebSocket. Quieriendo, es posible elegir otro con la opción --port
firewall-cmd --add-port=7890/tcp --permanent firewall-cmd --reload
En este caso, el servidor web corre esclusivamente con soporte SSL.
/usr/local/bin/goaccess /var/log/httpd/access_log -o /var/www/misitio/report.html --log-format=COMBINED --real-time-html --ws-url=wss://midominio.com --ssl-cert=/etc/letsencrypt/live/midominio.com/fullchain.pem --ssl-key=/etc/letsencrypt/live/midominio.com/privkey.pem
Puede ejecutarse en background agregando la opción --daemonize
Screenshot de la web de GoAccess
Si se decidió guardar el archivo html generado por GoAccess dentro un punto de acceso público, no estaría mal restringir su acceso agregando a nuestro .htaccess el siguiente código:
<files report.html>
Order deny,allow
Deny from all
Allow from 192.168.Bla.Bla # cambiar por la dir. ip que permitimos visitar el reporte
</files>