Inspeccionar los registros de Caddy con GoAccess

2025–01–12

Requerimientos necesarios

Que es Goaccess?

GoAccess es un analizador de registros web en tiempo real de código abierto y un visor interactivo que se ejecuta en un terminal en sistemas *nix o a través de su navegador.

Instalar goaccess en Ubuntu 24.04

curl -1sLf  https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg
echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list
sudo apt update
sudo apt install goaccess

Instalar Caddy transform-encoder modulo

sudo caddy add-package github.com/caddyserver/transform-encoder

Caddyfile

Añadir en /etc/caddy/Caddyfile

# Use logging
(logging) {
  log {
      output file /var/log/caddy/access.log
      format transform `{request>remote_ip} - {user_id} [{ts}] "{request>method} {request>uri} {request>proto}" {status} {size} "{request>headers>Referer>[0]}" "{request>headers>User-Agent>[0]}"` {
      time_format "02/Jan/2006:15:04:05 -0700"
      }
  }

Yo he decido usar el modo “combinado” Apache Combined Log Format.

Como visualizar los registros con goaccess?

Desde la terminal

sudo goaccess /var/log/caddy/access.log --log-format=COMBINED

Desde Web UI

Podemos crear un subdominio para acceder desde el navegador .

Ejemplo Caddyfile:

logs.[domainname] {
  import logging
  tls [address]@[domainname]
  encode gzip zstd
  file_server
  root * /var/www/logs.[domainname]
}

Creamos systemd service para goaccess:

sudo systemctl edit --full --force goaccess.service

Añadimos las seguientes lineas:

[Unit]
Description=GoAccess Live Log Analyzer
After=caddy.service

[Service]
Type=exec
ExecStart=/usr/bin/goaccess /var/log/caddy/access.log -o /var/www/logs.[domainame]/index.html --log-format=COMBINED --html-prefs='{"theme":"darkGray"}'
RestartSec=300
Restart=always

[Install]
WantedBy=multi-user.target

Iniciar el servicio:

sudo systemctl start goaccess

Visitar la pagina desde el navegador.