如何在 Ubuntu 20.04 上安装和使用 GoAccess Web 日志分析器

作者选择Internet Archive接收捐赠,作为Write for DOnations计划的一部分。

介绍

GoAccess是一种实时监控 Web 服务器日志的工具。它是用 C 语言编写的,它的仪表板界面使用流行的ncurses库,可以直接从命令行访问。

这很棒,因为您可以通过 SSH 连接到您控制的任何 Web 服务器,并快速安全地查看或分析相关统计数据。除了命令行仪表板界面,它还能够以其他格式(例如 HTML、JSON 和 CSV)显示统计信息,您可以在其他上下文中使用这些数据或与他人共享。

根据您的需要,GoAccess 也可以成为客户端分析工具的绝佳替代品。它直接分析您的服务器日志,因此您无需加载任何额外的脚本,您的数据完全在您的控制之下。

在本教程中,您将在 Ubuntu 20.04 Web 服务器上安装和配置 GoAccess for Apache。在查看命令行界面上的可用模块和导航快捷方式之前,您将使用 GoAccess 访问 Apache 日志文件。

先决条件

对于本教程,您将需要以下内容:

第 1 步 – 安装 GoAccess

在此步骤中,您将安装 GoAccess 工具及其依赖项。

首先确保包数据库和系统是最新的:

  • sudo apt update
  • sudo apt full-upgrade

现在是安装 GoAccess 的时候了。Ubuntu 存储库中提供了该工具的一个版本,但这通常不是最新的稳定版本。例如,撰写本文时 GoAccess 的最新版本是 1.4,而 Ubuntu 20.04 存储库提供的版本是 1.3。

为确保您的服务器上安装了最新稳定版本的 GoAccess,您可以从源代码编译或使用 Ubuntu 上的官方 GoAccess 存储库。

方法 1 — 从源代码编译

首先,安装从源代码编译 GoAccess 所需的依赖项:

  • sudo apt install libncursesw5-dev libgeoip-dev libtokyocabinet-dev build-essential

您安装以下依赖项:

  • build-essential: 安装许多包,其中包括gccC、C+ 和其他编程语言的编译器,以及make用于构建 GoAccess 生成文件的编译器。
  • libncursesw5-dev:安装 GoAccess 用于其命令行界面的 ncurses 库。
  • libgeoip-dev: 包括 GeoIP 库所需的文件。
  • libtokyocabinet-dev: 提供数据库依赖以获得更高的性能。

接下来,使用以下命令从他们的官方网站下载最新版本的 GoAccess

  • wget http://tar.goaccess.io/goaccess-1.4.tar.gz

下载完成后,使用以下命令提取存档:

  • tar -xzvf goaccess-1.4.tar.gz

像这样进入新解压的目录:

  • cd goaccess-1.4/

运行在此目录中找到的配置脚本:

  • ./configure --enable-utf8 --enable-geoip=legacy

--enable-utf8标志确保 GoAccess 编译时支持宽字符,同时--enable-geoip启用对原始 GeoIP 数据库的 GeoLocation 支持。您可以替换legacymmdb使用增强GeoIP2数据库来代替。您可以在GoAccess 网站上找到其他配置选项

您将收到类似于以下内容的输出:

Output
. . . Your build configuration: Prefix : /usr/local Package : goaccess Version : 1.4 Compiler flags : -pthread Linker flags : -lnsl -lncursesw -lGeoIP -lpthread UTF-8 support : yes Dynamic buffer : no Geolocation : GeoIP Legacy Storage method : In-Memory with On-Disk Persitance Storage TLS/SSL : no Bugs : [email protected]

运行make命令构建安装 GoAccess 所需的 makefile:

  • make

最后,使用之前创建的 makefile 将 GoAccess 安装到系统中:

  • sudo make install

通过运行确保程序已成功安装:

  • goaccess --version

您将收到以下输出:

Output
GoAccess - 1.4. For more details visit: http://goaccess.io Copyright (C) 2009-2020 by Gerardo Orellana Build configure arguments: --enable-utf8 --enable-geoip=legacy

方法 2 — 使用官方 GoAccess 存储库

安装 GoAccess 的另一种方法是使用该程序的官方 Ubuntu 存储库。如果您希望在系统升级期间自动将其更新到较新版本,而不必为每个新版本从源代码编译,则此方法更可取。您需要先将存储库添加到您的服务器:

  • echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list

首先,您获得发行版的发行版名称,然后tee将其通过管道传送到,附加到文件中/etc/apt/sources.list.d/goaccess.list

使用源列表中的存储库,您现在可以下载 GPG 密钥以验证签名:

  • wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/goaccess.gpg add -

接下来,使用以下命令更新包数据库:

  • sudo apt update

最后,安装 GoAccess:

  • sudo apt install goaccess

GoAccess 现在安装在您的 Ubuntu 服务器上。在下一步中,您将访问并编辑其配置文件,以便您可以更改程序的运行方式。

步骤 2 — 编辑 GoAccess 配置

GoAccess 带有一个配置文件,您可以在其中永久更改程序的行为。您将编辑此文件以指定时间、日期和日志格式,以便 GoAccess 知道如何解析服务器日志。

该配置文件可以在位于~/.goaccessrc%sysconfdir%/goaccess.conf其中%sysconfdir%或者是/etc/, /usr/etc/,或/usr/local/etc/要找出配置文件在服务器上的位置,请运行以下命令:

  • goaccess --dcf
Sample output
/etc/goaccess/goaccess.conf

使用nano以下命令编辑此配置文件

  • sudo nano /etc/goaccess/goaccess.conf

注意:如果服务器上不存在此文件,请确保先创建它并使用GitHub 上goaccess.conf文件内容填充它

文件中的许多行都被注释掉了。要启用一个选项,请删除#它前面的第一个字符。让我们time-format首先启用Apache设置。此设置指定log-format时间并允许 GoAccess 解析满足支持的格式标准的任何纯文本 Apache 日志文件。

/etc/goaccess/goaccess.conf
# The following time format works with any of the
# Apache/NGINX's log formats below.
#
time-format %H:%M:%S

接下来,您将取消注释date-format指定log-format日期的 Apache设置

/etc/goaccess/goaccess.conf
# The following date format works with any of the
# Apache/NGINX's log formats below.
#
date-format %d/%b/%Y

最后,取消注释log-format设置。有几行更改了此设置,而要取消注释的确切行取决于您的 Web 服务器的设置方式。如果您有非虚拟主机设置,请取消注释以下log-format行:

/etc/goaccess/goaccess.conf
# NCSA Combined Log Format
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

否则,如果您设置了虚拟主机,请取消注释以下行:

/etc/goaccess/goaccess.conf
# NCSA Combined Log Format with Virtual Host
log-format %v:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

此时,您可以保存文件并退出编辑器。您现在已准备好运行 GoAccess 程序并分析一些 Apache 纯文本日志文件。

第 3 步 – 使用 GoAccess 访问 Apache 的日志文件

Apache 服务器授予对您网站的访问权限,并为所有传入的 HTTP 流量保留访问日志。这些记录或日志文件存储在系统中,可以成为有关您网站使用情况和受众的宝贵信息来源。

在 Ubuntu 上,Apache 日志文件/var/log/apache2默认存储在该目录中。要检查此目录的内容,请运行以下命令:

  • sudo ls /var/log/apache2
Sample output
access.log error.log other_vhosts_access.log

如果您的服务器已经运行了很长时间,您可能会.gz在此目录中发现由于日志轮换而包含过去日志文件的压缩文件。最近的日志放在一个access.log文件中。对于具有虚拟主机的 Web 服务器,您可能必须cd从目录中进入/apache2子目录以定位每个主机的日志文件。

让我们继续针对 Apache 访问日志运行 GoAccess,以深入了解 Web 服务器正在处理的流量类型。运行以下命令以access.log使用 GoAccess分析您的文件:

  • sudo goaccess /var/log/apache2/access.log

这将启动 GoAccess 命令行仪表板。

GoAccess 命令行仪表板界面

注意:如果您看到的是 Log Format Configuration 提示,则表示您在上一步中对 GoAccess 配置文件所做的更改未生效。确保您的配置文件位于正确的位置,并且您已取消注释必要的设置。

如前所述,您有时会在长时间运行的 Web 服务器上有几个压缩的日志文件。要在所有这些文件上运行 GoAccess 而不先提取它们,您可以将zcat命令的输出通过管道传输到goaccess

  • zcat /var/log/apache2/access.log.*.gz | goaccess -a

接下来,您将学习如何使用键盘快捷键快速浏览仪表板界面。

第 4 步 — 导航终端仪表板

仪表板顶部是几个关键指标的摘要。这包括报告期内的总请求数、唯一访问者、日志大小、404 未找到错误、请求的文件、已解析日志文件的大小、HTTP 引用、日志源名称、处理日志文件所用的时间等。

仪表板指标摘要

在顶部面板下方,您将找到所有可用模块,这些模块提供有关上述指标和 GoAccess 支持的其他数据点的更多详细信息。要导航界面,请使用以下键盘快捷键:

  • TAB通过可用模块SHIFT+TAB向前移动向后移动。
  • F5 以刷新仪表板。
  • g移动到仪表板屏幕的顶部并G移动到仪表板中的最后一个项目。
  • oENTER展开选定的模块。
  • jk在活动模块中上下滚动。
  • s 显示活动模块的排序选项。
  • /搜索所有模块并n移动到下一个匹配项。
  • 0-9SHIFT+0快速激活相应编号的模块。
  • ? 查看快速帮助对话框。
  • q 退出程序。

接下来让我们检查仪表板上的每个可用模块。每一个都有一个数字和一个标题,以及显示的总行数。>字符指示活动面板,这也反映在仪表板的顶部。

Active GoAccess 面板演示

以下是每个面板的简要说明。下面的每个部分都对应于程序中的面板编号和标题。

1 — 每日独立访客

此面板显示每个报告日期的点击量、唯一访问者和累积带宽。唯一访问者被认为是具有相同 IP 地址、日期和用户代理的访问者。默认情况下,它包括网络爬虫和蜘蛛。

每日唯一身份访问者面板

2 – 请求的文件(URL)

此面板提供有关 Web 服务器上请求最多的非静态文件的统计信息。它显示请求路径、HTTP 协议和方法、唯一访问者、点击次数和累积带宽。

请求的文件

3 – 静态请求

此面板提供与前一个相同的指标,但适用于静态文件,例如图像、CSS、JavaScript 或其他文件类型。

4 – 未找到 URL (404s)

此面板还显示了在 2 和 3 中讨论的相同指标,但针对在服务器上找不到的路径 (404s)。

5 – 访问者主机名和 IP

此面板提供有关连接到您的 Web 服务器的主机的详细信息。您可以找到他们的 IP 地址、访问次数和消耗的带宽量。这是识别谁占用了您所有带宽并在必要时阻止它们的好方法。

访问者主机名和 IP

如果按 展开此面板o,您将看到有关每个主机的更多信息,例如其来源国家/地区、城市和反向 DNS 查找结果。

扩展了访问者主机名和 IP

6 — 操作系统

此面板报告主机用于连接到您的 Web 服务器的不同操作系统。展开此面板将显示每个操作系统的特定版本。

操作系统

7 — 浏览器

与上一个面板类似,这会将每个唯一访问者使用的浏览器报告给您的 Web 服务器,并列出每个浏览器展开后的特定版本。

浏览器

8 — 时间分布

在这里,您将找到有关点击次数、唯一身份访问者和消耗的带宽的每小时报告。这是发现服务器上流量高峰期的好方法。

时间分配面板

9 – 虚拟主机

此面板显示从日志文件解析的虚拟主机。仅当%v包含在日志格式配置中时它才变为活动状态

10 – 引用 URL

将访问主机引用到您的 Web 服务器的 URL 反映在此处。默认情况下禁用此面板,只能通过注释掉REFERRERSGoAccess 配置文件中以下突出显示来启用

/etc/goaccess/goaccess.conf
#ignore-panel VISIT_TIMES
#ignore-panel VIRTUAL_HOSTS
#ignore-panel REFERRERS
#ignore-panel REFERRING_SITES

引用 URL 面板

11 — 推荐网站

此面板显示引用主机的 IP 地址,但不显示整个 URL。

12 — 关键词

此处报告了在 Google 搜索、Google 缓存和 Google 翻译中使用的导致您网站的关键字。默认情况下,此面板也是禁用的,必须在设置中启用:

/etc/goaccess/goaccess.conf
#ignore-panel REFERRERS
#ignore-panel REFERRING_SITES
#ignore-panel KEYPHRASES
#ignore-panel STATUS_CODES

13 – HTTP 状态代码

此面板反映 Web 服务器在响应请求时返回的 HTTP 状态代码的总体统计信息。展开面板将显示每个状态代码的汇总统计信息。

HTTP 状态代码面板

14 – 远程用户(HTTP 认证)

此面板显示在您的服务器上请求文档的人的用户 ID,由 HTTP 身份验证确定。对于不受密码保护的文档,这部分将是-. 请注意,此面板仅在%e是日志格式配置的一部分时才启用

15 — 缓存状态

此面板允许您确定请求是否被缓存并从缓存中提供服务。如果启用%C是日志格式变量的一部分,状态可能是MISSBYPASSEXPIREDSTALEUPDATINGREVALIDATED,或HIT

16 — 地理位置

此面板提供了从访问 IP 地址得出的地理位置的摘要。展开此面板将显示每个原产国的汇总统计数据。

地理位置面板

您已查看仪表板中可用的面板,现在您将生成不同格式的报告。

步骤 5 — 生成报告

除了在终端中显示数据外,GoAccess 还允许您生成 HTML、JSON 或 CSV 报告。在运行本节中的任何命令之前,请确保您位于主目录中:

  • cd ~

要将报告输出为静态 HTML,请将 HTML 文件指定为-o标志的参数此标志还接受以.json结尾的文件名.csv

  • sudo goaccess /var/log/apache2/access.log -o stats.html

一个stats.html文件应该出现在您的用户目录中。

  • ls
Output
goaccess-1.4 goaccess-1.4.tar.gz snap stats.html

您可以使用 将这个文件复制到本地机器上的用户目录scp从本地计算机运行此命令,而不是远程服务器:

  • scp user@your_server_ip:stats.html ~/stats.html

复制文件后,您可以open在 macOS 上使用以下命令在浏览器中打开它

  • open ~/stats.html

或者,如果您在本地计算机上使用 Linux 发行版:

  • xdg-open ~/stats.html

Firefox 中的 HTML 报告

您已经生成了一个 HTML 报告并在您的浏览器中查看了它。

结论

在本文中,我们介绍了 GoAccess 命令行工具并讨论了如何使用它来分析服务器日志。尽管我们只考虑了如何将 GoAccess 与 Apache 日志一起使用,但该工具还支持其他日志格式,例如 Nginx、Amazon S3、Elastic Load Balancing 和 CloudFront。

您可以查看完整的 GoAccess 文档man goaccess在终端中运行

觉得文章有用?

点个广告表达一下你的爱意吧 !😁