如何在Debian7上通过Apache安装和使用GoAccessWeb日志分析器
介绍
GoAccess 允许您使用简单的命令行仪表板实时监控 Web 服务器日志,以便快速查看和分析流量指标。 它完全在一个终端中运行,统计数据被组织到一个可滚动仪表板上的单独面板中。 还可以使用 GoAccess 生成 HTML、JSON 和 CSV 网络流量报告。
本教程展示了如何从源代码安装软件,然后演示如何在命令行上使用、查看和导航该程序。
GoAccess 可以处理来自几乎任何其他 Web 服务器的日志文件。 但是,必须在 GoAccess 中定义日志文件的特定格式才能正常运行。
本指南将重点介绍使用 Apache 作为所选的 Web 服务器,无论是否配置了虚拟主机。
先决条件
请在开始本教程之前完成这些先决条件。
- 以 Debian 7 为操作系统的 VPS
- VPS 上具有 sudo 提升权限的用户帐户。
- 安装有活动或以前活动的 HTTP 流量的 Apache Web 服务器
VPS 处理的网络流量越多,GoAccess 必须处理的数据就越多——在这种情况下,越多越好。
第 1 步 — 更新系统包
首先,ssh
以具有 sudo
提升权限的用户身份进入您的服务器。 然后按照以下步骤操作。
ssh sammy@your_server_ip
此命令更新 apt-get
包管理器的数据库。
sudo apt-get update
第 2 步 — 升级系统包
安装 Debian 系统软件包的任何新更新。
sudo apt-get upgrade
当提示更新新软件包时,输入 y
进行确认。
第 3 步 — 安装 build-essential 软件包
build essential
软件包提供了几个非常重要的附属软件包,例如 make
,它们是在 Debian 和 Linux 中编译软件所需的。 这些是本指南后面的 GoAccess 安装阶段的必需品。
以下是使用 apt-get
安装软件包的方法:
sudo apt-get install build-essential
第 4 步 — 安装 GoAccess 依赖项
以下是在您的 VPS 上安装和使用 GoAccess 所需的依赖项。 使用 apt-get
包管理器获取它们。
sudo apt-get install libncursesw5-dev libglib2.0-dev libgeoip-dev libtokyocabinet-dev
第 5 步 — 设置构建目录
现在我们已经有了必要的系统包,我们可以获取并构建 GoAccess。
/usr/local/src
目录是构建 GoAccess 软件的合适位置。 通过运行以下命令为您的 current Debian 用户帐户授予此目录的所有权:
sudo chown $USER /usr/local/src
然后通过以下命令为同一用户授予目录读取、写入和执行权限:
sudo chmod u+rwx /usr/local/src
使用 cd
命令切换到此目录:
cd /usr/local/src
第 6 步 — 下载并提取 GoAccess 源代码
在撰写本文时,GoAccess 的稳定版本为 0.8.5。 要下载它,请使用下面的 wget
命令。
wget http://tar.goaccess.io/goaccess-0.8.5.tar.gz
现在可以使用 tar
命令来解压下载的 .tar.gz
文件及其内容。
tar -zxvf goaccess-0.8.5.tar.gz
- Step 7 - 编译和安装源代码
像这样切换到新解压的目录。
cd goaccess-0.8.5/
运行在此目录中找到的 configure 脚本,并使用下一个命令中显示的两个前缀:
./configure —enable-geoip —enable-utf8
使用 make
命令构建安装 GoAccess 所需的 makefile。
make
以下命令将安装 GoAccess(使用之前创建的 makefile)到系统目录,使其可以通过 Debian 执行。
sudo make install
第 8 步 — 编辑 GoAccess 配置文件
在 GoAccess 的主配置文件中有几行 commented,我们需要 uncomment 以便稍后在教程中使用程序的一些高级功能。
我们将使用 vi
文本编辑器按以下方式编辑文件:
sudo vi /usr/local/etc/goaccess.conf
此配置中的注释由 #
表示,表示服务器将忽略其后同一行的后续信息。 在此文件中,我们需要删除总共两个 #
符号以取消注释两行。
第一个是 date-format
设置,它在这里显示如下。
# Apache log date format. The following date format works with any # of the Apache's log formats below. # #date-format %d/%b/%Y
要删除注释符号 (#
),请多次按 j
将光标放到我们要编辑的行,即 date-format %d/%b/%Y
行。 一旦它到达该行并选择 #
按 x
将其删除。
如果正确完成,您的修改现在应该如下所示:
# Apache log date format. The following date format works with any # of the Apache's log formats below. # date-format %d/%b/%Y
注意:你可以按
ESC
并输入:q
,然后ENTER
退出文件而不保存你的更改,如果你认为你有任何错误或意外改动。
需要取消注释的第二行是 log-format
行之一,确切的行取决于您的 Apache 设置。 如果您只运行一个 Apache 主机,请选择第一个选项,如果您设置了 虚拟主机,请选择第二个选项。 如果您不确定,您可能应该遵循“非虚拟主机设置”部分。
警告: 仅取消注释这些行中的 一个。
对于非虚拟主机设置
对于没有虚拟主机的设置,以与以前相同的方式删除以下行的哈希 (#
) 符号。
# NCSA Combined Log Format # log-format %h %^[%d:%^] "%r" %s %b "%R" "%u" #
对于虚拟主机设置
对于带有虚拟主机的设置,以与以前相同的方式删除以下行的哈希 (#
) 符号。
# NCSA Combined Log Format with Virtual Host # log-format %^:%^ %h %^[%d:%^] "%r" %s %b "%R" "%u" #
取消注释 log-format
行中的 一个 后,按 ESC
。 然后键入 :wq
并按 ENTER
。 这将写入我们对文件所做的更改并退出 vi
文本编辑器。
我们现在可以在任何符合支持的格式标准的纯文本 Apache 日志文件上运行 GoAccess。
第 9 步 - 将您的用户添加到“adm”组
让我们将当前用户添加到 Debian 中的管理员组 (adm),这样我们就可以运行这些命令,而无需为 root 用户权限添加 sudo 前缀。
usermod
可以通过包含 -g
参数和我们希望添加到的组名 (adm) 来更改我们用户的属性,然后是相关用户(在这种情况下萨米)。 确保将下一个命令中的 sammy
替换为您自己的 Linux 用户名。
sudo usermod -g adm sammy
运行上述命令后,键入 exit
然后 ENTER
断开与您的 VPS 的连接。 然后使用您的 sudo 用户重新登录到 VPS。 这样我们之前使用 usermod
对用户所做的更改才会生效。
exit ssh sammy@your_server_ip
你现在应该有正确的权限以这个用户 运行 GoAccess 而不使用 sudo ,并且还可以访问 Apache 日志目录。
现在我们将找到日志目录。
第 10 步 — 找到日志文件
Web 服务器通常将所有传入和处理的 HTTP 请求记录到日志文件中。
我们需要找到 Apache 存储其日志的位置,以便我们可以使用它们。 默认情况下,在 Debian 系统上,Apache 日志文件存储在:
/var/log/apache2
要查看此目录的内容,您可以使用 list 命令,如下所示:
ls /var/log/apache2
在这里你会找到前面描述的日志文件,如果你的服务器已经运行了足够长的时间,其中一些会被压缩成 .gz
文件。 当前正在写入并由 Web 服务器处理的最新文件是未压缩的文件,名为 access.log
。
对于配置了虚拟主机的设置,您可能必须将 cd
放入 /apache2
内的子目录中,以找到每个单独主机的日志文件。
如果您在此处找到日志文件,则继续下一步(Step 11)。
进一步搜索
如果您在查找日志文件时遇到问题,您只需阅读此详细信息。
这些访问日志的位置由 Apache 配置中的 CustomLog
指令控制。 如果您更改了此设置,您可能会在不同的目录中找到您的 Apache 访问日志。
要查找 CustomLog
指令及其设置,您可以在其中一个 Apache 配置文件中使用 grep
,如下一个命令所示。
这将输出在 apache2.conf
文件中添加的任何自定义目录。
grep CustomLog /etc/apache2/apache2.conf
或者,您可以运行此命令,如果您的服务器上有很多文件,这可能需要一段时间:
sudo find / -name access.log
这将显示系统上名为 access.log
的所有文件。
- Step 11 - 运行 GoAccess
找到包含 Apache 服务器日志文件的目录后,您可以使用下一个命令在它们上运行 GoAccess。 在此命令中,确保将 /var/log/apache2/access.log
替换为您自己的日志文件目录路径,如果它与标准 Apache 不同。
goaccess -f /var/log/apache2/access.log -a
运行此命令后,您将看到 GoAccess 仪表板。
-f
参数告诉程序使用提供的目录路径,-a
参数启用每个解析的主机 agent 的所有记录统计信息。
可选:提取归档日志
如果您想在较旧的日志(压缩的 .gz
类型的文件)上运行 GoAccess,则必须将它们解压缩并解压缩。 程序将 not 使用上面显示的命令在这些压缩文件上运行。
如果需要,您可以使用 Debian 中的 gunzip
程序进行此提取。
例如:
sudo gunzip /var/log/apache2/access.log.10.gz
此处命令末尾的 access.log.10.gz
文件名需要与您要提取的压缩文件名匹配。
第 12 步 — 导航 GoAccess
这是 GoAccess 仪表板。
以下是与仪表板交互的方法:
- 按
F1
或h
将打开一个小帮助窗口,列出本节中的按键及其功能,并提供一些其他有用的信息。 0-9
或SHIFT + 0-9
选择相应编号的模块并将其设置为激活。 可以在每个部分的仪表板上看到相应的数字。o
或ENTER
用于扩展仪表板上当前选择的模块。 模块将在下一节中解释。j
将在扩展的活动模块中向下滚动,k
将在扩展的活动模块中向上滚动。s
显示可用于活动模块的排序选项。- 最后,按
q
将退出程序或当前窗口,或折叠活动模块,具体取决于您当前在仪表板中的深度级别。
更多交互可以通过以下按键实现:
- 按键盘上的
TAB
键将按顺序向前移动模块。 - 同时按下
SHIFT
+TAB
将执行与上一个操作相反的操作,并向后迭代模块。 F5
可以按刷新和重绘仪表板。c
按下时设置和更改仪表板上当前使用的配色方案。g
将焦点移至第一项并返回仪表板屏幕的顶部。G
滚动到仪表板屏幕的最后一项或底部。
第 13 步 — 了解模块
现在您可以在界面中移动,让我们看一下每个模块实际包含的内容。 此处的部分对应于程序中编号的模块和标题。 显示的所有 “Hit” 值均基于在提供的一个或多个日志文件中分别找到的请求总数(除非另有说明)。
仪表板 - 总体分析的请求
仪表板显示以下数量:有效请求、无效请求、分析所提供数据所花费的时间、服务器的唯一访问者、唯一请求的文件、唯一静态文件(通常是图像文件类型)、唯一 HTTP 引用 (URL)、唯一 404未找到错误、已解析日志文件的大小以及最后消耗的任何带宽。
1 — 独立访客
该模块按天列出,包括日期。 具有相同IP、相同日期、相同agent的HTTP请求被认为是唯一的访问。 这包括网络爬虫/蜘蛛。
2 — 请求的文件
Requested Files 显示您的 Web 服务器上请求最多的文件,并将所述 hits 显示为数字和百分比,以及为主机提供服务的时间(带宽)、使用的协议以及什么使用了请求类型。
3 - 请求的静态文件
仅包括最常请求的静态文件,例如:jpg
、css
、swf
、js
、gif
和 [ X125X] 文件类型,具有与为每次出现提供的最后一个模块相同的度量标准。
4 — HTTP 404 URL
与具有相同统计数据的先前模块一样,该模块列出了经常出现的 HTTP 404:未找到错误请求以及正在请求的 URL。
5 — 主机
Hosts 包含有关连接到您的 Web 服务器的主机本身的更详细信息,例如连接数、它们的 全局 IP 地址以及一些相同的重复指标类型。
如果启用了之前的 -a
参数,此处的扩展模块可以显示更多信息,例如主机的反向 DNS 查找结果和原产国。 通过选择所需的 IP 地址,然后按 ENTER
可以显示用户 agents 的列表。
6 — 操作系统
此处显示了主机的操作系统,并对操作系统的使用情况进行了排名。 与大多数其他模块数据不同,这是基于唯一访问。
7 — 浏览器
浏览器模块遵循与上一个模块相同的概念,除了在这种情况下,用于连接会话的主机浏览器类型被排名。 同样,这是基于唯一身份访问者,而不是总体请求总数。
8 — 引荐来源网址
如果有问题的主机通过其他资源访问该站点,或者从其他主机链接/转移给您,则在此模块中将提供他们被引用的 URL。
9 — 推荐网站
该模块与上一个模块几乎相同(Referrer URLs); 唯一的区别是显示的是一般站点地址,而不是推荐的确切来源。
10 — 关键词
报告在 Google 搜索、Google 缓存和 Google 翻译中使用的导致您的 Web 服务器处理主机的关键字。 目前只支持谷歌,不支持其他搜索引擎。
11 — 地理位置
此模块包含从访问主机 IP 地址确定的地理位置摘要。 如果无法确定,则标记为location unknown
。
12 — HTTP 状态码
HTTP 状态代码包含有关 HTTP 请求中整体状态代码值的统计信息,以数量和百分比形式给出。
(可选)进一步使用 GoAccess
使用 cd
和 ~
移动到用户的主目录以继续执行这些额外的命令。 辅助 pwd
命令打印您当前的工作目录,因此您可以确认您已正确切换到它。
cd ~ pwd
HTML 报告
可以通过 将 GoAccess 的标准输出重定向 (>
) 到您选择的任何名称的 HTML 文件来生成 HTML 报告。
在此示例中,该文件名为 report.html
并包含所选日志文件中可用的所有 (-a
) 统计信息。
goaccess -f /var/log/apache2/access.log -a > report.html
新生成的 html
文件是在我们用户的 home 目录中创建的。
JSON 报告
您可以通过将 -o
和 json
参数添加到命令来创建 JSON 类型的报告。 这里的输出文件具有 .json
扩展名。
goaccess -f /var/log/apache2/access.log -a -o json > report.json
CSV 报告
要生成 CSV 文件,请按照与之前相同的方法进行操作; 只需将 csv
参数附加到命令,并将文件扩展名更改为 .csv
goaccess -f /var/log/apache2/access.log -a -o csv > report.csv
运行压缩文件
要让压缩文件通过 GoAccess 运行,您可以将 zcat
命令的输出通过管道传输到 goaccess
命令。 下一个命令显示 all 压缩的 .gz
文件正在读入,而无需先手动提取它们。
zcat /var/log/apache2/access.log.*.gz | goaccess -a
按开始日期过滤
要从指定的开始日期开始过滤,您可以使用下一个命令的结构。 这将确保解析从 2015 年 1 月 20 日到日志文件内容结束的 HTTP 请求。
sed '/20\/Jan\/2015/,$ p' /var/log/apache2/access.log | goaccess -a
请注意,这仅在您输入的日期实际包含在传递的日志文件中时才有效。
按天过滤
您可以选择特定日期,并过滤以显示当天的流量。 这次我们将使用 grep
来实现。
grep '20/Jan/2015' /var/log/apache2/access.log | goaccess -a
排除主机
使用此命令排除特定 IP 地址,将 111.111.111.111
替换为所需的 IP 地址。
goaccess —exclude-ip=111.111.111.111 -f /var/log/apache2/access.log -a
远程使用
如果 GoAccess 安装在远程机器上,例如您的本地工作站,而不是 VPS,则可以通过 SSH 连接到您的 VPS,然后通过 piping 远程读取 Apache 日志文件。
ssh sammy@your_server_ip 'cat /var/log/apache2/access.log' | goaccess -a
结论
完成本指南后,您应该知道如何安装 GoAccess,利用其核心功能,并能够使用其他一些使 GoAccess 更灵活的功能。
以下是对所涵盖内容的完整回顾:
- 获取和更新必要的 Debian 系统软件包。
- 使用其源代码安装和构建 GoAccess。
- 使用 Apache Web 服务器日志文件运行 GoAccess。
- 在命令行上通过 GoAccess 进行交互和导航。
- 了解 GoAccess 仪表板中的模块。
- 使用 重定向 从 Apache Web 服务器日志创建不同的报告类型。
- Piping 其他命令输出到 GoAccess。