goaccess 配置记录
Posted on Sat 09 September 2017 in 遗迹
本来是计划弄一个站点统计的,初步意向是百度,结果发现被 adblock 默认规则屏蔽了。
拿关键字一搜发现不仅是百度,不少人专门将各种统计都配置成全家被屏蔽的状态,这可就不得了了。于是看看自建的web统计方案,基本上就是 piwik 一家独大。然而群众又表示这货很占资源,我这小服务器就还是算了吧。
后面又试图转战 VeryNginx,好嘛,这项目我也盯了很久了。谁知此项目毫无长进,访问统计废到不能再废,也是无法解决问题。
因此最后方案是 goaccess ,实际上这不是统计而是 nginx 日志分析。对单页应用来说肯定各种不准,但也无所谓了。我就随便看看大致情况,图个乐就行。
https://goaccess.io
ubuntu系统的默认源里有这个软件,但是版本是 0.9.x,我看到最新稳定版本是 1.2,那就按官方文档添加源吧。
echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key add -
sudo apt-get update
sudo apt-get install goaccess
装好以后是个命令行工具,但我想要开web服务好像不是那么简单。官方配置文档看得人头大,看着也没什么 step by step 的内容,所以写个文章记下来。
下面正式开始:
1. 统一日志格式
我有一些非标准形式的nginx日志,这是从上古流传下来的一份个人配置导致的,我决定把他们全清了。反正我也从来不看。
具体过程就是改配置,删去格式定义和使用该格式的地方。停掉 nginx 删除所有旧日志等等。
2. 简单配置 goaccess.conf
先试一下官方的例子。
cd /var/log/nginx
goaccess access.log -o report.html --real-time-html
提示需要对 /etc/goaccess.conf 进行配置
GoAccess - version 1.2 - Mar 7 2017 06:40:58
Config file: /etc/goaccess.conf
Fatal error has occurred
Error occured at: src/parser.c - parse_log - 2705
No time format was found on your conf file.
打开这个文件以后,我们看到几个标着 (required) 的项目
其中 Time Format Options (required)
和 Date Format Options (required)
我们都选第一项,因为提示是 Apache/NGINX's log formats below
。
Log Format Options (required)
则让人有点懵逼,因为分成了NCSA Combined Log Format
,Common Log Format (CLF)
,W3C
等等好多种
进行比对之后确认 nginx 是 NCSA Combined Log Format
,因此把 #log-format COMBINED
这行的注释取消掉。
所以目前实际有用的就三行:
time-format %H:%M:%S
date-format %d/%b/%Y
log-format COMBINED
其他保持默认即可。
3. 实时 web 分析页面
再来看这条命令:
goaccess access.log -o report.html --real-time-html
根据文档 https://goaccess.io/man SERVER OPTIONS 一节的描述,goaccess还可以加 --addr
--port
等参数。
这导致我陷入了一个严重的误区:我误以为 goaccess 能够直接提供一个对外的完整 web 服务,然后怎么调都调不对。
实际上,goaccess 只能生成一个 html 报告文件,需要你使用 http server 将此文件挂到网络上,也就是 -o report.html
里面的这个 report.html。
而 --real-time-html 的作用是启动一个 websocket 服务,默认会启动在 0.0.0.0 并挂在 7890 端口上。
在这之后,访问 report.html,他会试图去连接这个ws服务,从而完成数据的更新。
那么现在理清了思路,开始写配置文件:
sudo vi /etc/nginx/conf.d/tongji.conf
别忘了顺便把 websocket 也映射了。
server {
listen 80;
server_name tongji.fy0.me;
location /ws/ {
proxy_pass http://localhost:7890;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
root /var/web/tongji;
index index.html;
}
然后执行以下命令:
sudo goaccess ./access.log -o /var/web/tongji/index.html --real-time-html --ws-url=ws://tongji.fy0.me:80/ws/ --addr=127.0.0.1
这样就可以访问了
细节处还有很多问题,接下来一一修正。
4. 完善细节
时区问题
如果你右上角显示的时间不对,那么注意你的系统时区。
timedatectl # 查看
sudo timedatectl set-timezone Asia/Shanghai # 设置时区为东八区
多个日志文件
sudo goaccess ./*access.log* -o /var/web/tongji/index.html --real-time-html --ws-url=ws://tongji.fy0.me:80/ws/ --addr=127.0.0.1
如果单目录下多文件直接使用路径通配,多目录的话在 ./*access.log*
后面再加一条路径就行。
不过这东西毕竟不是站点统计,也没有针对域名的过滤器。所以建议不同服务配置不同的 access_log 然后分别开一个服务。
REFERRERS URLS 面板
内容比较有趣,通过编辑 /etc/goaccess.conf,将
ignore-panel REFERRERS
这一行注释掉来开启。
多个服务配置
在上面使用的命令后面加上 --port=xxxx --daemonize
这么一段参数,端口号一字排开。-o
和 -ws-url
也进行修改分别对应生成不同的 html 文件还有访问不同的 ws 地址。
总之就是端口号、ws-url、文件名三项要改,再加上对应的nginx配置。如果 ws 连接状态码得到301,那不用想就是请求转发失败,特别注意 /ws
与 /ws/
的区别。
4. 感想 & 结束
什么破玩意,以后不搞了。