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

作者选择了 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 工具及其依赖。

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

1sudo apt update
2sudo apt full-upgrade

现在是安装 GoAccess 的时机了 该工具的版本在Ubuntu repos中可用,但这通常不是最新的稳定版本. 例如,在写作时的最新版本 GoAccess 是 1.4,而从Ubuntu 20.04 repos 可用的版本是 1.3.

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

方法一:从源头编译

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

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

您可以安装以下依赖:

  • build-essential: 安装许多包,其中包括 C、C+ 和其他编程语言的 gcc 编译器,并用于构建 GoAccess 制作文件的 make
  • libncursesw5-dev: 安装 GoAccess 用于命令行接口的 ncurses 库。
  • libgeoip-dev: 包含 GeoIP 库所需的文件。

接下来,从其官方网站(https://goaccess.io/download)下载 GoAccess 的最新版本,使用以下命令:

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

一旦下载完成,将档案提取到:

1tar -xzvf goaccess-1.4.tar.gz

更改到新不包装的目录,如下:

1cd goaccess-1.4/

运行此目录中发现的配置脚本:

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

--enable-utf8 旗帜确保 GoAccess 编译具有广泛的字符支持,而 --enable-geoip 允许与原始 GeoIP 数据库的 GeoLocation 支持。

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

 1[secondary_label Output]
 2. . .
 3Your build configuration:
 4
 5  Prefix         : /usr/local
 6  Package        : goaccess
 7  Version        : 1.4
 8  Compiler flags :  -pthread
 9  Linker flags   : -lnsl -lncursesw -lGeoIP -lpthread
10  UTF-8 support  : yes
11  Dynamic buffer : no
12  Geolocation    : GeoIP Legacy
13  Storage method : In-Memory with On-Disk Persitance Storage
14  TLS/SSL        : no
15  Bugs           : [email protected]

运行制造命令来构建安装 GoAccess 所需的制作文件:

1make

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

1sudo make install

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

1goaccess --version

您将获得以下输出:

1[secondary_label Output]
2GoAccess - 1.4.
3For more details visit: http://goaccess.io
4Copyright (C) 2009-2020 by Gerardo Orellana
5
6Build configure arguments:
7  --enable-utf8
8  --enable-geoip=legacy

方法 2 – 使用官方 GoAccess 休息

另一种安装 GoAccess 的方法是使用该程序的官方 Ubuntu 存储库. 如果您希望它在系统升级期间自动更新到更新的版本,则此方法更适合,而无需在每个新版本中从源编译。

1echo "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 密钥来验证签名:

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

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

1sudo apt update

最后,安装GoAccess:

1sudo apt install goaccess

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

步骤 2 – 编辑 GoAccess 配置

GoAccess 附有配置文件,您可以对程序的行为进行永久性更改,您将编辑此文件以指定时间、日期和日志格式,以便 GoAccess 知道如何分析服务器日志。

配置文件可能位于 ~/.goaccessrc%sysconfdir%/goaccess.conf 位置,其中 %sysconfdir%/etc/, /usr/etc//usr/local/etc/`。

1goaccess --dcf
1[secondary_label Sample output]
2/etc/goaccess/goaccess.conf

使用nano编辑此配置文件:

1sudo nano /etc/goaccess/goaccess.conf

<$>[注] 注: 如果这个文件在服务器上不存在,请确保先创建它,并在 GitHub上填充goaccess.conf文件的内容。

文件中的许多行都被评论出来. 要启用一个选项,请在其前面删除第一个# 字符. 让我们先启用 Apache 的时间格式设置. 此设置指定了日志格式时间,并允许 GoAccess 扫描符合支持的格式化标准的任何简单文本的 Apache 日志文件。

1[label /etc/goaccess/goaccess.conf]
2# The following time format works with any of the
3# Apache/NGINX's log formats below.
4#
5time-format %H:%M:%S

接下来,您将拒绝对指定日期格式日期的Apache日期格式设置的评论:

1[label /etc/goaccess/goaccess.conf]
2# The following date format works with any of the
3# Apache/NGINX's log formats below.
4#
5date-format %d/%b/%Y

最后,不要评论日志格式设置. 几个行更改了这个设置,而不评论的确切设置取决于您的Web服务器的设置方式。

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

否则,如果您已经设置了虚拟主机,请代替以下行:

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

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

步骤 3 — 使用 GoAccess 访问 Apache 日志文件

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

在 Ubuntu 上,Apache 日志文件默认地存储在 /var/log/apache2 目录中。

1sudo ls /var/log/apache2
1[secondary_label Sample output]
2access.log error.log other_vhosts_access.log

如果您的服务器已经运行很长一段时间,您可能会在该目录中找到包含过去日志文件的压缩 .gz 文件,因为日志旋转。 最新的日志被放置在一个 access.log 文件中. 对于具有虚拟主机的 Web 服务器,您可能需要从 /apache2 目录内部的子目录中 cd 来找到每个主机的日志文件。

让我们继续运行 GoAccess 与 Apache 访问日志进行对比,以了解 Web 服务器正在处理的流量类型。

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

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

GoAccess command-line dashboard interface

<$>[注] ** 注意:** 如果您看到一个日志格式配置提示,这意味着您在上一步对 GoAccess 配置文件所做的更改没有生效。

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

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

接下来,您将学习如何通过键盘快捷键快速导航仪表板界面。

步骤 4 – 导航终端仪表板

在仪表板的顶部是几个关键指标的摘要,其中包括报告期间的总请求、独特访客、日志大小、404 未找到的错误、请求的文件、分析日志文件的大小、HTTP 引用器、日志源的名称、处理日志文件所需的时间等等。

Summary of dashboard metrics

在顶部面板下方,您将找到所有可用的模块,这些模块提供有关上述指标和 GoAccess 支持的其他数据点的更多细节。

  • TAB 要通过可用模块前进, SHIFT+TAB 要向后移动。
  • `F5' 要刷新仪表板。
  • g' 要移动到仪表板屏幕顶部,而 G' 要移动到仪表板上的最后一个项目。
  • o 或 `ENTER' 要扩展所选模块。
  • jk 要滚动到活跃模块内。
  • s 要显示活跃模块的排序选项。 *_ /要搜索所有模块,并n' 要移动到下一个匹配。 ** `0

让我们看看下面的仪表板上每一个可用的模块,每个模块都有一个数字和标题,以及总线次数的指示。

Active GoAccess panel demonstration

以下是每个面板的简要解释.下面的每个部分都与程序中的面板号和标题相符。

1、每日独一无二的访客

此面板显示每个报告日期的攻击,独特的访问者和累积的带宽. 一个独特的访问者被认为具有相同的 IP 地址,日期和用户代理。

Unique visitors per day panel

请求的文件(URL)

此面板提供有关您的 Web 服务器上要求最多的非静态文件的统计数据,显示请求路径、HTTP 协议和方法、独特访客、访问次数和累积带宽。

Requested files

3、静态请求

此面板提供与前面相同的指标,但对于像素,CSS,JavaScript或其他文件类型等静态文件。

4 — 未找到的URL(404s)

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

5 — 访客主机名和IP

此面板提供有关连接到您的 Web 服务器的主机的详细信息. 您可以找到他们的 IP 地址,访问次数,以及所消耗的带宽量。

Visitor hostnames and IPs

如果您通过按o来扩展此面板,您将看到有关每个主机的更多信息,例如其原产地国家、城市和逆向DNS搜索结果。

Vistor hostnames and IPs expanded

6、操作系统

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

Operating systems

7、浏览器

与之前的面板类似,这报告了每个独特访问者使用的浏览器到您的 Web 服务器,并列出了每个浏览器的特定版本。

Browsers

8、时间分配

在这里,你会找到一个小时报告,用于访问次数,独特的访问者和消耗的带宽. 这是一个很好的方式来发现在您的服务器上峰值流量的时期。

Time distribution panel

9、虚拟客人

此面板显示了从日志文件中解析的虚拟主机,只有在%v被包含在日志格式配置中时才会被激活。

10、引用URL

将访问主机引导到您的 Web 服务器的 URL 反映在这里. 此面板默认禁用,只能通过评论 GoAccess 配置文件中如下所示的REFERRERS行启用:

1[label /etc/goaccess/goaccess.conf]
2#ignore-panel VISIT_TIMES
3#ignore-panel VIRTUAL_HOSTS
4#ignore-panel REFERRERS
5#ignore-panel REFERRING_SITES

Referrer URLs panel

11 - 引用网站

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

12、关键词

在这里,谷歌搜索、谷歌缓存和谷歌翻译中使用的引导到您的网站的关键字被报告。

1[label /etc/goaccess/goaccess.conf]
2#ignore-panel REFERRERS
3#ignore-panel REFERRING_SITES
4#ignore-panel KEYPHRASES
5#ignore-panel STATUS_CODES

13、HTTP状态代码

此面板反映了您的 Web 服务器在响应请求时返回的 HTTP 状态代码的总体统计数据。

HTTP status codes panel

远程用户(HTTP 身份验证)

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

15 - 缓存状态

此面板允许您确定请求是否正在缓存并从缓存中提供服务。如果「%C」是日志格式变量的一部分,则启用,并且状态可能是「MISS」、「BYPASS」、「EXPIRED」、「STALE」、「UPDATING」、「REVALIDATED」或「HIT」。

第16章 地理位置

此面板提供了访问 IP 地址所产生的地理位置的概述. 扩展此面板将显示每个原产国的累计统计数据。

Geo location panel

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

步骤五:生成报告

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

1cd ~

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

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

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

1ls
1[secondary_label Output]
2goaccess-1.4 goaccess-1.4.tar.gz snap stats.html

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

1[environment local]
2scp user@your_server_ip:stats.html ~/stats.html

一旦文件被复制,您可以在 macOS 上使用打开命令在浏览器中打开它:

1[environment local]
2open ~/stats.html

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

1[environment local]
2xdg-open ~/stats.html

HTML report in Firefox

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

结论

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

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

Published At
Categories with 技术
comments powered by Disqus