NGINX日志分析工具-GoAccess

NGINX日志分析工具-GoAccess

一、介绍

二、功能一览

  • 支持功能
    • 生成统计数据,带宽统计等
    • 每个请求的时间统计
    • 最高访问ip
    • 请求的文件统计
    • 请求的静态文件、图片、flash、js文件等
    • 各HTTP状态码统计
    • Hosts,反向DNS,IP所在地
    • 操作系统
    • 浏览器/蜘蛛
    • 引用的网站
    • 引用的URLs
    • 关键词组
    • 地理位置 (大陆、国家、城市)
    • 可输出JSON或CSV
    • 各种的颜色主题
    • 支持大容量数据且支持大容量数据的持续分析
    • 支持IPv6
    • 可生成HTML报告

三、Goaccess的安装

1
2
3
4
5
6
#安装epel源
[root@localhost ~]# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/Packages/e/epel-release-6-8.noarch.rpm
#安装相关服务器工具(可跳过)
[root@localhost ~]# yum install vim telnet wget nethogs htop glances dstat traceroute lrzsz goaccess ntpdate dos2unix openssl-devel tcpdump lrzsz fio nss curl -y
#安装Goaccess及相关依赖组件
[root@localhost ~]# yum -y install glib2 glib2-devel ncurses ncurses-devel geoIP geoIP-devel goacees

四、生成goaccess配置文件(用于NGINX日志分析)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
###默认配置文件
/etc/goaccess.conf

###手工生成配置文件
~/.goaccesss

日志格式:
time-format
date-format
log_format

生产配置(此配置需要和Nginx日志做校对调整):
###结合如下第二种nginx日志格式进行分析
time-format %T
date-format %d/%b/%Y
log_format %h %^ %^ [%d:%t %^] "%^" "%r" %s %b %^ "%R" "%u" "%^" %^ %^ %^ %T

###结合如下第一种nginx日志格式进行分析
time-format %T
date-format %d/%b/%Y
log_format出包含 %h %^ %^ [%d:%t %^] "%^" "%r" %s %b %^ "%R" "%^" "%^" %^ %^ %^ %T "%u"

###如配置log_format出包含"%u",则需要配置如下参数
nginx日志开启cookie:
在vhosts,server段中配置如下:
set $jvm_cookie "";
if ($http_cookie ~* "JSESSIONID=([[:alnum:]]*\.[[:alnum:]]*-[[:alnum:]]*)") {
set $jvm_cookie $1;
}

五、调整nginx的日志输出格式

1
2
3
4
5
6
7
8
9
10
11
12
13
###主机名\请求地址\状态码\请求body\body字节数\用户真是IP\后端负载节点\请求时间\用户cookie
log_format access '$remote_addr - $remote_user [$time_local] "$server_name" "$request" '
'$status $body_bytes_sent "$request_body" "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$connection $upstream_addr '
'$upstream_response_time $request_time "$jvm_cookie"';

###主机名\请求地址\状态码\请求body\body字节数\用户真是IP\后端负载节点\请求时间\
log_format access '$remote_addr - $remote_user [$time_local] "$server_name" "$request" '
'$status $body_bytes_sent "$request_body" "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$connection $upstream_addr '
'$upstream_response_time $request_time ';

六、开始分析nginx日志并生成html报告

1
[root@localhost ~]# goaccess -d -f access_20170517.log -a -p ~/.goaccessrc > goaccessrc.html

微信截图_20190430155927.png-156.5kB

七、在线分析nginx日志并终端输出报告

1
2
###Nginx日志是属于Combined Log Format (XLF/ELF)类型的,如无法输出日志,则需要根据nginx输出日志格式调整goaccess解析格式参考第四节。
[root@localhost ~]# goaccess -f access.log

微信截图_20190430155139.png-111.5kB

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

八、Goaccess相关扩展部分:

1
2
3
4
5
6
7
8
9
10
11
12
13
###由于nginx会自动压缩日志,以下命令可以直接分析压缩后的日志
1、zcat access.log.*.gz | goaccess
2、zcat -f access.log* | goaccess

###支持各种管道
1、sed -n '/11\/Dec\/2014/,$ p' access.log | goaccess -a
2、grep -E "(google|baidu)"access.log | goaccess -a

###goaccess部分参数说明:
1、-f 指明目标文件
2、-p 按照指定配置文件格式输出,如果指定默认使用conf下面的goaccess.conf
3、-o 指定生成文件的格式,如json,csv等
4、-a 显示出useragent。Enable a list of user-agents by host
-------------本文结束感谢您的阅读-------------
LiGuanCheng wechat
如有问题,请与我微信交流或通过右下角“daovoice”与我联系~。
请我喝一杯咖啡~