Server logs & traffic analysis

GoAccess

Analizador de registros web en tiempo real que funciona en tu terminal o genera un panel HTML autónomo en un solo archivo

allinurl/goaccessC20,890 as of 2026-09-02
By Jake Luo · Published 2 sept 2026

GoAccess es un analizador de registros de código abierto con licencia MIT, escrito en C, que lee el registro de accesos de tu servidor web y te muestra lo que tu servidor sirvió realmente: como panel interactivo en la terminal, o como un único archivo HTML autónomo que podrías enviar por correo. Interpreta registros de Apache, Nginx, Caddy, CloudFront, S3, Elastic Load Balancing, Traefik e IIS de fábrica, además de cualquier formato personalizado que describas, y solo necesita ncurses para funcionar. Acumulaba 20.890 estrellas en GitHub a 2 de septiembre de 2026. Para quien está montando algo responde muy bien a una pregunta concreta: qué se pidió, qué respondió tu servidor y cuánto tardó, incluidas las peticiones que nunca ejecutaron tu JavaScript.

Qué es GoAccess en realidad

GoAccess (github.com/allinurl/goaccess) se mantiene desde 2013 y está escrito en C, lo que se nota en lo primero que percibes: una única dependencia obligatoria, ncurses, y un arranque instantáneo. Apúntalo a un registro — `goaccess access.log` — y tienes un panel interactivo en la terminal. Añade `-o report.html --real-time-html` y escribe un único archivo HTML sin dependencias externas, y luego le envía actualizaciones en vivo a través de un servidor WebSocket que trae incorporado, en el puerto 7890 por defecto.

  • Lee el formato de registro que ya tienes Apache common y combined, Nginx, el formato estructurado JSON de Caddy, Traefik, Squid, W3C de IIS, Amazon CloudFront, S3, Elastic Load Balancing y Google Cloud Storage vienen predefinidos. Cualquier otro lo describes con una cadena de formato personalizada.
  • Se ejecuta donde está el registro, o donde estás tú Interpreta archivos, conjuntos de archivos rotados y comprimidos canalizados con `zcat --force`, o la entrada estándar. Así que puedes no instalarlo en el servidor y ejecutar `ssh -n you@server 'tail -f /var/log/nginx/access.log' | goaccess -` desde tu portátil.
  • Guarda histórico sin una base de datos `--persist` vuelca su conjunto de datos a disco y `--restore` lo carga de nuevo, añadiendo lo nuevo. Registra el inodo de cada archivo y la marca de tiempo de la última línea interpretada, así que volver a ejecutarlo no cuenta dos veces, y `--keep-last=5` recicla lo almacenado con más de cinco días.
  • Agrupa el tráfico como lo piensa quien opera Paneles de peticiones, errores 404, archivos estáticos, ancho de banda, tiempo de respuesta, referentes y hosts virtuales, además de geografía y ASN con la base de datos opcional de MaxMind, que es el panel que deja en evidencia a una única red ruidosa.
  • Sigue en desarrollo activo La última etiqueta es la v1.11 del 15 de julio de 2026, y los commits de los últimos días de agosto de 2026 son trabajo de producto normal: una categoría dedicada a rastreadores de IA, el tráfico del Fediverso separado de los rastreadores, exclusión de tráfico por ASN, informes de campañas UTM en lugar del antiguo panel de frases clave, y una métrica de peticiones por segundo en vivo.

La licencia es una MIT sencilla, declarada en el archivo COPYING del repositorio y no dejada a una insignia. Hay 449 incidencias abiertas, lo que para un proyecto en C de trece años que interpreta todos los formatos de registro que alguien ha inventado se lee más como prueba de uso que de abandono: buena parte son preguntas sobre formatos de registro, fecha y hora, y el README enlaza directamente a los varios cientos ya cerrados.

Lo que cuesta operarlo

El coste real no es la CPU, es el acceso. Necesitas poder leer el registro de accesos, lo que lo descarta en la mayoría de plataformas gestionadas donde nunca ves uno. Necesitas conocer tu formato de registro, y ahí es donde se va el tiempo de verdad: un desajuste entre el formato de fecha de tu registro y la configuración regional con la que se ejecuta GoAccess es el motivo más común de que la primera ejecución no muestre nada. Y tienes que decidir sobre la persistencia desde el principio, porque sin `--persist` tu informe es tan antiguo como el archivo que le diste, y la rotación de registros está borrando tu histórico según un calendario que decidió otra persona.

A cambio obtienes una herramienta sin cuenta, sin etiqueta, sin muestreo y sin factura mensual, que responde a los pocos segundos de que ocurra la petición. No es analítica de producto en absoluto: no tiene ni idea de quién es un usuario, en qué hizo clic, ni si volvió la semana siguiente. Es la capa de debajo, y las dos responden preguntas lo bastante distintas como para que la mayoría de los equipos que usan una acaben usando ambas.

Dónde el registro deja de decirte la verdad

Un analizador de registros es exactamente tan veraz como el registro, y la forma más rápida de que tu registro deje de describir tu tráfico es poner un CDN por delante. Lo hicimos en agentceres.com en agosto de 2026 y el efecto sobre el origen no fue sutil: la caché de páginas que mantenía nuestro proceso de origen bajó de 1,33 GB a 0,31 GB, porque la mayoría de las peticiones simplemente dejaron de llegar. Cada uno de esos accesos servidos en el borde es una visita real que el registro de origen nunca contendrá.

Cuatro cosas que cambian en silencio lo que contiene tu registro
  • Un CDN por delante. Las respuestas cacheadas se sirven en el borde, así que tu registro de origen guarda los fallos de caché. Consulta los registros del propio CDN para tener la imagen completa, o ten claro que estás midiendo fallos de caché y dilo.
  • La rotación de registros. Lo habitual en la mayoría de sistemas es conservar una o dos semanas. Todo lo que no persististe desaparece, y desaparece sin ningún error.
  • Un proxy o un balanceador de carga. Sin la cabecera forwarded-for configurada, todas las peticiones parecen venir de una sola dirección interna y tus paneles de geografía y ASN se vuelven decorativos.
  • Archivos estáticos y comprobaciones de salud. Un acceso no es una página vista. Filtra hasta las peticiones que realmente te interesan antes de darle un número a alguien.

También aprendimos el valor de leer la fuente en bruto en el sentido contrario. Tres horas de nuestro propio registro de origen contenían 1.438 peticiones repartidas en 558 URL distintas — 2,58 accesos por URL — y alrededor de tres cuartas partes era tráfico de centros de datos con user agents falsificados o vacíos. Nada de esa proporción era visible en nuestra analítica de JavaScript, porque casi nada de ese tráfico ejecuta JavaScript, y zanjó una discusión que llevábamos semanas teniendo sobre por qué una caché de dos horas aportaba tan poco en un sitio de contenido de cola larga. La versión completa de ese argumento está en nuestra página sobre qué parte de tu tráfico web son bots.

Dónde encaja cuando intentas crecer

El uso para crecimiento es más estrecho que el alcance total de la herramienta y conviene nombrarlo con precisión. Primero, la realidad del rastreo: qué páginas descargaron de verdad Googlebot y los rastreadores de IA, con qué frecuencia y con qué código de estado — un 404 en tu registro suele ser un enlace que alguien publicó hacia una página que moviste. Segundo, el panel de referentes, que detecta enlaces entrantes antes de que ninguna herramienta de backlinks se entere. Tercero, el tiempo de respuesta por petición, porque una página lenta solo para visitantes reales es invisible para una prueba sintética. Que el proyecto añadiera una categoría dedicada a rastreadores de IA y separara el tráfico del Fediverso a finales de agosto de 2026 es una señal decente de que lo primero ya es una pregunta que mucha gente se hace.

Nada de eso es el trabajo de crecimiento en sí, y este es el límite honesto de cualquier herramienta de medición: un registro te dice qué pasó y nunca qué hacer al respecto. Publicar la página que el rastreador vino a buscar, escribir la comunicación que gana ese referente, arreglar el 404 que te estaba costando un enlace en silencio: todo eso sigue necesitando que alguien lo haga. Para eso está AgentCeres — el AI Growth Officer en agentceres.com —: un equipo de especialistas que redacta el trabajo, con una persona que aprueba todo lo que sale. Si estás antes de eso y la pregunta es simplemente por qué no llega nadie, empieza por por qué tu web no recibe tráfico.

FAQ

¿GoAccess sustituye a Google Analytics o Plausible?
No, y tratarlo como un sustituto es la forma de acabar decepcionado. Una herramienta basada en etiqueta sigue a una persona durante una sesión y puede decirte en qué hizo clic y si volvió. GoAccess lee lo que se le pidió a tu servidor y lo que respondió, sin ninguna noción de usuario. El solape es aproximadamente el recuento de páginas vistas, y hasta ese discrepará, porque un registro cuenta peticiones que nunca ejecutaron JavaScript y una etiqueta cuenta sesiones que tu origen quizá nunca vio.
¿Puedo usarlo si mi aplicación está en una plataforma sin acceso a los registros?
Normalmente no de forma directa, y eso es lo primero que conviene comprobar antes de invertir tiempo. Si no puedes leer un registro de accesos, tu equivalente es la exportación de registros de tu CDN, si la tiene, o el registro de peticiones de tu propia plataforma. Algunos servicios permiten volcar registros a un archivo que puedes canalizar, y eso funciona bien: GoAccess lee la entrada estándar sin problema y le da igual de dónde vengan las líneas, siempre que le digas el formato.
¿Ralentizará un servidor con mucha carga?
Lee el archivo de registro en lugar de situarse en la ruta de la petición, así que no puede ralentizar una respuesta como sí puede un agente dentro del proceso. Con un histórico grande el único coste real es el propio análisis, y las sugerencias del README lo cubren: ejecútalo con baja prioridad usando `nice`, usa `--jobs` para análisis multihilo y sube `--chunk-size` desde su valor por defecto. La otra opción es no ejecutarlo en el servidor y canalizar el registro a tu máquina por SSH.
¿Cómo conservo más de una semana de histórico?
Persistiéndolo. Ejecuta una vez con `--persist` para escribir el conjunto de datos en disco, y luego `--restore --persist` en cada ejecución posterior para cargar lo que tenías y añadir las líneas nuevas. Como guarda el inodo de cada archivo y la marca de tiempo de la última línea interpretada, volver a ejecutarlo sobre un registro rotado no contará dos veces. Añade `--keep-last` si prefieres una ventana móvil en lugar de todo para siempre.
Related projects
UmamiAnalítica web de código abierto y centrada en la privacidad: una alternativa autoalojable a Google AnalyticsOpenPanelAnalítica de producto de código abierto y autoalojable: una alternativa a Mixpanel y Google AnalyticsPostHogAnalítica de producto, grabación de sesiones, feature flags y experimentos open source detrás de un solo SDK — licencia MIT salvo su directorio ee, con capa gratuita mensual por herramientaOpenStatusPágina de estado y monitorización de uptime de código abierto en una sola herramienta: autoalojable, configurable como código y comprobada desde 28 regiones

You built it. Now grow it.

AgentCeres is a managed AI marketing team — specialists draft the SEO, social, and outreach that fill your links, you approve what ships. 14-day free trial, from $39/month.

Start free trialMore projects