GoAccess请求监控
简介
GoAccess是一款开源的实时web日志分析器和交互式查看器,用于可视化查看HTTP统计信息,可以系统的终端上运行,也可以通过浏览器运行;
本文通过使用GoAccess分析Nginx的日志文件,从而统计HTTP的请求情况;
准备
当前服务器:Ubuntu 22.04.1 LTS
本文是基于Docker容器,所以先在Docker安装Nginx(Nginx安装)
思路
首先Nginx会产生日志文件,GoAccess就是利用这个日志文件的信息来分析、统计HTTP信息,然后会生成一个可视化报表,我们会将这个报表替换掉Nginx的index.html欢迎页面,从而直接展示可视化报表,所以这里的Nginx要映射html文件到宿主机,同时Goaccess的输出报表的文件也映射到此目录下,且名称为index.html;
启动Nginx
docker run -d --name nginx -p 8801:80 -v /opt/nginx/html:/usr/share/nginx/html -v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /opt/nginx/logs:/var/log/nginx -v /opt/nginx/conf/conf.d:/etc/nginx/conf.d nginx
首先我们会启动Nginx,同时做好卷映射,Nginx相关文件都放在/opt/nginx/
目录下;
/opt/nginx/html
对应容器中路径 /usr/share/nginx/html
,目前是Nginx欢迎页,后面会用来存放日志分析后的可视化报表页面
/opt/nginx/conf/nginx.conf
对应容器中路径 /etc/nginx/nginx.conf
,是Nginx的配置文件
/opt/nginx/logs
对应容器中路径/var/log/nginx
,Nginx的日志文件,后面要传递给GoAccess做为分析日志源
到这Nginx就启动起来了,记住这个index.html页面与access.log文件,后面会将index.html替换,而access.log会被用来做分析,下面安装配置GoAccess。
启动GoAccess
搜索
docker search GoAccess
拉取
docker pull allinurl/goaccess
配置
之前说过要映射配置文件,所以我们配置下GoAccess的日志格式,这个很重要,必须对应Nginx的日志的格式来匹配,可以看看官方文档。默认的Nginx日志格式如下:
知道了Nginx的日志格式,那么我们需要将GoAccess的匹配参数与之对应,参考
- %t 匹配time-format格式的时间字段
- %d 匹配date-format格式的日期字段
- %h host(客户端ip地址,包括ipv4和ipv6)
- %r 来自客户端的请求行
- %m 请求的方法
- %U URL路径
- %H 请求协议
- %s 服务器响应的状态码
- %b 服务器返回的内容大小
- %R HTTP请求头的referer字段
- %u 用户代理的HTTP请求报头
- %D 请求所花费的时间,单位微秒
- %T 请求所花费的时间,单位秒
- %^ 忽略这一字段
所以得出的配置文件为:
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
date-format %d/%b/%Y
time-format %H:%M:%S
启动
docker run --restart=always -d -p 7890:7890 -v /opt/goaccess/data:/srv/data -v /opt/nginx/html:/srv/report -v /opt/nginx/logs:/srv/logs --name goaccess allinurl/goaccess --no-global-config --config-file=/srv/data/goaccess.conf --output=/srv/report/index.html --log-file=/srv/logs/access.log --real-time-html
然后启动GoAccess,也做好卷映射,相关文件在/opt/goaccess/
下,
/opt/goaccess/data
对应容器中路径/srv/data
,是GoAccess的配置路径
/opt/nginx/html
对应容器中路径/srv/report
,用来存放可视化报表,由--output
参数决定
/opt/nginx/logs
对应容器中路径/srv/logs
,这里是将Nginx的产生的日志文件路径映射到goaccess容器,对日志做分析
GoAccess参数--config-file
设置为/srv/data/goaccess.conf
,这里的/srv/data
映射了宿主机/opt/goaccess/data
;参数--output
设置为/srv/report/index.html
,这里的/opt/nginx/html
又映射到nginx容易,所以nginx可以直接访问这个html页;
坑
注意配置文件一定不能弄错,不然就会是这样,一直重启,这是因为还没有将配置文件设置好,配置文件我们映射了opt/goaccess/data
,只需要在此目录下创建好goaccess.conf
并配置格式即可;
由于这里已经启动了,目录已经自动创建好了,没启动前还是乖乖创建目录、创建文件;这里只需要创建文件了;
打开映射的ip地址查看是否配置成功,如果没启动的话大概率是配置文件弄错了,多试着改几次配置文件即可;