Una herramienta open source para monitorear logs de Apache o nginx en tiempo real

  • 17 Feb 2020
  • Linux, Monitor, Apache

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.

Instalar GoAccess en Fedora

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

Generar reporte de los logs de Apache en tiempo real

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

Permitir el acceso solo desde una dirección ip determinada

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>