0%

工具|利用GoAccess分析Nginx访问日志

项目上线之后,访问量逐渐增多,最近发现一些异常,从服务器监控zabbix没有发现比较有用的信息,链路监控pinpoint上发现访问量比之前增加了很多,所以想从入口方面分析一下来源,看看是不是被人抓取数据了。

Nginx日志格式

我这里使用的是阿里开源的tengine,和nginx是一样的,默认的日志格式

1
2
3
4
5
6
7
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log logs/access.log main;
error_log logs/error.log warn;
access_log "pipe:rollback logs/access_log interval=1d baknum=7 maxsize=2G" main;
1
113.200.77.134 - - [19/Dec/2019:10:45:39 +0800] "GET /air/home/code/regions HTTP/1.1" 200 1391 "http://localhost:8080/app/tabs/home" "Mozilla/5.0 (Linux; Android 9; COL-AL10 Build/HUAWEICOL-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/72.0.3626.121 Mobile Safari/537.36" "-"
参数说明实例
$remote_addr客户端地址113.200.77.134
$remote_user客户端用户名称- -
$time_local访问时间和时区19/Dec/2019:10:45:39 +0800]
$request请求的URI和HTTP协议GET /air/home/code/regions HTTP/1.1
$http_host请求地址,即浏览器中你输入的地址(IP或域名)
$statusHTTP请求状态200
$upstream_statusupstream状态
$body_bytes_sent发送给客户端文件内容大小1391
$http_refererurl跳转来源http://localhost:8080/app/tabs/home
$http_user_agent用户终端浏览器等信息Mozilla/5.0 (Linux; Android 9; COL-AL10 Build/HUAWEICOL-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/72.0.3626.121 Mobile Safari/537.36
$ssl_protocolSSL协议版本
$ssl_cipher交换数据中的算法
$http_x_forwarded_forHTTP 扩展头部
$upstream_addr后台upstream的地址,即真正提供服务的主机地址
$request_timeNginx处理整个请求所用总时间
$upstream_connect_timeNginx与upstream server建立连接所用时间
$upstream_header_time从建立连接成功到接收第一个字节之间的时间
$upstream_response_time从建立连接成功到接收第一个字节之间的时间

GoAccess

GoAccess是一个开源的实时 Web日志分析器和交互式查看器,可在* nix系统的终端中或通过浏览器运行

它为需要实时可视服务器报告的系统管理员提供了快速而有价值的HTTP统计信息。

官网地址:https://goaccess.io/

github地址:https://github.com/allinurl/goaccess

GoAccess日志规范:https://goaccess.io/man#custom-log

安装GoAccess

1
2
3
4
5
6
7
yum install geoip-devel  ncurses-devel glib2 glib2-devel  ncurses-devel zlib zlib-devel 
wget https://tar.goaccess.io/goaccess-1.3.tar.gz
tar -xzvf goaccess-1.3.tar.gz
cd goaccess-1.3/
./configure --prefix=/usr/local/goaccess --enable-utf8 --enable-geoip=legacy
make
make install
1
vim /usr/local/goaccess/etc/goaccess/goaccess.conf

配置日志格式,和nginx里的日志格式匹配起来,日志规范参考上述链接

1
2
3
time-format %H:%M:%S
date-format %d/%b/%Y
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
%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 请求所花费的时间,单位秒
%^ 忽略这一字段

终端查看日志

1
/usr/local/goaccess/bin/goaccess -a -d -f /usr/local/tengine/logs/access.log -p /usr/local/goaccess/etc/goaccess/goaccess.conf

goaccess

  • F1或h:帮助
  • F5 :刷新主界面
  • q:退出程序/当前窗口/折叠当前模块
  • o或Enter:展开选中的模块或窗口
  • 0-9以及Shift + 0:将选中的模块或窗口激活
  • k和j:模块内部移动
  • c:修改配色
  • ^f和^b:模块中上下滚屏
  • tab shift+tab:前后切换模块
  • s:模块内部排序选择
  • /:在所有模块中搜索(支持正则)
  • n:找到下个匹配
  • g和G:跳到第一项/最后一项

生成html格式

1
usr/local/goaccess/bin/goaccess -a -d -f /usr/local/tengine/logs/access_log.1 -p /usr/local/goaccess/etc/goaccess/goaccess.conf  -o ~/sx.html

goaccess