GoAccess——开源日志分析利器
Goaccess是一款开源、实时运行在命令端下的web日志分析工具,该工具可以提供快速、多样的HTTP状态统计,结果分析,领略过goaccess之后,再也不用sed、awk命令分析日志了。
安装依赖包
yum groupinstall 'Development Tools'
yum install glib2 glib2-devel ncurses-devel
yum install GeoIP GeoIP-devel GeoIP-data
安装GoAccess
$ 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
或者从git下载
$ git clone https://github.com/allinurl/goaccess.git
$ cd goaccess
$ autoreconf -fi
$ ./configure --enable-geoip --enable-utf8
$ make
make install
编译安装的配置选项:
--enable-debug
编译调试符号并关闭编译器优化。
--enable-utf8
编辑广泛的字符支持。需要Ncursesw
--enable-geoip=<legacy|mmdb>
编译GeoLocation支持。MaxMind的GeoIP是必需的。
legacy
将利用原始的GeoIP数据库。mmdb
将利用增强型GeoIP2数据库。--enable-tcb=<memhash|btree>
编译与东京橱柜存储支持。
memhash
将利用东京内阁哈希数据库。btree
将利用东京内阁的磁盘B +树数据库。--disable-zlib
禁用B + Tree数据库上的zlib压缩。
--disable-bzip
禁用B + Tree数据库上的bzip2压缩。
--with-getline
动态扩展行缓冲区,以解析全行请求,而不是使用4096的固定大小的缓冲区。
--with-openssl
使用OpenSSL对WebSocket服务器编译GoAccess。
使用GoAccess分析日志时,只需要指定要分析的日志文件即可。這里用apache的日志做分析。
goaccess -f /var/log/httpd/access_log
启动之后,你将会看到如下的屏幕输出,需要你选择日期及日志格式,按空格键进行选择,上下键切换,回车或者F10确认。
确认之后就开始读取分析日志,读取过程中有进度显示
读取完成后展示日志分析结果如下:
GoAccess分析日志输出默认有十几项内容,按向下的箭头滚动页面查看。
1、每天唯一访客(来自同样IP、同一日期和同一浏览器的请求)
2、请求的文件
3、请求的静态文件
4、HTTP 404 URL
5、主机地址(客户端IP地址)
6、访客操作系统
7、访客浏览器
8、引荐网址(访问入口)
9、HTTP 状态代码
10、客户端地域
其他使用方法:
1、生成HTML报告:
goaccess access.log -a -o report.html
2、生成JSON报告:
goaccess access.log -a -d -o report.json
3、生成CSV文件:
goaccess access.log --no-csv-summary -o report.csv
4、实时过滤和解析
tail -f access.log | goaccess -
5、同时保持打开的管道保持实时分析过滤,利用尾-f和匹配模式工具如grep,awk,sed,等:
tail -f access.log | grep -i -line-buffered'firefox'| goaccess --log-format =COMBINED -
6、从文件的开始解析,同时保持管道打开并应用过滤器
tail -f -n +0 access.log | grep --line-buffered'Firefox'| goaccess -o out.html - real-time-html -
7、多个日志文件
goaccess access.log access.log.1
8、在阅读常规文件时从管道中解析文件:
cat access.log.2 | goaccess access.log access.log.1 -
注意:单个破折号将附加到命令行以让GoAccess知道它应该从管道读取。
9、处理access.log.*.gz除当前日志文件之外的所有压缩日志文件
zcat access.log。*。gz | goaccess access.log -
10、实时HTML输出
goaccess access.log -o /usr/share/nginx/html/site/report.html - real-time-html
11、默认情况下,GoAccess将使用生成的报告的主机名。可以指定客户端浏览器连接到的URL
goaccess access.log -o report.html - real-time-html --ws-url = goaccess.io
12、默认情况下,GoAccess侦听端口7890,使用7890以外的其他端口,可以将其指定为(确保端口已打开):
goaccess access.log -o report.html - real-time-html --port = 9870
13、将WebSocket服务器绑定到0.0.0.0以外的其他地址,可以将其指定为:
goaccess access.log -o report.html --real-time-html --addr = 127.0.0.1
14、从日志中过滤日期,从05/Dec/2017文件开始直到所有HTTP请求开始。
sed -n'/ 05 \ / Dec \ / 2017 /,$ p'access.log | goaccess -a -
15、使用相对日期,如昨天或明天:
sed -n'/'$(date'+%d \ /%b \ /%Y' -d '1 week ago')'/,$ p'access.log | goaccess -a -
16、如果我们只想从DATE a到DATE b解析一段时间,我们可以做:
sed -n '/5\/Nov\/2017/,/5\/Dec\/2017/ p' access.log | goaccess -a -
17、假设您的日志包含虚拟主机字段。例如:
vhost.com:80 10.131.40.139 - - [02 / Mar / 2017:08:14:04 -0600]“GET / shop / bag-p-20 HTTP / 1.1”200 6715“ - ”“Apache )”并且您想要将虚拟主机附加到请求中,以查看顶级URL属于哪个虚拟主机
awk'$ 8 = $ 1 $ 8'access.log | goaccess -a -
18、要排除虚拟主机列表,您可以执行以下操作:
grep -v“`cat exclude_vhost_list_file`”vhost_access.log | goaccess -
19、文件和状态码
解析请求中的特定页面,例如页面浏览,html,htm,php等:
awk'$ 7〜/ \。html | \ .htm | \ .php /'access.log | goaccess -
注意:$7是通用日志格式的请求字段(不带虚拟主机),如果您的日志包含虚拟主机,那么您可能需要改用$8,例如:
tail -10 access.log | awk'{print $ 8}'
或者解析特定的状态代码,例如500(内部服务器错误):
awk'$ 9〜/ 500 /'access.log | goaccess -
【nginx优化】使用socket方式链接Nginx优化php-fpm性能
【环境配置】Postfix2.10+ssl+dovecot搭建邮件服务器
【实践分享】Linode VPS和Vultr VPS使用体检对比