题图就是最终效果。

 

我这环境是后端机器Debian 12,前端缓存节点是Debian 11,所有缓存节点的日志发往后端机器,通过syslog-ng进行归纳、分析什么的。后续有空再单独写一下日志方面的细则。

 

我这里是在syslog-ng里面把所有收到的日志按照原样写入一个文件 /root/z/weblog.txt ,这样就实现了所有节点的日志聚合,还是比较方便的。但是不适合那种限流量的环境,毕竟日志其实挺大的。

 

安装goaccess很简单,用不着去编译的:

apt install -y lsb-release gpg
wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | 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" | tee /etc/apt/sources.list.d/goaccess.list
apt-get update
apt-get install goaccess

这里用了官网的源,所以安装的就是最新版。如果直接用debian自己的源里面版本要低一些。

 

nginx里面的日志格式是这样的:

log_format  main  '"$clientRealIp","$server_addr","$fmt_localtime","$scheme","$server_protocol","$request_method","$host","$status","$sent_http_content_type","$body_bytes_sent","$request_uri","$http_referer","$http_user_agent"';

用了一些小手段让nginx日志的日期时间看着顺眼:

map $host $fmt_localtime {
    default '';
}
log_by_lua_block {
   ngx.var.fmt_localtime = ngx.localtime();
}

 

在 /etc/goaccess/goaccess.conf 里面增加三行设置:

log-format "%h","%^","%d %t","%^","%H","%m","%v","%s","%^","%b","%U","%R","%u"
date-format %Y-%m-%d
time-format %H:%M:%S

 

注意,我这个日志格式仅适合我的配置,这玩意实际上很难搞,日期时间设置我用了一两个小时,挺操蛋的 -_- ,看起来真的很简单,但我反复折腾……

 

最后,启动一下,并且运行为后台模式就行了:

LANG="zh_CN.UTF-8" && goaccess /root/z/weblog.txt -o /var/www/www.tingtao.org/weblogreport.html --real-time-html --daemonize --pid-file=/var/run/goaccess_.pid

 

当然了,我机器上生成的文件路径肯定不是文中这个 *^_^*

============================

补充一下,我nginx日志里面的clientRealIp是这么生成的:

map $http_x_forwarded_for $clientRealIp {
    ""  $remote_addr;
    ~^(?P<firstAddr>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[0-9A-Fa-f]+:[0-9A-Fa-f]+:[0-9A-Fa-f]+:[0-9A-Fa-f]+:[0-9A-Fa-f]+:[0-9A-Fa-f]+:[0-9A-Fa-f]+:[0-9A-Fa-f]+),?.*$ $firstAddr;
}

 

这样做的好处是如果是在cdn后面,则可以自动提取正确的客户端IP

 

如果要开多个进程来生成多个报告,这样是可以的,但是需要pid和port做出区分,否则冲突了就不行。

 

作者 听涛

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注