Logs de Apache, NGinx y otros servicios más hermosos con Cola

Cola es una herramienta para visualizar de forma más bonita y organizada nuestros logs.

Una de las herramientas que más suelo utilizar en mis servidores es tail, la cual nos permite ver las última 10 líneas de un archivo, pero que con el parámetro -f podemos tener una actualización de las mismas en tiempo, real, sobre cuando se trata de un log. El problema es, que la salida de tail no es muy bonita que digamos, aún usando colorizer (ccze):
tail
Y si se fijan en la imagen, hay mucha información y si no llega a ser por ccze, no está muy legible que digamos. Así que decidí crearme una herramienta usando Rust que me permite obtener esta información de forma más simple, y bonita, añadiendo además una bandera del país de donde viene la IP.
Le puse de nombre Cola (tail en español) y se ve de esta forma: cola
Como pueden apreciar, la información se ve mucho mejor estructurada, y además tiene otra serie de funcionalidades que la hacen muy chula.

Cola es un reemplazo enriquecido de tail -f escrito en Rust. Analiza archivos de logs (como Nginx, Apache o Syslog/SSH) en tiempo real, geolocaliza direcciones IP para mostrar banderas del país de origen en formato emoji unicode, resalta palabras clave con colores ANSI y cuenta con filtros avanzados interactivos al vuelo.

Está diseñado para ser altamente eficiente, ligero y totalmente autocontenido mediante compilaciones 100% estáticas. Entre sus características encontramos:

  • Monitoreo en Tiempo Real: Sigue la escritura de uno o más archivos de log simultáneamente de forma continua y eficiente sin sobrecargar la CPU. Soporta rotaciones de logs, truncamientos y fusiona los flujos de logs aplicando etiquetas de nombres de archivos coloreadas de forma única.
  • Geolocalización de IPs: Detecta IPs IPv4 y consulta su origen en milisegundos usando una base de datos MaxMind GeoIP2 local (.mmdb), traduciendo los códigos de país en emojis de banderas.
  • Caché en Memoria: Implementa una caché concurrente thread-safe para evitar consultas repetitivas de IP a disco y optimizar el rendimiento.
  • Auto-detección Sticky: Detecta el formato de log al vuelo (Nginx Combined, Apache Common/Combined y Syslog/SSH) y bloquea el parser para maximizar el desempeño en streams rápidos.
  • Filtros Interactivos: Te permite marcar y desmarcar filtros clave en tiempo real usando teclas rápidas durante el stream de logs.
  • Filtros por Consola: Soporta filtros de inclusión (-i) y exclusión (-e) avanzados mediante expresiones regulares (Regex).

Para que el resolvedor de IPs pinte las banderas, necesitas una copia local de la base de datos MaxMind GeoLite2-Country en formato .mmdb.

He incluido un script automático para descargarla e instalarla en la ruta por defecto:

chmod +x download_geoip.sh
./download_geoip.sh

El script colocará la base de datos en ~/.cola/GeoLite2-Country.mmdb (donde Cola la buscará automáticamente al iniciar).

Tenemos varias formas de instalar y usa cola:

Opción A: Instalación Global (Requiere sudo)

Puedes mover el binario a una ruta del PATH del sistema para poder invocarlo desde cualquier parte escribiendo simplemente cola:

sudo cp cola /usr/local/bin/
sudo chmod +x /usr/local/bin/cola
Opción B: Instalación Local (Sin sudo)

Si no dispones de accesos de administrador en el servidor remoto:

mkdir -p ~/.local/bin
cp cola ~/.local/bin/
chmod +x ~/.local/bin/cola

Asegúrate de tener ~/.local/bin en tu variable $PATH dentro de tu .bashrc o .zshrc:

export PATH="$HOME/.local/bin:$PATH"

Mientras Cola está imprimiendo logs en tu terminal, puedes presionar teclas para activar/desactivar filtros instantáneamente:

Tecla Acción Descripción
1 Ocultar Estáticos Oculta peticiones a imágenes, fuentes, archivos .css, .js, etc.
2 Mostrar Solo Errores Muestra solo respuestas HTTP >= 400 u operaciones fallidas de SSH.
3 Ocultar Bots Filtra accesos de rastreadores conocidos (Googlebot, Bingbot, etc.).
4 Mostrar Solo SSH Muestra de manera exclusiva las líneas originadas por sshd.
h Ayuda Imprime un menú de ayuda interactiva en la pantalla actual.
Ctrl+C Salir y Estadísticas Detiene el programa mostrando el rendimiento y hit-rate de la caché de IPs.
Podemos usar la herramienta para monitorear varias cosas.

Monitoreo básico (con auto-detección de formato)

cola /var/log/nginx/access.log

Monitorear múltiples archivos simultáneamente

Puedes pasar varios archivos posicionales. Sus líneas se combinarán en tiempo real y cada una se mostrará con un prefijo del nombre de archivo coloreado dinámicamente para distinguirlos fácilmente:

cola /var/log/nginx/access.log /var/log/nginx/error.log

Especificar líneas iniciales a leer (equivalente a tail -n)

Por defecto lee las últimas 10 líneas existentes antes de empezar a monitorizar:

cola /var/log/nginx/access.log -n 30

Forzar un formato específico

Opciones: auto (por defecto), nginx, apache, syslog.

cola /var/log/auth.log -f syslog

Desactivar geolocalización (modo sin banderas)

cola /var/log/nginx/access.log --no-geo

Filtrado estático por línea de comando

  • Inclusión (Mostrar solo IPs o mensajes coincidentes):
    cola /var/log/nginx/access.log -i "POST"
  • Exclusión (Ocultar líneas coincidentes):
    cola /var/log/nginx/access.log -e "127.0.0.1"
  • Combinado:
    cola /var/log/nginx/access.log -i "/api/" -e "Googlebot"
Si quieren usarlo simplemente pueden descargar Cola desde mi repositorio de Github.
← Volver a los artículos

Comentarios desde Mastodon

Para comentar, responde a este post en Mastodon.

Cargando comentarios…