作者选择了 Internet Archive作为 Write for Donations计划的一部分接受捐赠。
介绍
GoAccess是一个实时监控 Web 服务器日志的工具. 它是用 C 写的,并使用流行的 ncurses库为其仪表板界面,可以直接从命令行访问。
这是很棒的,因为您可以将SSH转移到您控制的任何Web服务器,并快速和安全地查看或分析相关统计数据。除了命令行仪表板界面外,它还可以显示其他格式的统计数据,如HTML,JSON和CSV,您可以在其他环境中使用或与他人共享。
GoAccess 也可以作为客户端分析工具的一个很好的替代方案,取决于您的需求,它直接分析服务器日志,因此您不需要加载任何额外的脚本,并且您的数据完全在您的控制之下。
在本教程中,您将在Ubuntu 20.04 Web 服务器上安装和配置 GoAccess for Apache. 您将使用 GoAccess 访问 Apache 日志文件,然后在命令行界面上查看可用的模块和导航快捷键。
前提条件
对于本教程,您将需要以下内容:
- 一个 Ubuntu 20.04 服务器. 您可以通过遵循此 Ubuntu 20.04 初始服务器设置教程来设置,包括具有 sudo 特权和防火墙的非根用户。
步骤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 配置文件所做的更改没有生效。
如前所述,你有时会在一个长期运行的Web服务器上有几个压缩的日志文件. 要在所有这些文件上运行GoAccess而不先提取它们,你可以将zcat
命令的输出管道到goaccess
:
1zcat /var/log/apache2/access.log.*.gz | goaccess -a
接下来,您将学习如何通过键盘快捷键快速导航仪表板界面。
步骤 4 – 导航终端仪表板
在仪表板的顶部是几个关键指标的摘要,其中包括报告期间的总请求、独特访客、日志大小、404 未找到的错误、请求的文件、分析日志文件的大小、HTTP 引用器、日志源的名称、处理日志文件所需的时间等等。
在顶部面板下方,您将找到所有可用的模块,这些模块提供有关上述指标和 GoAccess 支持的其他数据点的更多细节。
TAB
要通过可用模块前进,SHIFT+TAB
要向后移动。- `F5' 要刷新仪表板。
g' 要移动到仪表板屏幕顶部,而
G' 要移动到仪表板上的最后一个项目。o
或 `ENTER' 要扩展所选模块。j
和k
要滚动到活跃模块内。s 要显示活跃模块的排序选项。 *_
/要搜索所有模块,并
n' 要移动到下一个匹配。 ** `0
让我们看看下面的仪表板上每一个可用的模块,每个模块都有一个数字和标题,以及总线次数的指示。
以下是每个面板的简要解释.下面的每个部分都与程序中的面板号和标题相符。
1、每日独一无二的访客
此面板显示每个报告日期的攻击,独特的访问者和累积的带宽. 一个独特的访问者被认为具有相同的 IP 地址,日期和用户代理。
请求的文件(URL)
此面板提供有关您的 Web 服务器上要求最多的非静态文件的统计数据,显示请求路径、HTTP 协议和方法、独特访客、访问次数和累积带宽。
3、静态请求
此面板提供与前面相同的指标,但对于像素,CSS,JavaScript或其他文件类型等静态文件。
4 — 未找到的URL(404s)
该面板还显示了2和3中讨论的相同指标,但对于在服务器上没有找到的路径(404s)。
5 — 访客主机名和IP
此面板提供有关连接到您的 Web 服务器的主机的详细信息. 您可以找到他们的 IP 地址,访问次数,以及所消耗的带宽量。
如果您通过按o
来扩展此面板,您将看到有关每个主机的更多信息,例如其原产地国家、城市和逆向DNS搜索结果。
6、操作系统
此面板报告了主机用于连接到您的 Web 服务器的不同操作系统. 扩展此面板将显示每个操作系统的特定版本。
7、浏览器
与之前的面板类似,这报告了每个独特访问者使用的浏览器到您的 Web 服务器,并列出了每个浏览器的特定版本。
8、时间分配
在这里,你会找到一个小时报告,用于访问次数,独特的访问者和消耗的带宽. 这是一个很好的方式来发现在您的服务器上峰值流量的时期。
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
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 身份验证)
此面板显示了通过 HTTP 身份验证来确定在您的服务器上请求文档的人的用户 ID. 对于不受密码保护的文档,此部分将是 -
. 请注意,此面板只有在 `%e' 是日志格式配置的一部分时才启用。
15 - 缓存状态
此面板允许您确定请求是否正在缓存并从缓存中提供服务。如果「%C」是日志格式变量的一部分,则启用,并且状态可能是「MISS」、「BYPASS」、「EXPIRED」、「STALE」、「UPDATING」、「REVALIDATED」或「HIT」。
第16章 地理位置
此面板提供了访问 IP 地址所产生的地理位置的概述. 扩展此面板将显示每个原产国的累计统计数据。
您已经检查了仪表板中可用的面板,现在您将以不同的格式生成报告。
步骤五:生成报告
除了在终端中显示数据外,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报告,并在您的浏览器中查看了它。
结论
在本文中,我们涵盖了 GoAccess 命令行工具,并讨论了如何使用它来分析服务器日志. 虽然我们只考虑了 GoAccess 如何与 Apache 日志一起使用,但该工具还支持其他日志格式,如 Nginx, Amazon S3, Elastic Load Balancing 和 CloudFront。
您可以查看 完整的 GoAccess 文档或在您的终端中运行man goaccess
。