goaccess分析nginx日志
1.nginx日志配置
常规的nginx日志解析网上有很多相关的文章,但是json_analytics格式的却很少,就以这个为例,nginx日志配置:
log_format json_analytics escape=json '{'
'"msec": "$msec", '
'"connection": "$connection", '
'"connection_requests": "$connection_requests", '
'"pid": "$pid", '
'"request_id": "$request_id", '
'"request_length": "$request_length", '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"remote_port": "$remote_port", '
'"time_local": "$time_local", '
'"time_iso8601": "$time_iso8601", '
'"request": "$request", '
'"request_uri": "$request_uri", '
'"args": "$args", '
'"status": "$status", '
'"body_bytes_sent": "$body_bytes_sent", '
'"bytes_sent": "$bytes_sent", '
'"http_referer": "$http_referer", '
'"http_user_agent": "$http_user_agent", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_host": "$http_host", '
'"server_name": "$server_name", '
'"request_time": "$request_time", '
'"upstream": "$upstream_addr", '
'"upstream_connect_time": "$upstream_connect_time", '
'"upstream_header_time": "$upstream_header_time", '
'"upstream_response_time": "$upstream_response_time", '
'"upstream_response_length": "$upstream_response_length", '
'"upstream_cache_status": "$upstream_cache_status", '
'"ssl_protocol": "$ssl_protocol", '
'"ssl_cipher": "$ssl_cipher", '
'"scheme": "$scheme", '
'"request_method": "$request_method", '
'"server_protocol": "$server_protocol", '
'"pipe": "$pipe", '
'"gzip_ratio": "$gzip_ratio", '
'"http_cf_ray": "$http_cf_ray",'
#如果没有geo模块可以注释掉
#'"geoip_country_code": "$geoip_country_code"'
'}';
access_log logs/access.log json_analytics;
2.安装goaccess
有2种安装方式,可以使用yum或者源码包,本次采用源码包安装,下载地址:
安装到/data/goaccess目录
[root@rockettest-161 dl]# tar -zxvf goaccess-1.2.tar.gz
[root@rockettest-161 dl]# cd goaccess-1.2/
[root@rockettest-161 goaccess-1.2]# ./configure --prefix=/data/goaccess --enable-geoip --enable-utf8
[root@rockettest-161 goaccess-1.2]# cd /data/goaccess
[root@rockettest-161 goaccess]# pwd
/data/goaccess
[root@rockettest-161 goaccess]# ls
bin etc share
[root@rockettest-161 goaccess]# ln -s /data/goaccess/bin/goaccess /usr/bin/
[root@rockettest-161 goaccess]# goaccess --v
GoAccess - 1.2.
For more details visit: http://goaccess.io
Copyright (C) 2009-2016 by Gerardo Orellana
[root@rockettest-161 goaccess]#
可以看到以上信息说明安装完成
3.配置
修改配置文件/data/goaccess/etc/goaccess.conf
3.1修改–time-format
time-format %H:%M:%S
3.1修改–date-format
date-format %d/%b/%Y
3.1修改–log-format
log-format %^:%^,%^:%^,%^:%^,%^:%^,%^:%^,%^:%^,%^:%*"%h",%^:%^,%^:%^,%^:%*"%d:%t %^",%^:%^,%^:%^,%^:%U,%^:%^,%^:%
*"%s",%^:%^,%^:%*"%b",%^:%*"%R",%^:%*"%u",%^:%^,%^:%^,%^:%^,%^:%*"%T",%^:%^,%^:%^,%^:%^,%^:%^,%^:%^,%^:%^,%^:%^,%
^:%^,%^:%^,%^:%*"%m",%^:%*"%H",%^:%^,%^:%^,%^:%^
log-format要和日志中的字段一一对应,%^表示忽略,%*表示匹配所有,另外goaccess支持的指标列表如下:
%x 与时间格式和日期格式变量匹配的日期和时间字段。当给出时间戳而不是日期和时间在两个单独的变量中时使用。
%t 与时间格式变量匹配的时间字段。
%d 与日期格式变量匹配的日期字段。
%v 根据规范名称设置(服务器块或虚拟主机)的服务器名称。
%e 这是请求文档的人的用户 ID,由 HTTP 身份验证确定。
%C 服务器服务的对象的缓存状态。
%h 主机(客户端 IP 地址,IPv4 或 IPv6)
%r 来自客户端的请求行。这要求请求周围的特定分隔符(单引号、双引号等)是可解析的。否则,请使用特殊格式说明符(例如 、 和 )的组合%m来%U解析%q各个%H字段。
注意:使用其中一个%r来获取完整的请求,或者 %m,和来形成您的请求,不要同时使用两者。%U%q%H
%m 请求方法。
%U 请求的 URL 路径。
注意:如果查询字符串在 中%U,则无需使用%q. 但是,如果 URL 路径不包含任何查询字符串,您可以使用%q并将查询字符串附加到请求中。
%q 查询字符串。
%H 请求协议。
%s 服务器发送回客户端的状态码。
%b 返回给客户端的对象的大小。
%R “Referer”HTTP 请求标头。
%u 用户代理 HTTP 请求标头。
%K 为连接选择的 TLS 加密设置。(在 Apache 日志格式中:) %{SSL_PROTOCOL}x。
%k 为连接选择的 TLS 加密设置。(在 Apache 日志格式中:) %{SSL_CIPHER}x。
%M 所请求资源的 MIME 类型。(在 Apache 日志格式中:%{Content-Type}o)
%D 服务请求所花费的时间,以微秒为单位。
%T 处理请求所花费的时间,以秒为单位,以毫秒为单位。
%L 服务请求所花费的时间,以毫秒为十进制数。
%^ 忽略此字段。
%~ 向前浏览日志字符串,直到找到非空格 (!isspace) 字符。
~h X-Forwarded-For (XFF) 字段中的主机(客户端 IP 地址,IPv4 或 IPv6)
4.解析日志
生产HTML报告
goaccess access.log -o report.html
生产json报告
goaccess access.log -d -o report.json
生产csv报告
goaccess access.log --no-csv-summary -o report.csv
实时html输出
goaccess access.log -o report.html --real-time-html
可以将页面实时输出到web站点,通过web站点来实时访问
其他功能可以参考官方文档