GoAccess-nginx日志分析工具

来自:互联网
时间:2018-08-08
阅读:

GoAccess 是一款开源、实时,运行在命令行终端下的 Web 日志分析工具。

该工具提供快速、多样的 HTTP 状态统计。

分析结果,可以通过 XShell 等客户端工具查看,并且可以生成 Html 报告。

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

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

centos6.x

系统已经安装了LNMP

安装:

#  yum -y install glib2 glib2-devel ncurses ncurses-devel GeoIP GeoIP-devel
#  wget http://tar.goaccess.io/goaccess-1.2.tar.gz
#  tar -xzvf goaccess-1.2.tar.gz
#  cd goaccess-1.2/
#  ./configure --enable-geoip --enable-utf8
#  make && make install

默认配置文件在

# vi /usr/local/etc/goaccess.conf

根据你的日志格式,配置以下参数,这里只需要将 # 去掉即可。

time-format

date-format

log-format

接下来我们测试一下。现在就需要根据Nginx的日志格式来写goaccess的规则

# goaccess  -f /usr/local/nginx/logs/access.log -a > /root/test/report.html

第二步:自定义配置

%x 匹配替代time_format和date_format的设定,可以同时调用两个的全局设置
%t 匹配替代time_fromat的设置  
%d 匹配替代 date_format的设置
%h 客户端ip  $remote_addr
%r 请求方法   $request  
%m 请求算法  相当于$request中的 post或get的匹配  
%U 请求的URL路径(包括任何查询字符串)  相当于$request中的 URL匹配
%H 请求的协议  相当于$request中的 HTTP/1.1
%s 服务端返回客户端的状态code   $status
%b 返回客户端的body size    
$body_bytes_sent
%R refer  $http_referer   
%u user-agent $http_user_agent  
%D 服务请求的时间,以微秒为单位  $request_time
%T 服务请求的时间,以秒为单位  $request_time
%L 服务请求的时间,以毫秒为单位   $request_time
%^ 忽略官方没有对应参数的区域

以上是官方给出的所有匹配参数,原版见
http://www.goaccess.io/man

网络上大部分的文章和介绍都只适合没任何修改的nginx日志格式,对自定义的log format都不怎么涉及。如果你采用的自定义的nginx日志格式,那么此处就需要特别注意,一旦log-format配置不对,goaccess分析的结果会差很大。

以我nginx日志格式为例:

log_format mAIn      '$server_name $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" $upstream_addr $request_time $upstream_response_time;

按照goaccess预设的log format,这样的日志是没法分析的,所以我们需要自定义log format。

我的log format为:

log-format %^ %h %^ %^ [%d:%t %^] “%r” %s %b “%R” “%u” “%^” %^ %T %^

为了设置正确的log format,踩了不少坑,先列出来避免大家重复碰到。
(1) log format默认是按照空格分隔日志信息的,所以,对于包含了特殊字符如空格等信息的字段,必须包含在“”里面。如字段request http_user_agent等
(2) nginx日志格式里面,采用空格分隔,但是此处一定注意,只能用一个空格。当时我有个地方用了两个空格,直接导致goaccess结果出错。
(3) nginx日志中的每一个字段都要和log format中的一一对应,如果log format中不需要nginx中的某一个信息,则用%^跳过该信息。
(4) 对于nginx日志中的每一个 - log format都需要一个%^来跳过, 如果是“-”, 则用“%^”
(5) 如果nginx日志信息中有:, 则需要在log format中也显示出来。例如nginx日志中$time_local就包含了:,所以在log format的相应位置也是 [%d:%t %^]

希望这些能帮助使用goaccess的朋友。

参考:

GoAccess-nginx日志分析工具

nginx 日志分析工具goaccess的使用以及碰到的坑

返回顶部
顶部