GoAccess初探.docx

上传人:b****5 文档编号:6360825 上传时间:2023-01-05 格式:DOCX 页数:17 大小:240.28KB
下载 相关 举报
GoAccess初探.docx_第1页
第1页 / 共17页
GoAccess初探.docx_第2页
第2页 / 共17页
GoAccess初探.docx_第3页
第3页 / 共17页
GoAccess初探.docx_第4页
第4页 / 共17页
GoAccess初探.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

GoAccess初探.docx

《GoAccess初探.docx》由会员分享,可在线阅读,更多相关《GoAccess初探.docx(17页珍藏版)》请在冰豆网上搜索。

GoAccess初探.docx

GoAccess初探

 real-timewebloganalyzer

一关于GoAccess3

1GoAccess是什么?

3

2特点3

3为什么用GoAccess3

4缺点4

geoip粒度太粗4

日期粒度太粗4

二GoAccess的安装4

1最新安装包的下载4

2需要安装的依赖4

2.1官方给出的相关依赖提示5

2编译安装5

2.1编译的参数5

3yum安装(我们选择这种方式)6

三GoAccess参数说明6

四GoAccess的使用8

五GoAccess对于access日志的自定义9

1如何自定义日志格式9

2官方自定义日志格式的参数9

2.1自定义参数及其对应nginx的accesslog中的fromat10

3根据我们的nginx的format自定义日志格式10

六真正分析access日志11

键盘操作:

12

七使用GoAccess生成报表及一些管道的应用12

八两个问题的调研13

1关于设备识别unknow的问题13

2没有找到对错误日志的分析方法16

一关于GoAccess

1GoAccess是什么?

GoAccess是一款开源工具,它可以实时地去分析web的log并且提供了在*nix系统上通过交互式窗口来运行查看,它通过可视化报表快速提供给系统管理员有价值的关于HTTP的统计信息。

2特点

可以将指定的weblog文件进行解析,通过终端把统计的数据展现出来

●生成统计数据,带宽统计等

●请求的时间(有利于查看慢的站点)

●最高访问

●请求的静态文件统计,例如图片,js,css等

●各个状态码的统计

●Host,反向DNS,ip所在地

●操作系统

●浏览器/蜘蛛

●引用的网站

●引用的URLs

●关键词组

●地理位置(大陆、国家、城市)

●可输出JSON或CSV

●各种的颜色主题

●支持大容量数据且支持大容量数据的持续分析

●支持IPv6

●可生成HTML报告

3为什么用GoAccess

GoAccess背后的主要思想是能够快速分析和查看web服务器统计数据,虽然可以生成一个HTML、JSON、CSV报告,默认情况下它输出终端,并且你还可以用到他更多的监控命令工具。

4缺点

geoip粒度太粗

它是使用机器自带的GeoIP,这个自带的77k左右的IP库只能判断出国籍,不能判断到城市。

呃,这个就意味着你的报表中有99%的IP统计是来自:

China。

你可以升级你的GeoIp,但是,付费。

网上有免费的GeoLiteCity.dat库,但是goaccess自身就不支持国籍-城市的分类,也不支持使用外部的IP库。

我能想到还有的办法就是用goaccess生成json,然后自己写python也好,php也好程序来加载城市的Ip库来解析地理位置。

然后再生成报表。

不过,这样,好像就不美了。

好消息是这个功能在ISSUE中有人提了,TODOLIST。

日期粒度太粗

日期只能粒度到天,如果需要统计一天每个小时的访问数据,就没法了。

也不是没办法,你可以先grep小时的数据,然后再用goaccess解析。

不过,这样,好像很挫。

好消息是这个功能在ISSUE中有人提了,TODOLIST。

二GoAccess的安装

1最新安装包的下载

通过http:

//goaccess.io/download可以下载到最新的tar包

2需要安装的依赖

yuminstallglib2glib2-develGeoIP-develncurses-devel

根据官方给出的提示,这里我们先安装好相应的依赖,以便日后的使用

2.1官方给出的相关依赖提示

Distro

NCurses

GLib>=2.0.0

GeoIP(optional)

TokyoCabinet(optional)

Ubuntu/Debian

libncursesw5-dev

libglib2.0-dev

libgeoip-dev

libtokyocabinet-dev

Fedora/RHEL/CentOS

ncurses-devel

glib2-devel

geoip-devel

tokyocabinet-devel

ArchLinux

ncurses

glib2

geoip

compilefromsource

Gentoo

sys-libs/ncurses

dev-libs/glib:

2

dev-libs/geoip

dev-db/tokyocabinet

2编译安装

1wgethttp:

//tar.goaccess.io/goaccess-0.9.2.tar.gz2tar-xzvfgoaccess-0.9.2.tar.gz3cdgoaccess-0.9.2/4./configure--enable-geoip--enable-utf85make6makeinstall

2.1编译的参数

--enable-debug

用于调试并且关闭编译器优化

--enable-utf8

用于支持更多的字符集,满足Ncursesw的需求

--enable-geoip

用于地理位置的支持.满足MaxMind'sGeoIP需求

--enable-tcb=

用于对memhash和btree的支持

--disable-zlib

在btee数据库上禁用zlib压缩

--disable-bzip

在btree数据库上禁用bzip压缩

3yum安装(我们选择这种方式)

先安装epel

Wgethttp:

//dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmwgetrpm-Uvhremi-release-6*.rpmepel-release-6*.rpm

安装GoAccess

yuminstallgoaccess-y

安装十分方便,到此就结束了

三GoAccess参数说明

goaccess-flog[-c][-r][-m][-h][-q][-d][-g][-a][-ocsv|json][-eIP_ADDRESS][...]

-a--agent-list

可以在host栏点击ip显示useragent如下图

-c--config-dialog

是否显示log和format配置对话窗口,也可以用于日后标准格式的调试,和重新设定格式

-d--with-output-resolver

生成json报表需要用到的参数

-e--exclude-ip

排除某个IP或者一个范围例如., 192.168.0.1-192.168.0.10

-f--log-file

用于解析日志文件,必加的参数

-g--std-geoip

支持标准的geoip

-h--help

帮助

-H--http-protocol

包含HTTP请求的协议,格式中已设定无需加此参数

-m--with-mouse

支持鼠标的点击,点击相当于键盘的回车操作

-M--http-method

包含请求的方法和当前的请求,以后的格式中已设定,无需此参数

-o--output-format

生成jsion和csv报表需要加此参数导出

-p--config-file

可以指定已经配置好格式的配置文件,优先于默认的格式

-q--no-query-string

忽略请求中疑问号后的query例如

=>

官方提示移除这个可以减少内存的消耗,根据需求而定

-r--no-term-resolver

禁止ip在终端上的显示

-s--storage

显示当前的存储算法

-h--help

命令行的帮助

-V--version

显示版本号

--444-as-404

视444code为404code

--ignore-panel=PANEL

忽略以下列出的数据

VISITORS

REQUESTS

REQUESTS_STATIC

NOT_FOUND

HOSTS

OS

BROWSERS

VISIT_TIMES

REFERRERS

REFERRING_SITES

KEYPHRASES

GEO_LOCATION

STATUS_CODES

--real-os

展示真实的操作系统。

在OperationSystem模块中,是否展示更详细的操作系统信息。

四GoAccess的使用

首次我们通过执行goaccess-faccess.log解析得到以下窗口

CommonLogFormat(CLF)此适用于apache标准日志

通用日志格式,例子:

127.0.0.1-frank[10/Oct/2000:

13:

55:

36-0700]"GET/apache_pb.gifHTTP/1.0"2002326主机用户身份作者[日期]"请求方法请求路径请求协议"状态码字节数

 NCSACommbinedLogFormat适用于nginx标准日志

这个是CommonLogFormat的扩展,例子:

125.125.125.125-dsmith[10/Oct/1999:

21:

15:

05+0500]"GET/index.htmlHTTP/1.0"2001043""Mozilla/4.05[en](WinNT;I)""USERID=CustomerA;IMPID=01234"主机用户身份作者[日期]"请求方法请求路径请求协议"状态码字节数referrer客户端代理cookie

需要注意的是

当空格选中模式的时候按回车会出现此报错,是由于你配置文档没有打开日志格式和日期格式的注释,或者说是有可能日志格式与系统给出的相应格式不符,系统无法读取

显然这里我们不能通过官方给出的标准格式来解析

五GoAccess对于access日志的自定义

1如何自定义日志格式

1.1可以通过-c的参数来调出上面系统自带的定义日志格式窗口,因为在你设置完日志格式后执行goaccess-faccess.log就不会再调出此窗口,只有首次执行才会调用,所以要通过-c参数

1.2我们可以通过修改/etc/, /usr/etc/ or /usr/local/etc/下的配置文件来进行自定义格式

Vim/etc/goaccess

按照上图,取消data-format和log-format的注释,定义自己的格式,或者自己加两行也可以

2官方自定义日志格式的参数

time_format在配置文件可以加入字段,后面加上时间的自定义参数,对时间格式做全局设置

date_format在配置文件可以加入此字段,后面加上日期的自定义参数,对日期格式做全局设置

log_format 在配置文件可以加入此字段,后面加上自定义的日志参数,对日志格式进行全局的设置

2.1自定义参数及其对应nginx的accesslog中的fromat

%x匹配替代time_format和date_format的设定,可以同时调用两个的全局设置

%t匹配替代time_fromat的设置

%d匹配替代date_format的设置

%h客户端ip$remote_addr

%r请求方法$request

%m请求算法相当于$request中的post或get的匹配

%U请求的URL路径(包括任何查询字符串)相当于$request中的URL匹配

%H请求的协议相当于$request中的HTTP/1.1

%s服务端返回客户端的状态code$status

%b返回客户端的bodysize$body_bytes_sent

%Rrefer$http_referer

%uuser-agent$http_user_agent

%D服务请求的时间,以微秒为单位$request_time

%T服务请求的时间,以秒为单位$request_time

%L服务请求的时间,以毫秒为单位$request_time

%^忽略官方没有对应参数的区域

以上是官方给出的所有匹配参数,原版见http:

//www.goaccess.io/man

3根据我们的nginx的format自定义日志格式

log_formatmain'$hostname$server_name$remote_addr-$remote_user[$time_local]"$request"'$status$body_bytes_sent"$http_referer"'

'"$http_user_agent""$http_x_forwarded_for""$upstream_addr"'

'"$upstream_response_time""$request_time""$http_cookie"';

例如:

以上为nginx中的format配置

根据nginx中的format信息和真实访问日志内容,得出以下自定义格式

date-format%d/%b/%Y

log-format%^%^%h%^[%d:

%^]"%r"%s%b"%R""%u""%^""%^:

%^""%^""%T""%^"

注意以上log-format每个参数之间有空格,跟真实访问日志中空格对应

下面对log-fomat后面匹配参数从左至右依次于nginx的format和真实日志内容进行对应

Log-fromat相应参数

Nginx相应format

%^

'$hostname

%^

$server_name

%h

$remote_addr

%^

-$remote_user

[%d:

%^]

[$time_local]

“%r”

"$request"

%s

$status

%b

$body_bytes_sent

“%R”

$http_referer

"%u"

$http_user_agent

"%^"

$http_x_forwarded_for

"%^:

%^"

$upstream_addr

"%^"

$upstream_response_time

"%T"

$request_time

"%^"

$http_cookie

date-format%d/%b/%Y对应的是14/Jul/2015

%^[%d:

%^]对应的是--[14/Jul/2015:

18:

13:

06+0800]这部分是官方默认配置方法

这里的%d调用的就是date-format格式

并且这里的匹配是官方默认方法,不用特意留意--:

+这些符号和空格

通过-c参数调出的官方日志设置窗口可以分析出这点

到此日志格式就定义完成了

六真正分析access日志

此时通过goaccess-flog日志名字直接可以分析,因为在配置文档设置过,不会再弹出之前官方的日志设置窗口,如果想弹出可以加-c参数

键盘操作:

⏹F1或h:

帮助

⏹F5 :

刷新主界面

⏹q:

退出程序/当前窗口/折叠当前模块

⏹o或Enter:

展开选中的模块或窗口

⏹0-9以及Shift+0:

将选中的模块或窗口激活

⏹k和j:

模块内部移动

⏹c:

修改配色

⏹^f和^b:

模块中上下滚屏

⏹tab shift+tab:

前后切换模块

⏹s:

模块内部排序选择

⏹/:

在所有模块中搜索(支持正则)

⏹n:

找到下个匹配

⏹g和G:

跳到第一项/最后一项

七使用GoAccess生成报表及一些管道的应用

使用GoAccess生成html报告:

goaccess-faccess.log-a>report.html

生成json报告:

goaccess-faccess.log-a-d-ojson>report.json

CSV:

goaccess-faccess.log-ocsv>report.csv

由于nginx会自动压缩日志,以下命令可以直接分析压缩后的日志:

1

2

3

zcataccess.log.*.gz|goaccess

#或者

zcat-faccess.log*|goaccess

一些其他关于管道的用法

zcataccess.log.1.gz|goaccess

让goaccess去分析已经打包压缩好的日志文件。

或者干脆分析目前下所有日志

zcataccess.log*|goaccess

如果需要分析某天的日志,例如10月5号那天的日志,我们让linux管道命令来大显身手

sed-n‘/05/Dec/2010/,$p’access.log|goaccess-s-b

分析从11月5号到12月5号一个月内的日志

sed-n‘/5/Nov/2010/,/5/Dec/2010/p’access.log|goaccess-s-b

当你不希望在服务器上安装goaccess程序,可以通过调用本地的goaccess程序来分析服务器上的日志

sshuser@server‘cat/var/log/apache2/access.log’|goaccess-s-a-b

可以排除某个IP或者一个列表的IP交给goaccess

grep-v"`catexclude_vhost_list_file`"vhost_access.log|goaccess

八两个问题的调研

1关于设备识别unknow的问题

此项应该是从user_agent判断,但是不清楚为什么识别不了ios

分别取出ios的总数和android总数

(ios)68494+(android)17292=85786

用68494/85786=79%

与报表中计算基本相似,没导致完全准确可能是由于下面截图导致

我对这列进行过滤发现会出现一些(linux;字段

专门对一条包含IOS的accesslog进行分析

日志内容如下:

XXXXXXXXXXXX.comXXXXXXXXXXXXX117.136.60.57--[14/Jul/2015:

18:

00:

01+0800]"GET/urlHTTP/1.1"2001483"-""ios""-""XX.XX.XX.XX""0.017""0.017""XXXXXXXXXXXXXXXXXXXXXXXXX"

结果仍然是

说明跟上面提到的Linux字段没有关系,goaccess无法识别

然后再单独查看安卓字段的日志

日志内容如下:

XXXXXXXXXXXX.comXXXXXXXXXXXXX117.136.60.57--[14/Jul/2015:

18:

00:

01+0800]"GET/urlHTTP/1.1"2001483"-""ios""-""XX.XX.XX.XX""0.017""0.017""XXXXXXXXXXXXXXXXXXXXXXXXX"

结果

可以分析出安卓

Goaccess基本没什么详细文档,官方也没明确说法

这是我在issue查到一个相关的问题,如下图

2没有找到对错误日志的分析方法

我首先用分析访问日志方法去匹配超时的那种errorlog

%d%t[%^]%^#%^:

*%^%^,%^:

%h,%^:

$^,%^:

"%r",%^:

"%R",%^:

"%^"

这样是不成功的,然后我分析访问日志没逗号,我把逗号全部去掉也不行

然后我再以空格为分隔,所有未知区域用%^代替,还是不成功的,

然后我逐次去掉不同的符号去匹配也是不成功,然后就有了下面的想法

如果用errorlog去拼凑accesslog

首先accesslog的解析是没问题的

log-format%^%^%h%^[%d:

%^]"%r"%s%b"%R""%u""%^""%^:

%^""%^""%T""%^"

我把后面都删除只剩下log-format%^%^%h%^[%d:

%^]

想试试goaccess有没有那么智能,只要匹配上正确的就能解析,显然不行

然后我又用这种方式log-format%^%^%h%^[%d:

%^]%^

在后面加上了一个%^看看能不能全部匹配上后面的内容,显然还是不行

然后我又尝试

log-format%^%^%h%^[%d:

%^]"%^"%^%^"%^""%^""%^""%^:

%^""%^""%^""%^"

后面全部用%^忽略每个区域,数量都是对上的,但是显然还是不行

由此判断它对日志的分析有自己的一套格式,对于匹配要求很高

最后我把errorlog的所有未知区域都去掉,最小化分析

2015/07/1719:

10:

2061.158.152.98

"POST/Utility/PVCounter.apiHTTP/1.1""http:

//10.10.30.65:

80/Utility/PVCounter.api"

log-format%d%H:

%M:

%S%h"%r""%^"

还是没有成功

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文学研究

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1