centos7中使用GoAccess分析Nginx日志

介绍

GoAccess 是一款访问日志分析工具,几乎支持所有的web日志 (Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront, 等等),通过 GoAccess 分析访问日志生成的报表可以帮助我们找到网站高峰的访问时段,找到请求量最高的接口,从而着手进行优化处理。

安装

安装最新版的 (centos)

1
yum install goaccess -y

也可以编译安装

1
2
3
4
5
6
wget http://tar.goaccess.io/goaccess-1.2.tar.gz
tar -xzvf goaccess-1.2.tar.gz
cd goaccess-1.2/
./configure --enable-utf8 --enable-geoip=legacy
make
make install

更多的配置选项可以查看安装说明:https://goaccess.cc/?mod=download

安装后输入goaccess -V查看一下

1
2
3
# goaccess -V
GoAccess - 1.3.
For more details visit: http://goaccess.io

之后要修改一下goaccess.conf配置文件,安装后配置文件默认再/etc/goaccess/下面,如果是编译安装的应该在/usr/local/etc下面。

1
2
3
time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

上面配置了日志请求中的所用的时间格式和日期格式,log-format对应的是nginx里面的log_format ,参数如下

  • %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 请求所花费的时间,单位秒
  • %^ 忽略这一字段

goaccess执行命令参数 ,终端输入 goaccess -h可看到,下面只列出常用的的。

1
$ goaccess -h

常用参数

  • -a –agent-list 启用由主机用户代理的列表。为了更快的解析,不启用该项
  • -d –with-output-resolver 在HTML/JSON输出中开启IP解析,会使用GeoIP来进行IP解析
  • -f –log-file 需要分析的日志文件路径
  • -p –config-file 配置文件路径
  • -o –output 输出格式,支持html、json、csv
  • -m –with-mouse 控制面板支持鼠标点击
  • -q –no-query-string 忽略请求的参数部分
  • –real-time-html 实时生成HTML报告
  • –daemonize 守护进程模式,–real-time-html时使用

控制台模式

再终端输入命令(blog.czkup.cn.log 需要换成自己的日志,/etc/goaccess/goaccess.conf需要改成自己goaccess.conf所在的位置)

1
goaccess -a -d -f blog.czkup.cn.log -p /etc/goaccess/goaccess.conf 

控制台下的操作方法:

  • F1 主帮助页面
  • F5 重绘主窗口
  • q 退出
  • 1-15 跳转到对应编号的模块位置
  • o 打开当前模块的详细视图
  • j 当前模块向下滚动
  • k 当前模块向上滚动
  • s 对模块排序
  • / 在所有模块中搜索匹配
  • n 查找下一个出现的位置
  • g 移动到第一个模块顶部
  • G 移动到最后一个模块底

HTML模式

再终端输入命令(blog.czkup.cn.log 需要换成自己的日志, /www/wwwroot/goaccess/go-access.html需要改成自己的html文件,–real-time-html 参数是实时生成HTML报告)

1
goaccess blog.czkup.cn.log -p /etc/goaccess/goaccess.conf -o /www/wwwroot/goaccess/go-access.html --real-time-html

控制台会提示一句话,说明已经可以了。

1
WebSocket server ready to accept new client connections

这个时候去访问刚刚生成的html页面,页面上会实时最新的日志。

这种就有点麻烦,如果推出了,GoAccess和WebSocket都会被关闭。这样html就收不到最新的日志内容了。

这个时候需要再刚刚执行的命令后面添加一个参数***–daemonize***

1
goaccess blog.czkup.cn.log -p /etc/goaccess/goaccess.conf -o /www/wwwroot/goaccess/go-access.html --real-time-html --daemonize

注意再执行命令之前请打开7890端口

这个时候会后运行,日志会实时更新到html页面上。也可以生成json和csv。

只需要把-o后面的参数改成想要的格式。

1
2
3
4
5
6
json

goaccess blog.czkup.cn.log -p /etc/goaccess/goaccess.conf -o json>index.json
csv

goaccess blog.czkup.cn.log -p /etc/goaccess/goaccess.conf -o csv>index.csv

这就是goaccess的基本使用方法,要了解更多的用法可以自行去官方文档查询。官方地址