Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
goaccess — GoAccess 是一个实时的Web日志分析器和交互式查看器,可在 *nix 系统的终端或浏览器中运行。 | Kitploit
工具/GitHubGitHub/allinurl/goaccess
通用工具隐私保护异常检测日志分析
GitHuballinurl/goaccess

goaccess

GoAccess 是一个实时的Web日志分析器和交互式查看器,可在 *nix 系统的终端或浏览器中运行。

查看仓库网站
20.8k1.2k116天前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

GoAccess C build GoAccess

这是什么?

GoAccess 是一款开源、实时的 Web 日志分析器和交互式查看器,可在 *nix 系统的终端中或直接在浏览器中运行。专为系统管理员、DevOps 工程师和安全专业人员设计,它能快速提供可操作的 HTTP 统计数据和可视化的服务器报告。GoAccess 实时解析您的 Web 服务器日志,并直接在终端或通过实时 HTML 仪表板呈现数据,使您可以轻松监控流量、检测异常并即时排查问题。

更多信息请访问:https://goaccess.io。

GoAccess 终端仪表板 GoAccess HTML 仪表板

功能特性

GoAccess 解析指定的 Web 日志文件,并将数据输出到 X 终端。功能包括:

  • 完全实时
    所有面板和指标每 200 毫秒在终端输出中更新,每 1 秒在 HTML 输出中更新。

  • 极简配置需求
    您只需直接针对访问日志文件运行它,选择日志格式,然后让 GoAccess 解析访问日志并显示统计数据。

  • 跟踪应用响应时间
    跟踪服务请求所花费的时间。如果您想跟踪拖慢网站速度的页面,这非常有用。

  • WebSocket 认证:
    GoAccess 提供增强的 WebSocket 认证,支持本地和外部 JWT 验证,具有安全的令牌刷新能力,并与外部认证系统无缝集成。

  • 几乎所有 Web 日志格式
    GoAccess 允许任何自定义日志格式字符串。预定义选项包括 Apache、Nginx、Amazon S3、Elastic Load Balancing、CloudFront 等。

  • 增量日志处理
    需要数据持久化?GoAccess 能够通过磁盘持久化选项增量处理日志。

  • 仅一个依赖项
    GoAccess 用 C 语言编写。只需 ncurses 作为依赖即可运行。它甚至自带自己的 Web Socket 服务器 — http://gwsocket.io/。

  • 访客
    按小时或日期确定命中数、访客数、带宽以及最慢运行请求的指标。

  • 每个虚拟主机的指标
    有多个虚拟主机(服务器块)?它有一个面板显示哪个虚拟主机消耗了最多的 Web 服务器资源。

  • ASN(自治系统编号映射)
    非常适合检测恶意流量模式并相应地阻止它们。

  • 颜色方案可定制
    定制 GoAccess 以适应您自己的颜色品味/方案。可通过终端,或直接在 HTML 输出上应用样式表。

  • 支持大数据集
    GoAccess 凭借其优化的内存哈希表,能够解析大型日志。内存使用情况良好,性能相当不错。这种存储也支持磁盘持久化。

  • Docker 支持
    能够从上游构建 GoAccess 的 Docker 镜像。您仍然可以通过卷映射和编辑 goaccess.conf 来完全配置它。请参阅下面的 Docker 部分。还有关于如何使用 docker-compose 的文档。

几乎所有 Web 日志格式...

GoAccess 允许任何自定义日志格式字符串。预定义选项包括但不限于:

  • Amazon CloudFront(下载分发)
  • Amazon Simple Storage Service(S3)
  • AWS Elastic Load Balancing
  • 组合日志格式(XLF/ELF)Apache | Nginx
  • 通用日志格式(CLF)Apache
  • Google Cloud Storage
  • Apache 虚拟主机
  • Squid 原生格式
  • W3C 格式(IIS)
  • Caddy 的 JSON 结构化格式
  • Traefik 的 CLF 风格

为什么选择 GoAccess?

GoAccess 被设计为一种快速的、基于终端的日志分析器。其核心思想是无需使用浏览器即可实时快速分析和查看 Web 服务器统计数据(如果您想通过 SSH 对访问日志进行快速分析,或者您只是喜欢在终端中工作,这非常棒)。

它还可以作为安全监控的实用工具,使您能够直接从日志中发现可疑活动、异常流量模式、暴力破解尝试、扫描器、爬虫和异常请求。

虽然终端输出是默认输出,但它能够生成一个完整的、自包含的、实时的 HTML 报告,以及 JSON 和 CSV 报告。

您可以将其视为一种监控命令工具,而非其他。

安装

打包状态

从发布版本构建

GoAccess 可以在 *nix 系统上编译和使用。

下载、解压并编译 GoAccess:

root@kitploit:~
$ 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

从 GitHub(开发版)构建

root@kitploit:~
$ git clone https://github.com/allinurl/goaccess.git
$ cd goaccess
$ autoreconf -fiv
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install

发行版

在 GNU+Linux 上,使用您发行版的首选包管理器安装 GoAccess 是最简单的。请注意,并非所有发行版都提供最新版本的 GoAccess。

Debian/Ubuntu

root@kitploit:~
# apt-get install goaccess

注意: 这很可能会安装旧版本的 GoAccess。为确保您运行的是最新的稳定版本,请参见下面的替代选项。

官方 GoAccess Debian 和 Ubuntu 仓库

root@kitploit:~
$ 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。

Fedora

root@kitploit:~
# yum install goaccess

Arch

root@kitploit:~
# pacman -S goaccess

Gentoo

root@kitploit:~
# emerge net-analyzer/goaccess

OS X / Homebrew

root@kitploit:~
# brew install goaccess

FreeBSD

root@kitploit:~
# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess

OpenBSD

root@kitploit:~
# cd /usr/ports/www/goaccess && make install clean
# pkg_add goaccess

openSUSE

root@kitploit:~
# zypper ar -f obs://server:http http
# zypper in goaccess

OpenIndiana

root@kitploit:~
# pkg install goaccess

pkgsrc (NetBSD, Solaris, SmartOS, ...)

root@kitploit:~
# pkgin install goaccess

Windows

GoAccess 可以通过 Cygwin 在 Windows 中使用。请参阅 Cygwin 的 包。或者通过 Windows 10 的 GNU+Linux 子系统。

Docker

已更新 Docker 镜像,能够从访问日志中输出。如果您只想输出报告,可以将日志从外部环境通过管道传输到基于 Docker 的进程:

root@kitploit:~
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 -

或实时

root@kitploit:~
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 的系统构建二进制文件,以避免用开发库弄乱本地系统:

root@kitploit:~
$ 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。

注意: 您可能需要安装诸如 gcc、autoconf、gettext、autopoint 等构建工具,以便从源代码编译/构建软件。例如,base-devel、build-essential、"Development Tools"。

存储

默认哈希表

内存存储提供了更好的性能,但代价是将数据集大小限制为可用物理内存量。GoAccess 使用内存哈希表。内存使用情况良好,性能相当不错。这种存储也支持磁盘持久化。

命令行 / 配置选项

请参阅可以提供给命令或在配置文件中指定的 选项。如果在配置文件中指定,需要使用长选项,而不需要前置 --。

使用 / 示例

注意:将数据通过管道传输到 GoAccess 不会提示日志/日期/时间配置对话框,您需要事先在配置文件中或命令行中定义它。

入门

要输出到终端并生成交互式报告:

root@kitploit:~
# goaccess access.log

要生成 HTML 报告:

root@kitploit:~
# goaccess access.log -a > report.html

要生成 JSON 报告文件:

root@kitploit:~
# goaccess access.log -a -d -o report.json

要生成 CSV 报告到标准输出:

root@kitploit:~
# goaccess access.log --no-csv-summary -o csv

GoAccess 还为实时过滤和解析提供了极大的灵活性。例如,要快速诊断问题,监控自 goaccess 启动以来的日志:

root@kitploit:~
# tail -f access.log | goaccess -

更好的是,在过滤的同时保持打开管道以维持实时分析,我们可以使用 tail -f 和匹配模式工具(如 grep、awk、sed 等):

root@kitploit:~
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -

或从文件开头解析,同时保持管道打开并应用过滤器:

root@kitploit:~
# tail -f -n +0 access.log | grep -i --line-buffered 'firefox' | goaccess -o report.html --real-time-html -

多个日志文件

有多种方法可以使用 GoAccess 解析多个日志。最简单的方法是将多个日志文件传递给命令行:

root@kitploit:~
# goaccess access.log access.log.1

甚至可以从管道解析文件,同时读取常规文件:

root@kitploit:~
# cat access.log.2 | goaccess access.log access.log.1 -

注意:将单个短横线附加到命令行,让 GoAccess 知道它应该从管道读取。

现在,如果我们想为 GoAccess 增加更多灵活性,可以使用 zcat --force 来读取压缩和未压缩的文件。例如,如果我们想处理所有日志文件 access.log*,可以这样做:

root@kitploit:~
# zcat --force access.log* | goaccess -

注意:在 Mac OS X 上,使用 gunzip -c 代替 zcat。

多线程支持

使用 --jobs=<count>(或 -j)启用多线程解析。例如:

root@kitploit:~
# goaccess access.log -o report.html -j 4

并使用 --chunk-size=<256-32768> 调整块大小,默认块大小为 1024。例如:

root@kitploit:~
# goaccess access.log -o report.html -j 4 --chunk-size=8192

实时 HTML 输出

GoAccess 能够在 HTML 报告中输出实时数据。您甚至可以通过电子邮件发送 HTML 文件,因为它由单个文件组成,没有外部文件依赖,多么简洁!

生成实时 HTML 报告的过程与创建静态报告非常相似。只需要添加 --real-time-html 即可使其实时。

root@kitploit:~
# goaccess access.log -o /usr/share/nginx/html/your_site/report.html --real-time-html

要查看报告,您可以导航到 http://your_site/report.html。

默认情况下,GoAccess 将使用生成报告的主机名。可选地,您可以指定客户端浏览器将连接的 URL。请参阅 FAQ 获取更详细的示例。

root@kitploit:~
# goaccess access.log -o report.html --real-time-html --ws-url=goaccess.io

默认情况下,GoAccess 监听端口 7890,要使用不同于 7890 的端口,您可以指定为(确保端口已打开):

root@kitploit:~
# goaccess access.log -o report.html --real-time-html --port=9870

要将 WebSocket 服务器绑定到不同于 0.0.0.0 的地址,您可以指定为:

root@kitploit:~
# goaccess access.log -o report.html --real-time-html --addr=127.0.0.1

注意:要通过 TLS/SSL 连接输出实时数据,您需要使用 --ssl-cert=<cert.crt> 和 --ssl-key=<priv.key>。

过滤

使用日期

另一个有用的管道是从 Web 日志中过滤出日期。

以下将获取从 05/Dec/2010 开始直到文件末尾的所有 HTTP 请求。

root@kitploit:~
# sed -n '/05\/Dec\/2010/,$ p' access.log | goaccess -a -

或使用相对日期,例如昨天的或明天的日期:

root@kitploit:~
# sed -n '/'$(date '+%d\/%b\/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a -

如果我们只想解析从 DATE a 到 DATE b 的特定时间范围,可以这样做:

root@kitploit:~
# sed -n '/5\/Nov\/2010/,/5\/Dec\/2010/ p' access.log | goaccess -a -

如果我们只想保留一定量的数据并回收存储,可以只保留一定天数。例如,保留并显示最近 5 天:

root@kitploit:~
# goaccess access.log --keep-last=5

虚拟主机

假设您的日志包含虚拟主机字段。例如:

root@kitploit:~
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"

并且您希望将虚拟主机附加到请求中,以便查看顶部 URL 属于哪个虚拟主机:

root@kitploit:~
awk '$8=$1$8' access.log | goaccess -a -

要执行相同操作,同时使用实时过滤和解析:

root@kitploit:~
tail -f  access.log | unbuffer -p awk '$8=$1$8' | goaccess -a -

要排除一个虚拟主机列表,您可以执行以下操作:

root@kitploit:~
# grep -v "`cat exclude_vhost_list_file`" vhost_access.log | goaccess -

文件、状态码和爬虫

要解析特定页面,例如,请求中的 page views、html、htm、php 等:

root@kitploit:~
# awk '$7~/\.html|\.htm|\.php/' access.log | goaccess -

注意,$7 是通用和组合日志格式中的请求字段(不含虚拟主机),如果您的日志包含虚拟主机,则可能希望使用 $8 代替。最好检查您要定位的字段,例如:

root@kitploit:~
# tail -10 access.log | awk '{print $8}'

或者要解析特定的状态码,例如 500(内部服务器错误):

root@kitploit:~
# awk '$9~/500/' access.log | goaccess -

或多个状态码,例如所有 3xx 和 5xx:

root@kitploit:~
# tail -f -n +0 access.log | awk '$9~/3[0-9]{2}|5[0-9]{2}/' | goaccess -o out.html -

并粗略估计有多少爬虫(爬取器)访问您的服务器:

root@kitploit:~
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -

提示

此外,值得一提的是,如果我们想以较低优先级运行 GoAccess,可以将其运行为:

root@kitploit:~
# nice -n 19 goaccess -f access.log -a

如果您不想在服务器上安装它,仍然可以从本地机器运行它!

root@kitploit:~
# ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess - --log-format=COMBINED

注意: SSH 需要 -n 以便 GoAccess 可以从标准输入读取。另外,确保使用 SSH 密钥进行身份验证,因为如果需要密码短语,它将无法工作。

故障排除

我们收到许多之前已经回答过的问题和问题。

  • 日期/时间匹配问题?检查您的日志格式和运行 GoAccess 的系统语言环境是否匹配。请参阅 #1571
  • 模式匹配问题?空格经常是问题,请参阅例如 #136、#1579
  • 其他匹配日志条目的问题:请参阅 超过 200 个关于日志/日期/时间格式的已关闭问题
  • 日志处理问题?请参阅 超过 111 个关于日志处理的问题

增量日志处理

GoAccess 能够通过其内部存储并转储数据到磁盘来增量处理日志。其工作方式如下:

  1. 首先必须使用 --persist 持久化数据集,然后可以使用以下方式加载相同的数据集。
  2. --restore。如果传递了新的数据(通过管道或日志文件),它将追加到原始数据集中。
注意

GoAccess 跟踪所有已处理文件的 inode(假设文件将保留在同一分区上),此外,它还从日志中提取一个数据片段,以及每个文件解析的最后一行和最后一行的的时间戳。例如,inode:29627417|line:20012|ts:20171231235059

首先,它比较片段是否与正在解析的日志匹配,如果匹配,则假设日志没有发生重大变化,例如没有被截断。如果 inode 与当前文件不匹配,则解析所有行。如果当前文件匹配 inode,则读取剩余行并更新已解析行数和时间戳计数。作为额外的预防措施,它不会解析时间戳 ≤ 已存储时间戳的日志行。

管道传输的数据基于最后读取行的的时间戳工作。例如,它将解析并丢弃所有传入的条目,直到找到时间戳 >= 已存储时间戳的条目。

示例
root@kitploit:~
// 上个月的访问日志
# goaccess access.log.1 --persist

然后,使用以下方式加载

root@kitploit:~
// 追加本月的访问日志,并保留新数据
# goaccess access.log --restore --persist

仅读取持久化数据(不解析新数据)

root@kitploit:~
# goaccess --restore

贡献 ##任何关于 GoAccess 的帮助都是受欢迎的。最有帮助的方式是尝试使用它并给出反馈。欢迎使用 GitHub issue tracker 和 pull requests 来讨论和提交代码更改。

您可以通过直接在 GitHub 上编辑 .po 文件或使用可视化界面 inlang.com 来贡献翻译。

尽情使用吧!

下载工具
发行版NCursesGeoIP (可选)GeoIP2 (可选)OpenSSL (可选)
Ubuntu/Debianlibncurses-devlibgeoip-devlibmaxminddb-devlibssl-dev
RHEL/CentOSncurses-develgeoip-devellibmaxminddb-developenssl-devel
Archncursesgeoiplibmaxminddbopenssl
Gentoosys-libs/ncursesdev-libs/geoipdev-libs/libmaxminddbdev-libs/openssl
SlackwarencursesGeoIPlibmaxminddbopenssl