介绍
GoAccess 是一款开源的且具有交互视图界面的实时 Web 日志分析工具,能为系统管理员提供快速且有价值的 HTTP 访问统计。GitHub地址、官网
安装
安装命令来自GoAccess官网:
# 直接安装不是最新版,这里设置官方仓库,以便安装最新版 wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list sudo apt-get update # 开始安装 sudo apt-get install goaccess # 安装中文包 apt-get install language-pack-zh-hans # 装好后使用以下命令检查是否有 zh_CN.utf8 了 locale -a
nginx access.log 日志分析
# Web方式实时分析(要让 html 显示实时数据,需加 --real-time-html、--ws-url、--port这三个参数) # 此外还需要修改 goaccess.conf,后面有讲到 goaccess -a -d -f /var/log/nginx/access.log -p /etc/goaccess/goaccess.conf -o /var/log/nginx/goaccess/report.html --real-time-html --ws-url=ws://192.168.1.200/goaccess --port=7890 # 控制台分析(不推荐) goaccess -a -d -f /var/log/nginx/access.log -p /etc/goaccess/goaccess.conf
GoAccess默认就能解析 Nginx日志格式,对于控制台分析,首次启动时会弹出选择框,选 NCSA Combined Log Format 即可:
对于 Web 方式实时分析,则需要改 /etc/goaccess/goaccess.conf 配置,直接将下面三个地方的 # 去掉即可:
效果图:
nginx 静态资源配置
想通过 html 实时分析日志,还需要将 /var/log/nginx/goaccess/report.html 配置为 nginx 的静态资源,以便通过 web 访问:
/etc/nginx/conf.d/goaccess.conf:
server { listen 7880; server_name 192.168.1.200; # 参考:https://blog.csdn.net/chinabestchina/article/details/73556785 location /goaccess/report.html { root /var/log/nginx/; } # 配置反向代理到内部的端口7890上 location /goaccess { proxy_redirect off; proxy_pass https://127.0.0.1:7890; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; } }
访问地址:http://192.168.1.200:7880/goaccess/report.html
启动参数
- –daemonize:以守护进程方式启动
- –ws-url:WebSocket 服务地址,用于实时显示日志
- –port:WebSocket 服务端口,用于实时显示日志
log-format 参数
log-format 与 Nginx 日志 access.log 中的 log_format 格式对应,每个参数以空格或者制表符分割,参数说明如下:
- %t 匹配 time-format 格式的时间字段
- %d 匹配 date-format 格式的日期字段(date-format %d/%b/%Y)
- %h host(客户端 ip 地址,包括 ipv4 和 ipv6)
- %r 来自客户端的请求行
- %m 请求的方法
- %U URL 路径
- %H 请求协议
- %s 服务器响应的状态码
- %b 服务器返回的内容大小
- %R HTTP 请求头的 referer字段
- %u 用户代理的 HTTP 请求报头
- %D 请求所花费的时间,单位微秒
- %T 请求所花费的时间,单位秒
- %^ 忽略这一字段
实战经验
发现了百度蜘蛛 baiduspider 爬网频率高,导致流量消耗大
最近百度蜘蛛抓取频率巨大(尤其是 baiduspider-render/2.0),一天的传输量就达到1.7G。可通过 nslookup(nslookup 116.179.37.47)反查是否百度蜘蛛还是冒充的,若没问题则hostname以 *.baidu.com 或 *.baidu.jp 的格式命名,抽查了几个域名都没问题,下面是浏览器视角日志截图:
再去看百度爬虫频率配置,默认竟设置了8万次:
导致流量费较高,调小到2000次后,前两天降下来了,第三天频次又恢复到几万了,因此这不是主要原因。
实际上主要原因是我的前端代码 ajax 配置上设了 cache:false 导致的,这个设置直接的后果就是每次请求同一个接口,url后面都会携带 ?_=1712905979938
这种随机数来防止ajax缓存,致使百度爬虫认为是不同的请求,不停地爬同一个接口。当初加这个 cache:false 是为了修复因ajax域名使用CDN缓存加速,导致ajax返回的数据都一样这种场景。现在ajax请求的域名早已不再使用CDN加速了,因此 cache:false 根本就没必要,也不能加。