GoAccess 是一个开源的实时 Web 日志分析器和交互式查看器, 可在 *nix 系统的终端中运行,或直接在浏览器中运行。它专为 系统管理员、DevOps 工程师和安全专业人员设计,能够即时提供快速、可操作的 HTTP 统计信息和可视化服务器报告。GoAccess 实时解析你的 Web 服务器日志, 并直接在终端或通过实时 HTML 仪表板呈现数据,让你能够轻松 监控流量、检测异常并即时排查问题。
更多信息请访问:https://goaccess.io。
GoAccess 解析指定的 Web 日志文件,并将数据输出到 X 终端。功能包括:
完全实时
所有面板和指标在终端输出中每 200 毫秒更新一次,
在 HTML 输出中每秒更新一次。
所需配置极少
你只需针对访问日志文件运行它,选择日志格式,然后让
GoAccess 解析访问日志并为你展示统计数据。
跟踪应用响应时间
跟踪处理请求所花费的时间。如果你想
跟踪拖慢网站速度的页面,这非常有用。
WebSocket 身份验证:
GoAccess 提供增强的 WebSocket 身份验证,支持本地和
外部 JWT 验证,具备安全的令牌刷新能力,并能无缝
集成外部身份验证系统。已验证的令牌会跟踪到其 exp 声明,
一旦过期即关闭连接。
几乎支持所有 Web 日志格式
GoAccess 允许使用任意自定义日志格式字符串。预定义选项包括
Apache、Nginx、Amazon S3、Elastic Load Balancing、CloudFront 等。
增量日志处理
需要数据持久化?GoAccess 能够通过磁盘持久化选项
增量处理日志。
仅有一个依赖项
GoAccess 使用 C 语言编写。运行它只需要 ncurses 作为依赖项。
仅此而已。它甚至自带 Web Socket 服务器 — http://gwsocket.io/。
访客
按小时或日期确定命中数、访客数、带宽以及最慢
请求的指标。
按虚拟主机统计指标
有多个虚拟主机(Server Blocks)?它提供一个面板,
显示哪个虚拟主机消耗了最多的 Web 服务器资源。
UTM 活动跟踪
按媒介、来源、活动、内容和关键词细分活动流量,
全部从请求的 URL 中提取。
机器人与爬虫分类
将 AI 爬虫和 Fediverse(ActivityPub)流量归入各自的
类别,与传统搜索引擎爬虫分开。
TLS 设置
当日志格式中包含 %K、%k 和 %g 时,报告协商的
协议、密码套件和密钥交换组。
ASN(自治系统编号映射)
非常适合检测恶意流量模式并据此进行拦截。
还可以在解析时通过 --exclude-asn 丢弃整个网络,
或通过 --include-asn 将报告限制为特定网络。
配色方案可自定义
根据你自己的颜色喜好/方案定制 GoAccess。可以通过
终端,或直接在 HTML 输出上应用样式表来实现。
支持大型数据集
GoAccess 凭借其优化的内存哈希表,具备解析大型日志的能力。它具有非常好的内存占用和相当不错的性能。该存储还支持磁盘持久化。
Docker 支持
能够从上游构建 GoAccess 的 Docker 镜像。你仍然可以通过使用卷映射和编辑 goaccess.conf 来完全配置它。请参阅下方的 Docker 部分。此外还有关于如何使用 docker-compose 的文档。
GoAccess 允许使用任何自定义日志格式字符串。预定义选项包括但不限于:
HTML 报告使用 Natural Earth 地图数据,
该数据属于公有领域。
捆绑的国家地图包含一项本地调整,将克里米亚显示为乌克兰的一部分,
这与联合国大会第 68/262 号决议一致。
在更新 resources/countries-110m.json 时请保留此调整。
流量的国家归属来自所配置的 GeoIP 数据库;
更改地图轮廓不会改变报告总计。
GoAccess 被设计为一款快速的、基于终端的日志分析器。其核心理念 是无需使用浏览器即可快速实时分析和查看 Web 服务器统计数据(如果你想通过 SSH 快速分析访问日志,或者你只是喜欢在终端中工作,那就太棒了)。
它也是安全监控的实用工具,可以让你直接从日志中轻松 发现可疑活动、异常流量模式、暴力破解尝试、 扫描器、机器人以及异常请求。
虽然终端输出是默认输出,但它能够
生成完整、自包含、实时的 HTML
报告,以及 JSON 和
CSV 报告。
你可以更多地把它看作一个监控命令工具。
GoAccess 可以在 *nix 系统上编译和使用。
下载、解压并编译 GoAccess:
$ wget https://tar.goaccess.io/goaccess-1.12.tar.gz
$ tar -xzvf goaccess-1.12.tar.gz
$ cd goaccess-1.12/
$ ./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
在 GNU+Linux 上安装 GoAccess 最简单的方法是使用你所用 GNU+Linux 发行版首选的包管理器。 请注意,并非所有发行版都会提供最新版本的 GoAccess。
# apt-get install goaccess
注意: 这很可能会安装一个过时的 GoAccess 版本。要 确保你运行的是 GoAccess 的最新稳定版本,请参阅 下方的替代选项。
$ 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
注意:
.deb 包也可通过 HTTPS 获取。你可能需要安装 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 可通过 Cygwin 在 Windows 上使用。参见 Cygwin 的 软件包。或者通过 Windows 10 上的 GNU+Linux 子系统使用。
Docker 镜像已更新,能够从访问日志中直接输出结果。如果你只想输出报告,可以将外部环境中的日志通过管道传递给基于 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 -
或者实时模式
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 -
此外还有关于如何使用 docker-compose 的文档。
你也可以在隔离的容器环境中为基于 Debian 的系统构建二进制文件,以避免开发库弄乱你的本地系统:
$ 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
你可以在 DOCKER.md 中了解更多关于使用 docker 镜像的信息。
GoAccess 的依赖要求极低,它使用 C 语言编写,仅需要 ncurses。 不过,下表列出了某些发行版中从源码构建 GoAccess 所需的一些可选依赖。
| 发行版 | NCurses | GeoIP (可选) | GeoIP2 (可选) | OpenSSL (可选) |
|---|---|---|---|---|
| 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 |
注意:从源码编译/构建软件时,你可能需要安装 gcc、autoconf、
gettext、autopoint 等构建工具。例如
base-devel、build-essential、"Development Tools"。
内存存储可提供更好的性能,但代价是将数据集大小限制在可用物理内存的范围内。GoAccess 使用 内存哈希表。它具有非常好的内存占用和相当不错的 性能。此存储还支持磁盘持久化。
参见可提供给命令或在配置文件中指定的 options。如果在配置文件中指定,长选项使用时无需前置 --。