goaccess 是一款开源实时 web 日志分析工具,支持解析 nginx 日志并以终端或 html 形式展示访问量、ip、url 等指标;需确保日志格式兼容,可配置自定义解析规则;支持实时监控、静态报告生成及结合 logrotate 的定时分析。

GoAccess 是一款开源的实时 Web 日志分析工具,能直接解析 Nginx 访问日志(如 /var/log/nginx/access.log),以终端界面或 HTML 报告形式展示访问量、IP、URL、状态码、浏览器、响应时间等关键指标。它不依赖数据库,轻量高效,适合快速定位性能瓶颈或异常流量。
确认 Nginx 日志格式与 GoAccess 兼容
GoAccess 默认支持 Common Log Format (CLF) 和 Combined Log Format,Nginx 默认的 log_format combined 基本匹配。但若你自定义了日志格式(比如加了 $request_time、$upstream_response_time 或 JSON),需手动配置 GoAccess 解析规则。
检查你的 Nginx 配置中日志格式定义,例如:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time';此时需在 GoAccess 配置中启用对应字段(如 --time-format="%d/%b/%Y:%H:%M:%S %z"、--date-format="%d/%b/%Y"),并用 --log-format 自定义解析模板,例如:
goaccess /var/log/nginx/access.log \ --log-format='%h %^ [%d:%t %^] "%r" %s %b "%R" "%u" %T %^' \ --date-format='%d/%b/%Y' \ --time-format='%H:%M:%S'
启动实时监控(终端模式)
GoAccess 支持“实时 tail -f”式监控,适合运维排查突发流量或慢请求。
- 确保日志文件可读,且 Nginx 正在写入(如未启用
buffered_logs) - 运行命令(以默认 combined 格式为例):
goaccess /var/log/nginx/access.log -c -o /dev/stdout --real-time-html
该命令会启动一个本地 HTTP 服务(默认端口 7890),打开 http://127.0.0.1:7890 即可看到动态刷新的 HTML 页面;按 q 可退出终端界面。
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
若要后台运行并自动重载日志(推荐用于生产环境监控):
goaccess /var/log/nginx/access.log \ --log-format=COMBINED \ --real-time-html \ --ws-url=ws://your-server-ip:7890 \ --port=7890 \ --daemon
生成静态 HTML 报告(用于归档或分享)
适合每日/每周生成性能快照,嵌入监控看板或发给团队复盘。
- 生成带交互功能的单页 HTML(含图表、筛选、搜索):
goaccess /var/log/nginx/access.log \ -o report.html \ --log-format=COMBINED \ --date-format='%d/%b/%Y' \ --time-format='%H:%M:%S' \ --ignore-crawlers \ --no-progress
关键参数说明:--ignore-crawlers 过滤爬虫请求,让数据更聚焦真实用户;--no-progress 禁用进度条,适合脚本调用;
添加 --max-items=100 可限制 Top IP/URL 条目数,提升加载速度。
结合 logrotate 与定时任务持续分析
Nginx 日志常被 logrotate 切割(如 access.log.1.gz),GoAccess 本身不自动解压或轮转处理。建议用脚本聚合:
- 将最近 7 天日志合并分析(含解压):
zcat /var/log/nginx/access.log.[0-7].gz 2>/dev/null | \ cat /var/log/nginx/access.log - | \ goaccess -o weekly.html --log-format=COMBINED --no-progress
再配合 crontab 每日凌晨执行:
0 1 * * * /usr/bin/goaccess /var/log/nginx/access.log --log-format=COMBINED -o /var/www/reports/daily.html --no-progress
注意:确保输出目录有写权限,且 Web 服务器能访问生成的 HTML 文件。










