
你是不是也这样:想看看今天网站有多少人访问,哪个页面最火,有没有人在刷你——但面对Nginx的access.log,只会用tail -f看实时滚动,或者用grep统计一下IP?
其实有个工具,装上一分钟,打开浏览器,你的网站访问情况就变成一张张清晰的图表。它叫GoAccess。
先看一个数据
一个日IP 5000的网站,access.log每天增长几十MB。一个月下来,上千万条日志记录。你想在里面找出“哪个页面最慢”“哪个IP在疯狂刷你”,靠手动grep?
有个哥们儿跟我说,他之前用cat access.log | awk '{print $1}' | sort | uniq -c | sort -nr统计IP,每次要跑好几分钟。后来换了GoAccess,命令一敲,报告秒出,还能在浏览器里点着看。
他说:“原来我以前的统计方式,是在用手工挖井。”
GoAccess是什么?
一句话:把Nginx/Apache的日志变成可视化图表的工具。
你给它一个access.log,它给你一份HTML报告。里面有什么?
- 每天/每小时的访问量趋势
- 热门页面排名(哪个文章最火)
- 访客IP排名(谁来得最多)
- HTTP状态码分布(有没有人刷出404)
- 请求耗时分布(哪些页面慢)
- 来源网站、浏览器类型、操作系统……
一行命令装完
Ubuntu/Debian:
bash
sudo apt update sudo apt install goaccess -y
CentOS/RHEL:
bash
sudo yum install epel-release -y sudo yum install goaccess -y
装完之后验证一下:
bash
goaccess --version
第一个报告:终端里直接看
假设你的Nginx日志在/var/log/nginx/access.log。
bash
goaccess /var/log/nginx/access.log
然后会问你“请选择日志格式”,选Common Log Format (CLF)或者NCSA Combined Log Format (COMBINED),看你Nginx配置的是哪种。
选完,终端直接变成一个交互式仪表盘。上下箭头翻页,左右切换面板。CPU、内存、访问量、热门URL……都在里面了。
反常识点:你不需要离开终端就能看报告。对于SSH连服务器的人来说,这太方便了。
第二个报告:生成HTML,浏览器里看
终端报告适合自己看,但如果你想分享给老板、存成文档,或者就是喜欢鼠标点着看,用HTML输出。
bash
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED
然后打开浏览器,访问 http://你的服务器IP/report.html,就能看到图表面板了。
如果Nginx默认网站目录不是/var/www/html,改成你自己的路径就行。
第三个报告:实时模式,自动刷新
如果你想让报告自动刷新,用--real-time-html参数:
bash
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED --real-time-html
每次有人访问你的网站,报告里的数字会实时更新。像个监控大屏,很适合挂在大屏幕上看着玩。
报告里能看到什么?我帮你翻译一下
打开报告,你会看到十几个面板。我挑几个最重要的说:
1. 总体概览:总请求数、总带宽、唯一访客数(基于IP)。一眼知道网站今天热不热。
2. 请求量趋势:按小时/天的柱状图。能看出几点是高峰期——如果你的电商站晚上10点访问量最高,就知道什么时候该备足资源。
3. 热门URL:哪些页面被访问最多。你的爆款文章是哪篇,一目了然。
4. 访客IP排名:哪个IP来得最多。如果某个陌生IP排第一,十有八九是爬虫,可以考虑封掉。
5. 状态码分布:200是正常,404是页面不存在,500是服务器错误。如果某天404突然暴涨,说明有爬虫在乱扫。
6. 请求耗时:哪些页面响应慢。看到某个API耗时超过1秒,就该去优化了。
7. 来源网站:用户从哪跳过来的。如果某个论坛给你带来大量流量,你就知道该去那里多互动。
实战场景1:网站被攻击,找出元凶
有一天你的网站突然变慢,带宽打满。你怀疑被CC攻击了。
打开GoAccess报告,看访客IP排名。如果某个IP的请求量是第二名的几十倍,大概率就是它。
拿到IP后,用防火墙封掉:
bash
iptables -A INPUT -s 123.456.789.0 -j DROP
再看报告,流量恢复正常。搞定。
实战场景2:网站变慢,找出慢页面
你的用户反映“有时候打开很慢”。不是每次都慢,很难复现。
GoAccess的请求耗时面板会告诉你:哪些请求的平均响应时间最长。
看到/api/order/list耗时2.3秒,其他页面都正常。你就知道问题出在这个接口上,去优化它。
反常识点:很多人一遇到慢就怪服务器,其实是某个页面或者某个SQL写得烂。日志会告诉你真相。
实战场景3:看SEO效果
你上周发了篇文章,想看看有没有带来流量。
打开热门URL面板,看新文章的访问量排名。如果进了前十,说明SEO有效。如果排不进去,就知道标题或者推广渠道有问题。
让GoAccess每天自动生成报告
你不想每天手动敲命令?用crontab。
写个脚本/root/gen_report.sh:
bash
#!/bin/bash goaccess /var/log/nginx/access.log -o /var/www/html/report.html --log-format=COMBINED
给执行权限:
bash
chmod +x /root/gen_report.sh
加到crontab,每天凌晨1点跑一次:
bash
0 1 * * * /root/gen_report.sh
每天早上打开浏览器,就能看到昨天的访问报告了。
最后一句:日志不是废纸,是金矿
很多人把服务器日志当成“出事了才翻”的东西。但其实它是你网站的体检报告、用户行为记录、性能监控仪。
GoAccess就是那个把“废纸”变成“金矿”的工具。装一个试试,你会惊讶:原来我的网站每天有这么多人看?原来这个页面这么慢?原来这个IP一直在偷我图片?
数据不会骗人。你的网站到底怎么样,日志里全写着。你只需要一把看得懂的钥匙。




