
GoAccess es un analizador de registros web en tiempo real y un visor interactivo que se ejecuta en una terminal en sistemas *nix o a través de tu navegador.
GoAccess es un analizador de registros web y visor interactivo de código abierto y en tiempo real que se ejecuta en una terminal en sistemas *nix o directamente en su navegador. Diseñado pensando en administradores de sistemas, ingenieros DevOps y profesionales de seguridad, ofrece estadísticas HTTP rápidas y procesables e informes visuales del servidor sobre la marcha. GoAccess analiza sus registros del servidor web en tiempo real y presenta los datos directamente en la terminal o a través de un panel HTML en vivo, lo que facilita monitorear el tráfico, detectar anomalías y solucionar problemas al instante.
Más información en: https://goaccess.io.
GoAccess analiza el archivo de registro web especificado y genera los datos en la terminal X. Las características incluyen:
Completamente en Tiempo Real
Todos los paneles y métricas están programados para actualizarse cada 200 ms en la salida de la terminal y cada segundo en la salida HTML.
Configuración Mínima Necesaria
Simplemente ejecútelo contra su archivo de registro de acceso, seleccione el formato de registro y deje que GoAccess analice el registro de acceso y le muestre las estadísticas.
Seguimiento del Tiempo de Respuesta de la Aplicación
Realice un seguimiento del tiempo que se tarda en atender la solicitud. Extremadamente útil si desea rastrear páginas que están ralentizando su sitio.
Autenticación WebSocket:
GoAccess ofrece autenticación WebSocket mejorada, compatible con verificación JWT local y externa, con capacidades seguras de renovación de tokens e integración perfecta con sistemas de autenticación externos.
Casi Todos los Formatos de Registro Web
GoAccess permite cualquier cadena de formato de registro personalizado. Las opciones predefinidas incluyen: Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, etc.
Procesamiento Incremental de Registros
¿Necesita persistencia de datos? GoAccess tiene la capacidad de procesar registros de forma incremental a través de las opciones de persistencia en disco.
Solo una Dependencia
GoAccess está escrito en C. Para ejecutarlo, solo necesita ncurses como dependencia. Eso es todo. Incluso cuenta con su propio servidor WebSocket — http://gwsocket.io/.
Visitantes
Determine la cantidad de aciertos, visitantes, ancho de banda y métricas para las solicitudes más lentas por hora o por fecha.
Métricas por Host Virtual
¿Tiene múltiples hosts virtuales (Server Blocks)? Cuenta con un panel que muestra qué host virtual está consumiendo la mayoría de los recursos del servidor web.
ASN (Mapeo del Número de Sistema Autónomo)
Excelente para detectar patrones de tráfico malicioso y bloquearlos en consecuencia.
Esquema de Colores Personalizable
Adapte GoAccess a su propio gusto/esquema de colores. Ya sea a través de la terminal o simplemente aplicando la hoja de estilo en la salida HTML.
Soporte para Grandes Conjuntos de Datos
GoAccess cuenta con la capacidad de analizar registros grandes gracias a sus tablas hash optimizadas en memoria. Tiene un uso de memoria muy bueno y un rendimiento bastante bueno. Este almacenamiento también tiene soporte para persistencia en disco.
GoAccess permite cualquier cadena de formato de registro personalizado. Las opciones predefinidas incluyen, entre otras:
GoAccess fue diseñado para ser un analizador de registros rápido basado en terminal. Su idea central es analizar y visualizar rápidamente las estadísticas del servidor web en tiempo real sin necesidad de usar su navegador (genial si desea hacer un análisis rápido de su registro de acceso a través de SSH, o si simplemente le encanta trabajar en la terminal).
También sirve como una herramienta práctica para el monitoreo de seguridad, facilitando la detección de actividad sospechosa, patrones de tráfico inusuales, intentos de fuerza bruta, escáneres, bots y solicitudes anómalas directamente desde sus registros.
Mientras que la salida de terminal es la salida predeterminada, tiene la capacidad de generar un informe HTML completo, autónomo y en tiempo real, así como informes JSON y CSV.
Puede verlo más como una herramienta de comando de monitoreo que cualquier otra cosa.
GoAccess se puede compilar y usar en sistemas *nix.
Descargue, extraiga y compile GoAccess con:
$ wget https://tar.goaccess.io/goaccess-1.10.2.tar.gz
$ tar -xzvf goaccess-1.10.2.tar.gz
$ cd goaccess-1.10.2/
$ ./configure --enable-utf8 --enable-geoip=mmdb --with-zlib
$ make
# make install
$ git clone https://github.com/allinurl/goaccess.git
$ cd goaccess
$ autoreconf -fiv
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
Es más fácil instalar GoAccess en GNU+Linux usando el gestor de paquetes preferido de su distribución GNU+Linux. Tenga en cuenta que no todas las distribuciones tendrán la última versión de GoAccess disponible.
# apt-get install goaccess
Nota: Es probable que esto instale una versión desactualizada de GoAccess. Para asegurarse de que está ejecutando la última versión estable de GoAccess, consulte la opción alternativa a continuación.
$ wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null
$ 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-get update
$ sudo apt-get install goaccess
Nota:
.deb en el repositorio oficial también están disponibles a través de HTTPS. Es posible que necesite instalar apt-transport-https.# yum install goaccess
# pacman -S goaccess
# emerge net-analyzer/goaccess
# brew install goaccess
# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess
# cd /usr/ports/www/goaccess && make install clean
# pkg_add goaccess
# zypper ar -f obs://server:http http
# zypper in goaccess
# pkg install goaccess
# pkgin install goaccess
GoAccess se puede usar en Windows a través de Cygwin. Consulte los paquetes de Cygwin. O a través del subsistema GNU+Linux en Windows 10.
Se ha actualizado una imagen Docker, capaz de dirigir la salida de un registro de acceso. Si solo desea generar un informe, puede canalizar un registro desde el entorno externo a un proceso basado en Docker:
touch report.html
cat access.log | docker run --rm -i -v ./report.html:/report.html -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED -
O en tiempo real
tail -F access.log | docker run -p 7890:7890 --rm -i -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED --real-time-html -
También hay documentación sobre cómo usar docker-compose.
También puede construir el binario para sistemas basados en Debian en un entorno de contenedor aislado para evitar saturar su sistema local con las bibliotecas de desarrollo:
$ curl -L "https://github.com/allinurl/goaccess/archive/refs/heads/master.tar.gz" | tar -xz && cd goaccess-master
$ docker build -t goaccess/build.debian-12 -f Dockerfile.debian-12 .
$ docker run -i --rm -v $PWD:/goaccess goaccess/build.debian-12 > goaccess
Puede leer más sobre el uso de la imagen Docker en DOCKER.md.
GoAccess tiene requisitos mínimos, está escrito en C y solo requiere ncurses. Sin embargo, a continuación se muestra una tabla de algunas dependencias opcionales en algunas distros para construir GoAccess desde el código fuente.
Nota: Es posible que necesite instalar herramientas de compilación como gcc, autoconf, gettext, autopoint, etc. para compilar/construir software desde el código fuente. Por ejemplo: base-devel, build-essential, "Development Tools".
El almacenamiento en memoria proporciona un mejor rendimiento a costa de limitar el tamaño del conjunto de datos a la cantidad de memoria física disponible. GoAccess utiliza tablas hash en memoria. Tiene un uso de memoria muy bueno y un rendimiento bastante bueno. Este almacenamiento también tiene soporte para persistencia en disco.
Consulte opciones que se pueden proporcionar al comando o especificar en el archivo de configuración. Si se especifican en el archivo de configuración, las opciones largas deben usarse sin anteponer --.
Nota: Canalizar datos a GoAccess no mostrará un diálogo de configuración de registro/fecha/hora; deberá definirlo previamente en su archivo de configuración o en la línea de comandos.
Para generar una salida en una terminal y generar un informe interactivo:
# goaccess access.log
Para generar un informe HTML:
# goaccess access.log -a > report.html
Para generar un archivo de informe JSON:
# goaccess access.log -a -d -o report.json
Para generar un informe CSV a la salida estándar:
# goaccess access.log --no-csv-summary -o csv
GoAccess también ofrece una gran flexibilidad para el filtrado y análisis en tiempo real. Por ejemplo, para diagnosticar rápidamente problemas monitoreando registros desde que se inició goaccess:
# tail -f access.log | goaccess -
E incluso mejor, para filtrar mientras se mantiene abierta una tubería para preservar el análisis en tiempo real, podemos hacer uso de tail -f y una herramienta de coincidencia de patrones como grep, awk, sed, etc.:
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
o para analizar desde el principio del archivo mientras se mantiene la tubería abierta y se aplica un filtro
# tail -f -n +0 access.log | grep -i --line-buffered 'firefox' | goaccess -o report.html --real-time-html -
Hay varias formas de analizar múltiples registros con GoAccess. La más simple es pasar múltiples archivos de registro a la línea de comandos:
# goaccess access.log access.log.1
Incluso es posible analizar archivos desde una tubería mientras se leen archivos regulares:
# cat access.log.2 | goaccess access.log access.log.1 -
Nota: se agrega un guión simple a la línea de comandos para que GoAccess sepa que debe leer desde la tubería.
Ahora, si queremos agregar más flexibilidad a GoAccess, podemos usar zcat --force para leer archivos comprimidos y sin comprimir. Por ejemplo, si deseamos procesar todos los archivos de registro access.log*, podemos hacer:
# zcat --force access.log* | goaccess -
Nota: En Mac OS X, use gunzip -c en lugar de zcat.
Use --jobs=<count> (o -j) para habilitar el análisis de múltiples hilos. Por ejemplo:
# goaccess access.log -o report.html -j 4
Y use --chunk-size=<256-32768> para ajustar el tamaño del fragmento; el tamaño de fragmento predeterminado es 1024. Por ejemplo:
# goaccess access.log -o report.html -j 4 --chunk-size=8192
GoAccess tiene la capacidad de generar datos en tiempo real en el informe HTML. Incluso puede enviar por correo electrónico el archivo HTML, ya que está compuesto por un solo archivo sin dependencias de archivos externos, ¡qué práctico!
El proceso de generar un informe HTML en tiempo real es muy similar al proceso de crear un informe estático. Solo se necesita --real-time-html para hacerlo en tiempo real.
# goaccess access.log -o /usr/share/nginx/html/your_site/report.html --real-time-html
Para ver el informe, puede navegar a http://your_site/report.html.
De forma predeterminada, GoAccess usará el nombre de host del informe generado. Opcionalmente, puede especificar la URL a la que se conectará el navegador del cliente. Consulte FAQ para un ejemplo más detallado.
# goaccess access.log -o report.html --real-time-html --ws-url=goaccess.io
De forma predeterminada, GoAccess escucha en el puerto 7890. Para usar un puerto diferente al 7890, puede especificarlo como (asegúrese de que el puerto esté abierto):
# goaccess access.log -o report.html --real-time-html --port=9870
Y para vincular el servidor WebSocket a una dirección diferente a 0.0.0.0, puede especificarlo como:
# goaccess access.log -o report.html --real-time-html --addr=127.0.0.1
Nota: Para generar datos en tiempo real a través de una conexión TLS/SSL, debe usar --ssl-cert=<cert.crt> y --ssl-key=<priv.key>.
Otra tubería útil sería filtrar fechas del registro web
El siguiente comando obtendrá todas las solicitudes HTTP a partir del 05/Dic/2010 hasta el final del archivo.
# sed -n '/05\/Dec\/2010/,$ p' access.log | goaccess -a -
o usando fechas relativas como el día de ayer o mañana:
# sed -n '/'$(date '+%d\/%b\/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a -
Si queremos analizar solo un cierto período de tiempo desde la FECHA a hasta la FECHA b, podemos hacer:
# sed -n '/5\/Nov\/2010/,/5\/Dec\/2010/ p' access.log | goaccess -a -
Si queremos conservar solo cierta cantidad de datos y reciclar el almacenamiento, podemos mantener solo un cierto número de días. Por ejemplo, para mantener y mostrar los últimos 5 días:
# goaccess access.log --keep-last=5
Suponiendo que su registro contiene el campo de host virtual. Por ejemplo:
vhost.io:80 8.8.4.4 - - [02/Mar/2016:08:14:04 -0600] "GET /shop HTTP/1.1" 200 615 "-" "Googlebot-Image/1.0"
Y le gustaría agregar el host virtual a la solicitud para ver a qué host virtual pertenecen las URL principales:
awk '$8=$1$8' access.log | goaccess -a -
Para hacer lo mismo, pero también usar filtrado y análisis en tiempo real:
tail -f access.log | unbuffer -p awk '$8=$1$8' | goaccess -a -
Para excluir una lista de hosts virtuales, puede hacer lo siguiente:
# grep -v "`cat exclude_vhost_list_file`" vhost_access.log | goaccess -
Para analizar páginas específicas, por ejemplo, visitas a páginas, html, htm, php, etc., dentro de una solicitud:
# awk '$7~/\.html|\.htm|\.php/' access.log | goaccess -
Nota: $7 es el campo de solicitud para el formato de registro común y combinado (sin host virtual); si su registro incluye host virtual, entonces probablemente quiera usar $8 en su lugar. Es mejor verificar a qué campo está apuntando, por ejemplo:
# tail -10 access.log | awk '{print $8}'
O para analizar un código de estado específico, por ejemplo, 500 (Error Interno del Servidor):
# awk '$9~/500/' access.log | goaccess -
O múltiples códigos de estado, por ejemplo, todos los 3xx y 5xx:
# tail -f -n +0 access.log | awk '$9~/3[0-9]{2}|5[0-9]{2}/' | goaccess -o out.html -
Y para obtener una visión general estimada de cuántos bots (rastreadores) están accediendo a su servidor:
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -
También vale la pena señalar que si queremos ejecutar GoAccess con menor prioridad, podemos ejecutarlo como:
# nice -n 19 goaccess -f access.log -a
y si no desea instalarlo en su servidor, ¡aún puede ejecutarlo desde su máquina local!
# ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess - --log-format=COMBINED
Nota: SSH requiere -n para que GoAccess pueda leer desde stdin. Además, asegúrese de usar claves SSH para la autenticación, ya que no funcionará si se requiere una frase de contraseña.
Recibimos muchas preguntas y problemas que ya han sido respondidos anteriormente.
GoAccess tiene la capacidad de procesar registros de forma incremental a través de su almacenamiento interno y volcar sus datos al disco. Funciona de la siguiente manera:
--persist, luego se puede cargar el mismo conjunto de datos con.--restore. Si se pasan nuevos datos (a través de tubería o de un archivo de registro), se agregarán al conjunto de datos original.GoAccess realiza un seguimiento de los inodos de todos los archivos procesados (asumiendo que los archivos permanecerán en la misma partición); además, extrae un fragmento de datos del registro junto con la última línea analizada de cada archivo y la marca de tiempo de la última línea analizada. Por ejemplo: inode:29627417|line:20012|ts:20171231235059
Primero, compara si el fragmento coincide con el registro que se está analizando; si es así, asume que el registro no ha cambiado drásticamente, por ejemplo, no ha sido truncado. Si el inodo no coincide con el archivo actual, analiza todas las líneas. Si el archivo actual coincide con el inodo, entonces lee las líneas restantes y actualiza el recuento de líneas analizadas y la marca de tiempo. Como precaución adicional, no analizará líneas de registro con una marca de tiempo ≤ que la almacenada.
Los datos canalizados funcionan basándose en la marca de tiempo de la última línea leída. Por ejemplo, analizará y descartará todas las entradas entrantes hasta que encuentre una marca de tiempo >= que la almacenada.
// registro de acceso del mes pasado
# goaccess access.log.1 --persist
luego, cárguelo con
// agregue el registro de acceso de este mes y conserve los nuevos datos
# goaccess access.log --restore --persist
Para leer solo los datos persistidos (sin analizar nuevos datos)
# goaccess --restore
Puedes contribuir a nuestras traducciones editando los archivos .po directamente en GitHub o usando la interfaz visual inlang.com
¡Disfruta!
Soporte para Docker
Capacidad para construir la imagen Docker de GoAccess desde el repositorio upstream. Aún puede configurarlo completamente mediante el mapeo de volúmenes y editando goaccess.conf. Consulte la sección Docker a continuación. También hay documentación sobre cómo usar docker-compose.
| Distro | NCurses | GeoIP (opt) | GeoIP2 (opt) | OpenSSL (opt) |
|---|
| Ubuntu/Debian | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
| RHEL/CentOS | ncurses-devel | geoip-devel | libmaxminddb-devel | openssl-devel |
| Arch | ncurses | geoip | libmaxminddb | openssl |
| Gentoo | sys-libs/ncurses | dev-libs/geoip | dev-libs/libmaxminddb | dev-libs/openssl |
| Slackware | ncurses | GeoIP | libmaxminddb | openssl |