安装
yum install -y glib2 glib2-devel GeoIP-devel ncurses-devel zlib zlib-develyum install gcc
yum install -y GeoIP-update
yum install -y goaccess
安装成功后,可以查看
[root@molaifeng log]# goaccess -V
GoAccess - 1.2.
For more details visit: http://goaccess.io
Copyright (C) 2009-2016 by Gerardo Orellana
配置
在 /etc/goaccess.conf
添加
time-format %H:%M:%S
date-format %d/%b/%Y
其中 log-format
需要结合 Nginx
日志格式来
分析 Nginx
日志
对于没有配置日志格式的 access_log
来说,只需
goaccess -f access_log -o report.html --real-time-html --log-format=COMBINED
而对于已经配置了日志格式的日志来说,就需要对比 官方手册 来配置了,下面给出配置项
format | 说明 |
---|---|
%x | 与时间格式和日期格式变量匹配的日期和时间字段。当给出时间戳而不是日期和时间在两个单独的变量中时使用。 |
%t | 时间字段匹配时间格式变量。 |
%d | 与日期格式变量匹配的日期字段。 |
%v | 服务器名称根据规范名称设置(服务器块或虚拟主机)。 |
%e | 这是HTTP身份验证确定的请求文档的人的用户标识。 |
%h | host(客户端IP地址,IPv4或IPv6) |
%r | 来自客户端的请求行。这需要围绕请求的特定分隔符(单引号,双引号等)可解析。否则,使用特殊的格式说明符,如组合%m,%U,%q和%H解析各个字段。注意:使用或者%r获得完整的请求OR |
%m | 请求方法。 |
%U | 请求的URL路径。注意:如果查询字符串在%U,则无需使用%q。但是,如果URL路径不包含任何查询字符串,则可以使用%q并将查询字符串附加到请求中。 |
%q | 查询字符串。 |
%H | 请求协议。 |
%s | 服务器发送回客户端的状态代码。 |
%b | 返回给客户端的对象大小。 |
%R | “Referer”HTTP请求标头。 |
%u | 用户代理HTTP请求标头。 |
%D | 服务请求所需的时间,以微秒为单位。 |
%T | 服务请求所需的时间,以毫秒为单位,分辨率为毫秒。 |
%L | 服务请求所用的时间,以毫秒为单位的十进制数。 |
%^ | 忽略此字段。 |
%~ | 向前移动日志字符串,直到找到非空格(!isspace)char。 |
~h | X-Forwarded-For(XFF)字段中的主机(客户端IP地址,IPv4或IPv6)。 |
比如,我服务器上的 Nginx
日志格式为
log_format main '"$time_local" client=$remote_addr '
'method=$request_method request="$request" request_body=$request_body '
'request_length=$request_length '
'status=$status bytes_sent=$bytes_sent '
'body_bytes_sent=$body_bytes_sent '
'referer=$http_referer '
'user_agent="$http_user_agent" '
'upstream_addr=$upstream_addr '
'upstream_status=$upstream_status '
'request_time=$request_time '
'upstream_response_time=$upstream_response_time '
'upstream_connect_time=$upstream_connect_time '
'upstream_header_time=$upstream_header_time';
对应得日志记录为
"04/Apr/2019:15:16:26 +0800" client=192.68.1.1 method=GET request="GET /index.html HTTP/1.0" request_body=- request_length=36 status=200 bytes_sent=265 body_bytes_sent=14 referer=- user_agent="-" upstream_addr=- upstream_status=- request_time=0.000 upstream_response_time=- upstream_connect_time=- upstream_header_time=-
那么可以按照上面的配置分别写出下面的两种格式的 --log-format
goaccess -f access_log -o record.html --real-time-html --log-format='"%d:%t %^" %^=%h %^=%m %^="%r" %^=%^ %^=%^ %^=%s %^=%^ %^=%^ %^=%^ %^="%u" %^=%^ %^=%^ %^=%T %^=%^ %^=%^ %^=%^'
goaccess -f access_log -o record.html --real-time-html --log-format='"%d:%t %^" client=%h method=%m request="%r" request_body=%^ request_length=%^ status=%s bytes_sent=%^ body_bytes_sent=%b referer=%R user_agent="%u" upstream_addr=%^ upstream_status=%^ request_time=%T upstream_response_time=%^ upstream_connect_time=%^ upstream_header_time=%^'
其中, -f
指定日志文件, -o
指定输入文本, --real-time-html
实时监控,如果是历史日志可以不用加。打开 record.html
如下图