Author: haoransun
Wechat: SHR—97
前言
access日志 记录了用户非常重要的信息,可用它来分析、定位问题,也可用它来分析用户的运营数据,但是如果想要实时分析access 日志,相对比较困难。使用 cat、awk、sed 等命令做一些简单的日志分析统计,这样分析结果不理想也不全面,方法也极不高效。
GoAccess 这款工具以图形化的方式通过web socket协议,实时的将access日志的变迁反应到浏览器中。方便我们分析问题。
1 Nginx配置
为了提高 GoAccess 分析准确度,需要配置 nginx.conf
的 log_format 项。
1 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' |
2 安装GoAccess
GoAccess 是这个工具的站点。如图所示:
先看一下之前静态web资源服务器所产生的access log日志格式
现在打开 GoAccess中的 Get started快速开始页面,依据文档下载安装。
先下载依赖包
1 | yum install -y GeoIP-devel |
或者
1 | wget https://github.com/maxmind/geoip-api-c/releases/download/v1.6.11/GeoIP-1.6.11.tar.gz |
下载安装包
1 | wget https://tar.goaccess.io/goaccess-1.3.tar.gz |
出现错误:
configure: error: *** Missing development libraries for ncursesw
解决方法:
要使用–enable-utf8,你需要安装ncursesw,下面是安装命令:
1 | [root@haoransun goaccess]# sudo yum install ncurses-devel |
安装成功后:
3 配置
安装完成后,默认将配置文件goaccess.conf
放置于/usr/local/etc
路径,为了统一管理,使用mv /usr/local/etc/goaccess.conf /etc/
命令将其移动到/etc
目录下。
对配置文件做一些主要配置:
1 | vim /etc/goaccess.conf |
其中,log-format 与 access.log 的 log_format 格式对应,每个参数以空格或者制表符分割。参数说明如下:
1 | %t 匹配time-format格式的时间字段 |
4 命令
查看 GoAccess 命令参数,如下:
1 | $ goaccess -h |
5 控制台模式
1 | $ goaccess -a -d -f /home/geek/nginx/logs/haoransun.log -p /etc/goaccess.conf |
控制台下的操作方法:
1 | F1 主帮助页面 |
6 HTML模式
上游服务器(14): /home/geek/nginx 其中的 nginx.conf 配置为 127.0.0.1:8080 即仅能本机访问。
代理服务器(16): /usr/local/geek/openstry/nginx 其中 nginx.conf 配置了 upstream 来标明上游服务器的ip地址+端口号,同时也设置了相应的缓存,具体查看前几节文章。
1 | goaccess -a -d -f /home/geek/nginx/logs/haoransun.log -p /etc/goaccess.conf -o /home/geek/nginx/html/go-access.html |
浏览器输入
1 | 192.168.121.100:80/go-access.html 即可看到 |
由下图可看到,确实是由 代理服务器替我们拿到的数据
daemonize
GoAccess 已经为我们考虑到这点了,它可以以 daemonize 模式运行,并提供创建实时 HTML 的功能,只需要在启动命令后追加--real-time-html --daemonize
参数即可。
1 | goaccess -a -d -f /home/geek/nginx/logs/haoransun.log -p /etc/goaccess.conf -o /home/geek/nginx/html/go-access.html --real-time-html --daemonize |
以守护进程启动 GoAccess 后,使用 Websocket 建立长连接,它默认监听 7890 端口,可以通过--port
参数指定端口号。
如果站点启用了 HTTPS, GoAccess 也需要使用 openssl,在配置文件
goaccess.conf
中配置ssl-cert
和ssl-key
项,并确保在安装过程中 configure 时已添加--with-openssl
项来支持 openssl 。当使用 HTTPS 后 Websocket 通信时也应该使用 wss 协议,需要将ws-url
项配置为wss://www.domain.com
。
crontab
在某些场景下,没有这样的实时性要求,可采用 crontab 机制实现定时更新 HTML 报表。
1 | # 每天执行 |
当access 日志被切割后,怎么合理使用 GoAccess 分析日志,--keep-db-files
这个功能倒是可以尝试,这样就可以只分析新生产的日志文件了。
7 不足
尽管 GoAccess 很强大,但是它无法制定自定义监控规则,无法满足对站点更细粒度更全面的监控需求。此时就要使用到 ELK日志平台来分析站点的访问情况和流量分析。