GoAccess es un analizador de registros web en tiempo real y un visor interactivo de código abierto que se ejecuta en una terminal en sistemas *nix o a través de su navegador . Proporciona estadísticas HTTP rápidas y valiosas para los administradores de sistemas que requieren un informe visual del servidor sobre la marcha. Más información en: https://goaccess.io.
GoAccess analiza el archivo de registro web especificado y envía los datos al 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 del terminal y cada segundo en la salida HTML.
Configuración mínima necesaria
Puede simplemente ejecutarlo en su archivo de registro de acceso, elegir el formato de registro y dejar 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 necesario para atender la solicitud. Extremadamente útil si desea realizar un seguimiento de las páginas que ralentizan su sitio.
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 de registros incremental
¿Necesita persistencia de datos? GoAccess tiene la capacidad de procesar registros de forma incremental a través de las opciones de persistencia en el disco.
Sólo una dependencia
GoAccess está escrito en C. Para ejecutarlo, solo necesita ncurses como dependencia. Eso es todo. Incluso cuenta con su propio servidor Web Socket: http://gwsocket.io/.
Visitantes
Determine la cantidad de visitas, visitantes, ancho de banda y métricas para las solicitudes de ejecución más lenta por hora o fecha.
Métricas por host virtual
¿Tiene varios hosts virtuales (bloques de servidores)? Cuenta con un panel que muestra qué host virtual consume la mayor parte de los recursos del servidor web.
ASN (mapeo de números de sistema autónomo)
Excelente para detectar patrones de tráfico maliciosos y bloquearlos en consecuencia.
Esquema de colores personalizable
Adapte GoAccess para que se adapte a sus propios gustos/esquemas 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 presenta la capacidad de analizar registros grandes debido a sus tablas hash en memoria optimizadas. Tiene muy buen uso de memoria y un rendimiento bastante bueno. Este almacenamiento también admite la persistencia en disco.
Soporte acoplable
Capacidad para crear una imagen Docker de GoAccess desde arriba. Aún puedes configurarlo completamente usando el mapeo de volúmenes y editando goaccess.conf
. Consulte la sección Docker a continuación.
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 principal es analizar y ver rápidamente las estadísticas del servidor web en tiempo real sin necesidad de usar su navegador ( excelente 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 ).
Si bien la salida del terminal es la salida predeterminada, tiene la capacidad de generar un informe HTML
completo, autónomo y en tiempo real, así como un informe JSON
y CSV
.
Puede verlo más como una herramienta de comando de monitor que cualquier otra cosa.
GoAccess se puede compilar y utilizar en sistemas *nix.
Descargue, extraiga y compile GoAccess con:
$ wget https://tar.goaccess.io/goaccess-1.9.3.tar.gz
$ tar -xzvf goaccess-1.9.3.tar.gz
$ cd goaccess-1.9.3/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ 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 utilizando el administrador de paquetes preferido de su distribución GNU+Linux. Tenga en cuenta que no todas las distribuciones tendrán disponible la última versión de GoAccess.
# 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 necesites 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 utilizar en Windows a través de Cygwin. Vea los paquetes de Cygwin. O a través del Subsistema GNU+Linux en Windows 10.
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 distribuciones para crear GoAccess desde el código fuente.
distribución | NCursos | GeoIP (opcional) | GeoIP2 (opcional) | OpenSSL (opcional) |
---|---|---|---|---|
Ubuntu/Debian | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
RHEL/CentOS | ncurses-desarrollo | desarrollo geoip | libmaxminddb-devel | desarrollo openssl |
Arco | maldiciones | geoip | libmaxminddb | abresl |
Gentoo | sys-libs/ncurses | dev-libs/geoip | dev-libs/libmaxminddb | dev-libs/openssl |
Slackware | maldiciones | GeoIP | libmaxminddb | abresl |
Nota : Es posible que necesite instalar herramientas de compilación como gcc
, autoconf
, gettext
, autopoint
, etc. para compilar/crear software desde la fuente. por ejemplo, base-devel
, build-essential
, "Development Tools"
.
Se ha actualizado una imagen de 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 puede compilar 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 de la ventana acoplable en DOCKER.md.
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 muy buen uso de memoria y un rendimiento bastante bueno. Este almacenamiento también admite la persistencia en disco.
Vea las opciones que se pueden proporcionar al comando o especificar en el archivo de configuración. Si se especifica en el archivo de configuración, se deben usar opciones largas sin anteponer --
.
Nota : La canalización de datos a GoAccess no generará un cuadro de diálogo de configuración de registro/fecha/hora; deberá definirlo previamente en su archivo de configuración o en la línea de comando.
Para enviar a 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 para la salida estándar:
# goaccess access.log --no-csv-summary -o csv
GoAccess también permite una gran flexibilidad para el filtrado y análisis en tiempo real. Por ejemplo, para diagnosticar problemas rápidamente mediante el seguimiento de registros desde que se inició goaccess:
# tail -f access.log | goaccess -
Y aún mejor, para filtrar manteniendo abierta una tubería para preservar el análisis en tiempo real, podemos hacer uso de tail -f
y una herramienta de patrones coincidentes como grep
, awk
, sed
, etc.:
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
o analizar desde el principio del archivo manteniendo la tubería abierta y aplicando 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 varios registros con GoAccess. La más sencilla es pasar varios archivos de registro a la línea de comando:
# goaccess access.log access.log.1
Incluso es posible analizar archivos desde una tubería mientras se leen archivos normales:
# cat access.log.2 | goaccess access.log access.log.1 -
Nota : el guión único se agrega a la línea de comando 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 quisiéramos 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
.
Utilice --jobs=
(o -j
) para habilitar el análisis de subprocesos múltiples. 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 del 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 puedes enviar el archivo HTML por correo electrónico, ya que está compuesto por un único archivo sin dependencias de archivos externos, ¡qué bueno es eso!
El proceso de generar un informe HTML en tiempo real es muy similar al proceso de creación de un informe estático. Sólo se necesita --real-time-html
para que sea 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 utilizará el nombre de host del informe generado. Opcionalmente, puede especificar la URL a la que se conectará el navegador del cliente. Consulte las preguntas frecuentes para ver 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=
y --ssl-key=
.
Otra opción útil sería filtrar las fechas del registro web.
Lo siguiente obtendrá todas las solicitudes HTTP desde 05/Dec/2010
hasta el final del archivo.
# sed -n '/05/Dec/2010/,$ p' access.log | goaccess -a -
o usando fechas relativas como ayer o mañana:
# sed -n '/'$(date '+%d/%b/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a -
Si queremos analizar solo un período de tiempo determinado 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 una cierta cantidad de datos y reciclar el almacenamiento, solo podemos conservar una cierta cantidad de días. Por ejemplo, para conservar y mostrar los últimos 5 días:
# goaccess access.log --keep-last=5
Suponiendo que su registro contenga 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 utilizar 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, páginas vistas, html
, htm
, php
, etc. dentro de una solicitud:
# awk '$7~/.html|.htm|.php/' access.log | goaccess -
Tenga en cuenta que $7
es el campo de solicitud para el formato de registro común y combinado (sin Virtual Host). Si su registro incluye Virtual Host, probablemente desee utilizar $8
en su lugar. Lo mejor es comprobar para qué campo estás disparando, 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 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 descripción general estimada de cuántos bots (rastreadores) están atacando su servidor:
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -
Además, cabe 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 -
Nota: SSH requiere -n
para que GoAccess pueda leer desde la entrada estándar. Además, asegúrese de utilizar claves SSH para la autenticación, ya que no funcionará si se requiere una frase de contraseña.
Recibimos muchas preguntas y cuestiones que han sido respondidas 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
y luego se puede cargar el mismo conjunto de datos.--restore
. Si se pasan datos nuevos (canalizados o a través de un archivo de registro), los agregará 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, 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 ≤ a la almacenada.
Los datos canalizados funcionan según 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.
// last month access log
# goaccess access.log.1 --persist
luego, cárgalo con
// append this month access log, and preserve new data
# goaccess access.log --restore --persist
Para leer solo datos persistentes (sin analizar datos nuevos)
# goaccess --restore
Cualquier ayuda sobre GoAccess es bienvenida. La forma más útil es probarlo y dar su opinión. No dude en utilizar el rastreador de problemas de GitHub y las solicitudes de extracción para discutir y enviar cambios de código.
Puedes contribuir a nuestras traducciones editando los archivos .po directamente en GitHub o usando la interfaz visual inlang.com
¡Disfrutar!