用 GoAccess 分析 Nginx 的日志
GoAccess 是什么?
GoAccess 是一款开源、实时,运行在命令行终端下的 web 日志分析工具。该工具提供快速、多样的 HTTP 状态统计,可以令管理员不再纠结于统计各类数据,和繁杂的指令以及一大堆管道 / 正则表达式说 byebye。
功能一览
- 生成统计数据,带宽统计等
- 每个请求的时间统计
- 最高访问 ip
- 请求的文件统计
- 请求的静态文件、图片、flash、js 文件等
- 各 HTTP 状态码统计
- Hosts,反向 DNS,IP 所在地
- 操作系统
- 浏览器 / 蜘蛛
- 引用的网站
- 引用的 URLs
- 关键词组
- 地理位置 (大陆、国家、城市)
- 可输出 JSON 或 CSV
- 各种的颜色主题
- 支持大容量数据且支持大容量数据的持续分析
- 支持 IPv6
- 可生成 HTML 报告
开始使用
- 如果想从源码编译:
1 | wget http://tar.goaccess.io/goaccess-0.8.1.tar.gz |
- 从软件包管理器安装:
Debian/Ubuntu
1 |
CentOS/Fedora
1 | yum install goaccess |
OSX
1 | brew install goaccess |
用 Access 来分析 Nginx 日志
然后就可以开始使用 GoAccess 了。
首先,进入 nginx 的日志目录,如 /var/log/nginx
,输入如下命令让 goaccess 打开指定文件:
1 | goaccess -f access.log |
打开之后会跳出选择日志文件类型的界面:
Nginx 日志是属于 Combined Log Format (XLF/ELF) 类型的,所以我们选择第三个。用上下光标移动,空格选中,回车确定。
进入了主界面:
键盘操作:
F1
或h
:帮助F5
:刷新主界面q
:退出程序 / 当前窗口 / 折叠当前模块o
或Enter
:展开选中的模块或窗口0-9
以及Shift + 0
:将选中的模块或窗口激活k
和j
:模块内部移动c
:修改配色^f
和^b
:模块中上下滚屏tab
shift+tab
:前后切换模块s
:模块内部排序选择/
:在所有模块中搜索 (支持正则)n
:找到下个匹配g
和G
:跳到第一项 / 最后一项
命令行下相关:
在使用 goaccess 命令行前,我们必须配置日志文件的解析格式,因为此处没有界面来让你选择日志格式了。
看一下日志格式:
1 | $tail access.log |
如果你的日志格式和我一样,那么就不用自己折腾了。请跳过下一小段。
如果你的日志格式和我不同,那么请去 http://goaccess.io/man#custom-log 看一下格式的基本规范。以我的 log 为例:
ip - - [日期] "请求类型" 服务器响应 大小 来源 浏览器信息 "代理"
%h %^[%d:%^] "%r" %s %b "%R" "%u" %^
各项代表的意思可以去 http://goaccess.io/man#custom-log 查看。
现在配置一下:
1 | vim /etc/goaccess.conf |
如果有这行:
1 | #NCSA Combined Log Format with Virtual Host |
那就去掉下面 log-format 前的#
吧。
如果没有,就写一行。
log-format %h %^[%d:%^] "%r" %s %b "%R" "%u" %^
找到
1 | #Any Apache log date format |
取消掉 date-format 的注释。
使用 GoAccess 生成 html 报告:
1 | # goaccess -f access.log -a > report.html |
生成 json 报告:
1 | goaccess -f access.log -a -d -o json > report.json |
CSV:
1 | goaccess -f access.log -o csv > report.csv |
由于 nginx 会自动压缩日志,一下命令可以直接分析压缩后的日志:
1 | zcat access.log.*.gz | goaccess |
支持各种管道:
1 | sed -n '/11\/Dec\/2014/,$ p' access.log | goaccess -a |
想分析下百度 /google 对你网站爬了些啥内容?Easy:
1 | grep -E "(google|baidu)"access.log | goaccess -a |
嗯,辛勤的谷歌今天已经来我的网站爬了 4 个页面了。:)
有哪些不足?
用 GoAccess 分析 Nginx 的日志