GoAccess 是一款开源的实时 Web 日志分析器和交互式查看器,专为 *nix 系统设计,支持在终端或浏览器中运行,能够快速解析和分析 Web 服务器日志,提供可视化的统计报告。

以下从核心特性、安装配置、使用方法、高级功能四个方面进行详解:
一、核心特性
-
实时分析
- 终端输出每 200 毫秒更新一次,HTML 输出每秒更新一次,无需等待日志完全生成即可查看动态数据。
- 支持增量日志处理,通过磁盘 B+Tree 数据库持久化数据,适合长期监控。
-
多格式支持
- 预定义日志格式:Apache、Nginx、Amazon S3、CloudFront、ELB 等。
- 自定义日志格式:通过配置文件或命令行参数灵活定义字段(如
%h
表示客户端 IP,%r
表示请求行)。
-
交互式界面
- 终端模式下支持快捷键操作(如
F1
查看帮助,/
搜索,s
排序)。 - 浏览器模式下生成动态 HTML 报告,支持图表展示(如折线图、饼图)。
- 终端模式下支持快捷键操作(如
-
低依赖与高性能
- 仅依赖
ncurses
库,用 C 语言编写,内存占用低,适合处理大型日志文件。 - 支持磁盘 B+Tree 存储,突破内存限制,可分析数十 GB 级别的日志。
- 仅依赖
二、安装与配置
1. 安装方式
-
源码编译(推荐):
bashwget https://tar.goaccess.io/goaccess-1.9.1.tar.gz tar -xzvf goaccess-1.9.1.tar.gz cd goaccess-1.9.1 ./configure --enable-utf8 --enable-geoip=legacy make && make install
- 依赖项:
ncurses-devel
、GeoIP-devel
(用于地理位置解析)。
- 依赖项:
-
包管理器安装(Ubuntu/Debian):
bashsudo apt-get install goaccess
-
Docker 运行:
bashdocker run --rm -v /var/log/nginx:/var/log/nginx allinurl/goaccess -f /var/log/nginx/access.log -o html --real-time-html
2. 配置文件
-
默认路径:
/usr/local/etc/goaccess.conf
或/etc/goaccess.conf
。 -
关键配置项:
initime-format %H:%M:%S # 日志时间格式 date-format %d/%b/%Y # 日志日期格式 log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u" # Nginx 组合日志格式
- 使用
goaccess -f access.log --log-format=COMBINED --date-format=%d/%b/%Y --time-format=%H:%M:%S
测试配置。
- 使用
三、基础使用方法
1. 终端模式
bash
goaccess -f /var/log/nginx/access.log -p /etc/goaccess.conf
- 快捷键 :
F1
:帮助菜单。1-15
:跳转到对应模块(如1
为通用统计,4
为请求文件)。o
:展开当前模块详情。s
:排序当前模块。/
:全局搜索。
2. HTML 输出
bash
goaccess -f /var/log/nginx/access.log -o report.html --real-time-html
-
浏览器访问
http://localhost:7890
(默认端口)查看实时报告。 -
定时生成报告 (通过
crontab
):bash0 * * * * /usr/local/bin/goaccess -f /var/log/nginx/access.log -o /var/www/html/report.html
3. 常用参数
参数 | 作用 |
---|---|
-a |
启用用户代理统计 |
-d |
解析 HTTP 请求的 Referer 和 UserAgent |
-e |
排除指定 IP |
--geoip-database |
指定 GeoIP 数据库路径(用于地理位置解析) |
--with-mouse |
终端模式下支持鼠标点击 |
四、高级功能
1. 地理位置解析
-
下载 GeoIP 数据库:
bashwget -N http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz gunzip GeoLiteCity.dat.gz
-
配置参数:
bashgoaccess -f access.log --geoip-database=GeoLiteCity.dat
2. 多日志合并分析
bash
cat /var/log/nginx/access.log* | goaccess -f - -o report.html
3. 自定义报告输出
-
JSON 格式 :
bashgoaccess -f access.log -o json > report.json
-
CSV 格式 :
bashgoaccess -f access.log -o csv > report.csv
4. 虚拟主机分析
-
在日志格式中启用
%v
参数(如 Nginx 的server_name
):inilog-format %v %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
-
终端中通过
15
键查看虚拟主机资源占用情况。
五、常见问题
-
中文乱码
- 终端模式:设置
LANG="zh_CN.UTF-8"
环境变量。 - HTML 模式:在配置文件中添加
html-report-title "访问报告"
并指定中文字体。
- 终端模式:设置
-
日志格式不匹配
- 使用
goaccess -f access.log --log-format=AUTO
自动检测格式,或参考 官方文档 手动定义。
- 使用
-
性能优化
-
处理大型日志时,使用
--num-tests=1000
减少正则匹配次数。 -
启用磁盘存储(B+Tree)替代内存哈希表:
bash./configure --enable-tcb=btree
-
六、适用场景
- 实时监控:通过终端或浏览器快速定位流量峰值、异常请求。
- 安全分析 :结合
--exclude-ip
和404
面板检测恶意扫描。 - 性能调优 :通过
请求时间
面板识别慢请求,优化后端服务。 - 报告生成:定期生成 HTML/CSV 报告供团队共享。
GoAccess 以其轻量级、实时性和灵活性,成为 Web 日志分析的利器,尤其适合 DevOps 和系统管理员快速排查问题。
七、实践
docker pull dockerhub.anzu.vip/allinurl/goaccess
cat access-2025-08-19.log | docker run --rm -i -v ./nginx/logs/report.html:/report.html -e LANG=$LANG dockerhub.anzu.vip/allinurl/goaccess:latest -a -o report.html --log-format COMBINED -