Linux系统之GoAccess实时Web日志分析工具的基本使用
- 一、GoAccess介绍
- 1.1 GoAccess简介
- 1.2 GoAccess功能
- 1.3 Web日志格式
- 二、本地环境介绍
- 2.1 本地环境规划
- 2.2 本次实践介绍
- 三、检查本地环境
- 3.1 检查本地操作系统版本
- 3.2 检查系统内核版本
- 3.3 检查系统镜像源
- 3.4 更新软件列表
- 3.5 查询软件
- 四、安装GoAccess
- 4.1 编译安装
- 4.2 从发行版本安装
- 4.3 查看安装版本
- 五、监控日志信息
- 5.1 检查本地web服务器
- 5.2 监视Apache日志
- 5.3 测试访问web服务
- 六、通过web仪表板查看日志
- 6.1 本机操作
- 6.2 浏览器打开日志文件
- 6.3 配置虚拟主机访问
- 七、设置中文
- 7.1 系统安装中文包
- 7.2 设置简体中文
- 7.3 测试访问
- 八、总结
一、GoAccess介绍
1.1 GoAccess简介
GoAccess 是一个开源实时 Web 日志分析器和交互式查看器,可在Linux系统上的 终端中或通过浏览器运行。它为需要动态可视化服务器报告的系统管理员提供快速且有价值的 HTTP 统计信息。
1.2 GoAccess功能
GoAccess解析指定的Web日志文件并将数据输出到X终端。特点包括:
-
完全实时
:所有面板和指标都定时在终端输出上每 200 毫秒更新一次,在 HTML 输出上每秒更新一次。 -
所需的最少配置
:您只需针对访问日志文件运行它,选择日志格式,然后让 GoAccess 解析访问日志并向您显示统计信息。 -
跟踪应用程序响应时间
:跟踪处理请求所花费的时间。如果您想跟踪减慢网站速度的页面,则非常有用。 -
几乎所有 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。
1.3 Web日志格式
GoAccess 允许任何自定义日志格式字符串。预定义的选项包括 但 不限于:
- Amazon CloudFront(下载分配)。
- Amazon Simple Storage Service (S3)
- AWS 弹性负载均衡
- 组合日志格式 (XLF/ELF) Apache |Nginx的
- 通用日志格式 (CLF) Apache
- 谷歌云存储。
- Apache 虚拟主机
- Squid原生格式。
- W3C 格式 (IIS)。
- Caddy 的 JSON 结构化格式。
- Traefik 的 CLF风格
二、本地环境介绍
2.1 本地环境规划
本次实践为个人测试环境,操作系统版本为centos7.6。
hostname | 本地P地址 | 操作系统版本 | 内核版本 | node版本 |
---|---|---|---|---|
ubuntu-001192.168.3.251 | Ubuntu 22.04.1 LTS | 5.15.0-89-generic | v20.10.0 | —— |
2.2 本次实践介绍
1.本次实践部署环境为个人测试环境,生产环境请谨慎;
2.在Ubuntu环境下部署GoAccess工具及其基本使用。
三、检查本地环境
3.1 检查本地操作系统版本
检查本地操作系统版本,当前版本为Ubuntu 22.04.1 LTS。
root@jeven:~# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.1 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
3.2 检查系统内核版本
检查系统内核版本,当前内核版本为5.15.0-89-generic。
root@jeven:~# uname -r
5.15.0-89-generic
3.3 检查系统镜像源
对于Ubuntu 22.04.1 LTS版本,将镜像源配置文件/etc/apt/sources.list修改内容如下。
root@ubuntu-001:~# cat /etc/apt/sources.list
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse# deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
3.4 更新软件列表
执行以下命令,更新软件列包表。
root@ubuntu-001:~# apt update
Hit:1 https://mirrors.aliyun.com/ubuntu jammy InRelease
Hit:2 https://mirrors.aliyun.com/ubuntu jammy-security InRelease
Hit:3 https://mirrors.aliyun.com/ubuntu jammy-updates InRelease
Hit:4 https://mirrors.aliyun.com/ubuntu jammy-backports InRelease
Hit:5 https://mirrors.aliyun.com/docker-ce/linux/ubuntu jammy InRelease
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
116 packages can be upgraded. Run 'apt list --upgradable' to see them.
3.5 查询软件
查询软件源中是否有 goaccess软件包,我们可以已经成功查找到goaccess软件包。
root@ubuntu-001:~# apt search goaccess
Sorting... Done
Full Text Search... Done
goaccess/jammy 1:1.5.5-1 amd64log analyzer and interactive viewer for the Apache Webserver
四、安装GoAccess
4.1 编译安装
可以在Linux的个版本上,执行以下编译安装命令。
$ wget https://tar.goaccess.io/goaccess-1.9.2.tar.gz
$ tar -xzvf goaccess-1.9.2.tar.gz
$ cd goaccess-1.9.2/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
4.2 从发行版本安装
本次是在Ubuntu上实践,我们可以使用以下命令安装。
sudo apt install -y goaccess
其他发行版上安装,可以参考以下安装命令。
- 在 RHEL / CentOS上安装
sudo yum install -y goaccess
- 在Fedora上安装
sudo dnf install goaccess -y
- 在Arch Linux上安装
sudo pacman -S goaccess
4.3 查看安装版本
使用
--help
,可以查看goaccess详细帮助信息。
goaccess --help
检查安装goaccess版本,当前安装版本为
1.5.5
。
root@ubuntu-001:~# goaccess --version
GoAccess - 1.5.5.
For more details visit: https://goaccess.io/
Copyright (C) 2009-2022 by Gerardo OrellanaBuild configure arguments:--enable-utf8--enable-geoip=mmdb--with-openssl
五、监控日志信息
5.1 检查本地web服务器
本地服务器我们安装Apache,并启动apache2服务。
apt install apache2 -y
启动apache2服务,并设置开机自启。
root@ubuntu-001:~# systemctl enable --now apache2
Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable apache2
查看apache2服务状态
root@ubuntu-001:~# systemctl status apache2
● apache2.service - The Apache HTTP ServerLoaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)Active: active (running) since Mon 2024-04-29 11:42:23 UTC; 1min 53s agoDocs: https://httpd.apache.org/docs/2.4/Main PID: 68532 (apache2)Tasks: 55 (limit: 9347)Memory: 5.1MCPU: 26msCGroup: /system.slice/apache2.service├─68532 /usr/sbin/apache2 -k start├─68533 /usr/sbin/apache2 -k start└─68534 /usr/sbin/apache2 -k startApr 29 11:42:23 ubuntu-001 systemd[1]: Starting The Apache HTTP Server...
Apr 29 11:42:23 ubuntu-001 apachectl[68531]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, us>
Apr 29 11:42:23 ubuntu-001 systemd[1]: Started The Apache HTTP Server.
lines 1-16/16 (END)
5.2 监视Apache日志
执行以下命令,监控Apache日志,其中
-f 选项
允许在命令行上实时查看日志,
goaccess -f /var/log/apache2/access.log --log-format=COMBINED
5.3 测试访问web服务
我们在本地浏览器上访问:
http://192.168.3.251/
,可以看到成功访问到apache的初始页面。
我们再次回到本机上,看到终端上已经成功显示日志信息。Web 服务器的日志统计将打印在终端上。
六、通过web仪表板查看日志
6.1 本机操作
我们还可以通过重定向来将 web 服务器日志以优雅而直观的方式呈现在一个仪表板上。我们可以将输出文件指定为linux_web.html。
goaccess -f /var/log/apache2/access.log --log-format=COMBINED > linux_web.html
在终端查看生成的linux_web.html文件
root@ubuntu-001:~# ls -l linux_web.html
-rw-r--r-- 1 root root 344922 Apr 29 14:07 linux_web.html
6.2 浏览器打开日志文件
将生成的linux_web.html文件导出到本地,使用本地浏览器打开。
6.3 配置虚拟主机访问
新增监听8050端口
vim /etc/apache2/ports.conf
Listen 90
编辑Apache2的默认配置文件。运行以下命令打开000-default.conf文件进行编辑。
vim /etc/apache2/sites-available/myweb.conf
在 标签中添加以下代码块来配置端口 8050 和网站目录
Alias / /var/www/html/web/linux_web.html
<VirtualHost *:8050>ServerAdmin webmaster@localhostDocumentRoot /var/www/html/web<Directory /var/www/html/web>Options Indexes FollowSymLinksAllowOverride AllRequire all granted</Directory>ErrorLog ${APACHE_LOG_DIR}/error.logCustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
生成日志分析网页文件
mkdir -p /var/www/html/web
goaccess -f /var/log/apache2/access.log --log-format=COMBINED > /var/www/html/web/linux_web.html
重启apache2服务
a2ensite myweb.conf
systemctl restart apache2
浏览器输入:
http://192.168.3.251:8050/
,将IP替换为自己服务器IP地址。
七、设置中文
7.1 系统安装中文包
系统安装中文包
apt install language-pack-zh-hans -y
7.2 设置简体中文
执行以下命令,设置系统简体中文。
localectl set-locale LANG=zh_CN.utf8
可以看到Ubuntu系统的默认语言和字符集设置为简体中文(zh_CN)
root@ubuntu-001:~# localectl statusSystem Locale: LANG=zh_CN.utf8VC Keymap: n/aX11 Layout: usX11 Model: pc105
7.3 测试访问
重新生成日志分析文件
LANG="zh_CN.UTF-8" goaccess -f /var/log/apache2/access.log --log-format=COMBINED > /var/www/html/web/linux_web.html
systemctl restart apache2
- 终端命令行显示
LANG="zh_CN.UTF-8" goaccess -f /var/log/apache2/access.log --log-format=COMBINED
- 重新浏览器访问,可以看到已经成功切换到中文。
八、总结
GoAccess 是一款功能强大且易于使用的 Web 日志分析工具。它能够帮助系统管理员快速了解服务器的访问情况,提供有价值的统计信息和报告。无论是在终端中还是通过浏览器运行,GoAccess 都能够带来良好的使用体验,并帮助用户更好地监控和管理 Web 服务器。