goaccess 是最直接、轻量又实时的 nginx 日志分析工具,无需数据库或 java 环境,一条命令即可生成可交互的 html 报表或终端仪表盘;它开箱即用支持 combined 格式,自定义日志需手动指定 --log-format,推荐配合 --real-time-html 与 -f 实现秒级刷新,并通过 systemd 托管保障长期运行。

用 GoAccess 是最直接、轻量又实时的方式,不需要数据库或 Java 环境,一条命令就能把 access.log 变成可交互的 HTML 报表或终端仪表盘。
确认 Nginx 日志格式是否匹配 GoAccess 默认规则
GoAccess 开箱即用支持 Nginx 的 combined 格式。检查你的 nginx.conf 中是否启用该格式:
log_format combined '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';access_log /var/log/nginx/access.log combined;
如果自定义了字段(比如加了 $request_time 或 JSON 结构),就得手动指定 --log-format,否则解析会出错或丢数据。
安装并启动实时分析模式
以 Ubuntu/Debian 为例,推荐从官网源安装最新版(避免旧版本不兼容 HTTP/2 或新字段):
- 安装:
sudo apt install goaccess(或编译安装 v1.9+) - 终端实时查看:
goaccess /var/log/nginx/access.log -c→ 按提示选 1. Nginx - 生成带 WebSocket 的实时 HTML 报表:
goaccess /var/log/nginx/access.log -f --log-format=COMBINED --real-time-html --ws-url=ws://localhost:7890 --output=/var/www/html/report.html --port=7890
其中 -f 表示持续监听日志末尾(类似 tail -f),--real-time-html 启用浏览器端秒级刷新,--port=7890 是内置 WebSocket 服务端口。
应对日志轮转与长期运行
Nginx 常按天切分日志(如 access.log.1、access.log.2.gz),默认 -f 不会自动切换。稳妥做法有两种:
- 在
logrotate配置中加copytruncate,保证原文件句柄仍有效 - 改用管道方式:启动一个
tail -F /var/log/nginx/access.log | goaccess -f - --log-format=COMBINED --real-time-html ...,更可靠应对轮转
建议将最终命令写成 systemd service,设为开机自启,避免手动维护中断。
补充:其他轻量级实时工具对比
除了 GoAccess,还有几个常用选项供快速排查时参考:
-
tail -f /var/log/nginx/access.log:最原始,适合盯某次发布或攻击瞬间 -
ngxtop:类似 top,实时显示请求率、状态码、URI 排行,但无历史回溯 -
awk + sort + uniq手动统计:适合一次性查 UV/PV/404,但无法持续更新
GoAccess 的优势在于它同时覆盖了“实时监控”和“历史分析”,且部署成本最低。











