Web日志分析工具goaccess使用参考
2011-02-14 13:30:47 阿炯

本站赞助商链接,请多关照。 GoAccess 是一个采用C语言开发的来分析统计Web服务器的访问日志的工具,速度非常快,可即时生成自定义的统计报表,基于命令行操作。

相关特征:
* General Statistics, bandwidth etc.(通用的信息的统计,带宽等)
* Top Visitors(每天的访问者)
* Requested files(文件请求统计)
* Requested static files, images, swf, js, etc.(相关静态文件的统计信息)
* Referrers URLs(从其它url过来的链接请求)
* 404 or Not Found(未找到)
* Operating Systems(操作系统信息)
* Browsers and Spiders(浏览器和蜘蛛信息)
* Hosts, Reverse DNS, IP Location(主机及ip信息)
* HTTP Status Codes(http响应码统计)
* Referring Sites(推介网站)
* Keyphrases(关键字)
* Different Color Schemes(不同的颜色界面可供选择)
* Unlimited log file size(不限日志文件大小)

GoAccess can parse both of Apaches' log formats, the Common Log Format (CLF) and the Combined Log Format (XLF/ELF), including virtual host. It is possible to parse Nginx as well. (if configured with the standard Apache log format)

安装:
在其下载页面上有其在多种操作系统的安装方法:Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package.

可以通过编译指令'./configure; make; make install'来安装配置。而在debian 6下可能通过apt-get来安装完成。

* GeoIP is optional, if you need it, you can pass --enable-geoip to ./configure
* 如果需要地理信息,可以通过为'./configure'加入'--enable-geoip'参数

* UTF-8 support, can be enabled with ./configure --enable-utf8 (ncursesw is required)
* 同样可以通过加入参数 '--enable-utf8'来开启utf8支持。在分析日志时,要查看中文字符时,这个是必须的,同时也要安装'ncursesw'库的支持。

安装相关依赖库:
# apt-get install geoip-bin libgeoip-dev libgeo-ip-perl
# apt-get install libglib2.0-dev
# apt-get install libncursesw5-dev

编译
debian:~/software/goaccess-0.4.2# ./configure --prefix=/usr --enable-geoip --enable-utf8
# make
# make install

使用:

goaccess  - fast log analyzer and interactive viewer for the Apache web server(可交互式的快速日志分析器)

概要
goaccess [-f input-file ] [-b] [-s] [-e]

描述
goaccess is a free (MIT) real-time Apache web log analyzer and interac-tive  viewer that runs in a terminal in *nix systems. It provides fast and valuable HTTP statistics for system administrators that require a visual server report on the fly. First it will parse the access log file, then it will collect data from the parsed file and it  will display it to the console or the X terminal. The collected information will be displayed to the user in a visual/interactive window. The collected information includes:

General Statistics:
Total number of invalid requests, Total time to analyze the data, Total unique visitors,Total unique requested files, Total unique static files (css,ico,jpg,js,swf,gif,png) Total unique HTTP referrers (URLs),Total unique 404s (not found), Size of the parsed log file,Total bandwidth consumption.

所有有效的请求,分析数据所花费的时间,独立的访问者,所请求的所有文件,所请求的静态文件,所有从其它url过来的链接请求,所有独立的404错误,日志文件大小,所使用的带宽。

Unique visitors:
HTTP requests having the same IP, same date and same agent will be considered a unique visit.(including crawlers).

从同一个ip、日期、浏览器过来的访问会被认为是一次请求。

Requested files
The totals are based on unique requested files. This is based on the premise that HTTP requests having the same IP, same date and same agent will be considered a unique visit.

从同一个ip、日期、浏览器过来的访问会被认为是一次文件请求。

Requested static files
The totals are based on unique requested files.Includes files such as: jpg, css, swf, js, gif, png etc. Unique requests are based on the premise that HTTP requests having the same IP, same date and same agent will be considered a unique visit.

同上。

Referrers URLs
The URL where the request came from. Totals are not based on the above premise, but instead, based on the total number of requests.

从那些页面跳转过来的,通常为主要的搜索引擎。

404 or Not Found
The total number is based on total requests.

相关页面404错误计数。

Operating Systems
The total number is based on unique visitors.

访问者所使用的操作系统计数。

Browsers
The total number is based on unique visitors.

访问者所使用的浏览器计数。

Hosts 
The total number is based on total requests. for  each IP can display extra information for the  particular host, including reverse dns, and geolocation of the IP.

访问者ip地址及点击计数。

HTTP Status Codes
Totals  are based on total requests.

http状态码计数。

Referring Sites
This module will display only the host but not the whole URL.The total number is based on total requests.

从那些主机来到本站的计数,注意,不是url。

Keyphrases
This module will report keyphrases used on Google search, Google cache, and Google translate.  The total number is based on total requests. 

用于从搜索引擎到本站的关键词,新版本里已经将其移除。

选项
-b     Enable total bandwidth consumption. To achieve faster parsing,do not enable this flag.This has been disabled by default.(默认选项,计算带宽用量)

-f     input-file Path to input log file.(日志文件路径)

-s     Enable HTTP response status codes report. To avoid overhead while parsing, this feature has been disabled by default.(默认选项,http 状态码报告)

-e     Exclude an IP from being counted under the HOST module.(排除的IP被计算在主机模块中)


可以通过命令行提供以下选项,也可以通过配置文件提供长选项。

日志/日期/时间格式
--time-format
时间格式变量后跟空格,指定包含常规字符和特殊格式说明符的任意组合的日志格式时间。它们都以百分比(%)开头。见man strftime。%T或%H:%M:%S。

--date-format
日期格式变量后跟空格,指定包含常规字符和特殊格式说明符的任意组合的日志格式日期。它们都以百分号(%)开头。见man strftime。

--log-format
log-format变量后跟空格或\t制表符分隔,指定日志格式字符串。

除了指定原始日志/日期/时间格式之外,为简单起见,可以将以下任何预定义的日志格式名称提供给日志/日期/时间格式变量。GoAccess还可以在一个变量中处理一个预定义名称,在另一个变量中处理另一个预定义名称。

合并| 组合日志格式
VCOMBINED | 组合日志格式与虚拟主机
COMMON | 通用日志格式
VCOMMON | 虚拟主机
W3C的通用日志格式| W3C扩展日志文件格式
SQUID | 原生Squid日志格式
CLOUDFRONT | Amazon CloudFront Web Distribution
CLOUDSTORAGE | Google云端存储
AWSELB | Amazon Elastic Load Balancing
AWSS3 | 亚马逊简单存储服务(S3)
注意:通常需要围绕包含空格,逗号,管道,引号和/或括号的值的引号。内部必须转义。


交互式菜单
F1     Main help.(帮助菜单)

F5     Redraw main window.(重绘主窗口)

q      Quit the program or the current.(退出当前窗口)

o      Open a window for the current active module.(在当前模块开启详细查看窗口)

c      set or change scheme color.(更改颜色方案)

TAB    Forward iteration of modules. Starts from current active module.(从当前模块跳到下一个模块)

SHIFT + TAB
Backward    iteration of modules. Starts from current active module.(从当前模块跳到上一个模块)

RIGHT ARROW
Open a window for the current active module.(打开当前模块的查看窗口)

0-9    Activate module so the user can open with either ^o^ or ^RIGHT ARROW^.(激活0-9的模块)

SHIFT + 0-9
Activate module above 10.(激活10以上的模块)

s      Sort  unique visitors by date. This will only work on the Unique visitors module(1).(仅在独立访问者模块有效,按日期对访问者排序)

S      Sort unique visitors by hits. This will only work on the Unique visitors module(1).(仅在独立访问者模块有效,按点击量对访问者排序)

/      Search forward on any window for the occurrence of typed pattern.(在当前窗口中进行搜索)

n      Find the position of the next occurrence on any window.(任何窗口中查找下一个出现的位置)

t      Move to the first item on any window.(将当前位置移至窗口的首行)

b      Move to the last item on any window.(将当前位置移至窗口的尾行)

示例

# goaccess -f access.log

这将生成一个可交互的文本输出,可以通过下面命令来生成完成统计:

# goaccess -f access.log -s -b

'-s'标志告诉GoAccess去处理每一个HTTP状态代码。
'-b'标志将处理的文件,主机和日期总带宽消耗情况。

现在,如果我们想得到更多的灵活性,可以通过管道来实现。例如:如果我们想处理所有access.log.*.gz,我们可以这样做:

#  zcat access.log.*.gz | goaccess

#  zcat -f access.log* | goaccess

另一种有用的方法是利用管道将筛选出的Apache的访问日志的日期,直到文件结束,以下将获得05/Dec/2010所有HTTP请求开始。
# sed -n '/05\/Dec\/2010/,$ p' access.log | goaccess -s -b

如果要分析一个只有从DATE一定的时限为DATE B,我们可以做:
sed -n '/5\/Nov\/2010/,/5\/Dec\/2010/ p' access.log | goaccess -s -b

请注意,这可能需要更长的时间来分析,这取决于sed的速度。

此外值得指出的是,如果要运行在低优先级GoAccess,可以这样操作:
# nice -n 19 goaccess -f access.log -s -a -b

备注
On each window, the total number of items is 300.(在每打开的新窗口中,共计会有300条记录。)

Piping a log to GoAccess will disable the real-time functionality. This is due to the portability issue on determining the actual size of STDIN. However, a future release *might* include this feature.(通过管道来对日志分析时实时功能将不可用,这是因为在确定的STDIN实际大小的便携性问题。但将来的版本可能会包含这个功能。)


自定义日志/日期格式
GoAccess几乎可以解析任何Web日志格式。

预定义选项包括通用日志格式(CLF),组合日志格式(XLF / ELF),包括虚拟主机,W3C格式(IIS)和Amazon CloudFront(下载分发)。

常规统计:此面板提供了几个指标的摘要,其中一些是:有效和无效请求的数量,分析数据集所花费的时间,唯一访问者,请求的文件,静态文件(CSS,ICO,JPG等)HTTP引用,404,已解析日志文件的大小和带宽消耗。

唯一身份访问者:此面板显示点击次数,唯一身份访问者和每个日期的累积带宽等指标。包含相同IP,相同日期和相同用户代理的HTTP请求被视为唯一访问者。默认情况下,它包括网络爬虫/蜘蛛。(可选)可以使用--date-spec = hr将日期特异性设置为小时级别,这将显示日期,例如05/Jun/2016:16。如果想跟踪小时级别的每日流量,这非常棒。

请求的文件:此面板显示Web服务器上请求最多的文件。它显示了匹配,唯一身份访问者和百分比,以及累积带宽,协议和使用的请求方法。

请求的静态文件:列出了最常用静态文件,如:JPG,CSS,SWF,JS,GIF,和PNG文件类型,使用相同的指标作为最后的面板一起。可以将其他静态文件添加到配置文件中。

404或未找到:显示与先前请求面板相同的指标,但是,其数据包含服务器上未找到的所有页面,或通常称为404状态代码。

操作系统:此面板将报告主机在到达服务器时使用的操作系统。它试图提供每个操作系统的最具体版本。

浏览器:此面板将报告主机在到达服务器时使用的浏览器。它试图提供每个浏览器的最具体版本。

访问时间:此面板将显示每小时报告。此选项显示24个数据点,每天一小时一个。

虚拟主机:此面板将显示从访问日志中解析的所有不同虚拟主机。如果在日志格式字符串中使用%v,则会显示此面板。

推荐人网址:如果相关主机通过其他资源访问了该网站,或者是从其他主机链接/转移给您,则会在此面板中提供他们引用的网址。请参阅--ignore-panel配置文件以启用它(默认禁用)。

引用站点:此面板仅显示主机部分,但不显示整个URL。请求来自的URL。

关键字:它报告用于Google搜索,Google缓存和Google翻译的关键字,这些关键字已经导致您的网络服务器。目前,它仅通过HTTP支持Google搜索查询。请参阅--ignore-panel配置文件以启用它(默认禁用)。

地理位置:确定IP地址在地理位置的位置。统计数据按大陆和国家分列。它需要使用GeoLocation支持进行编译。

HTTP状态代码:HTTP请求的数字状态代码的值。

远程用户(HTTP身份验证) 这是HTTP身份验证确定的请求文档的人员的用户ID。如果文档没有密码保护,则此部分将为"-",就像前一个部分一样。除非%e在log-format变量中给出,否则不会启用此面板。

注意:可选,如果已配置,所有面板都可以显示为请求提供服务所需的平均时间。

存储:GoAccess可以使用三种存储选项供选择,将取决于环境和需求。

默认哈希表
内存存储以将数据集大小限制为可用物理内存量为代价提供更好的性能。默认情况下,GoAccess使用内存中的哈希表。如果您的数据集可以适合内存,那么这将表现良好。它具有非常好的内存使用和相当不错的性能。

Tokyo Cabinet On-Disk B+ Tree
将此存储方法用于大型数据集,其中无法将所有内容都放在内存中。B+树数据库比任何哈希数据库都要慢,因为必须将数据提交到磁盘。但是,使用SSD可以大大提高性能。如果需要数据持久性以便在以后快速加载统计信息,也可以使用此存储方法。Tokyo Cabinet内存哈希数据库是默认哈希表的替代方法。它使用泛型类型,因此它在内存和速度方面的性能是平均的。


GoAccess也允许任何自定义格式字符串。

有两种方法可以配置日志格式。最简单的方法是运行GoAccess -c以提示配置窗口。但这不会使其永久化,需要在配置文件中指定格式。

配置文件位于:%sysconfdir%/goaccess.conf或~/.goaccessrc

注意 %sysconfdir%是 /etc/,/usr/etc/或/usr/local/etc/

time-format时间格式变量后跟空格,指定包含常规字符和特殊格式说明符的任意组合的日志格式日期。它们都以百分比(%)开头。见man strftime,%T或 %H:%M:%S。

注意:如果以微秒为单位给出时间戳,则%f必须将其用作时间格式

date-format日期格式变量后跟空格,指定包含常规字符和特殊格式说明符的任意组合的日志格式日期。它们都以百分比(%)开头。见man strftime。

注意:如果以微秒为单位给出时间戳,则%f必须将其用作日期格式

log-format log-format变量后跟空格或\t制表符分隔,指定日志格式字符串。

操作符说明
%x    与时间格式和日期格式变量匹配的日期和时间字段。当给出时间戳而不是日期和时间在两个单独的变量中时使用。
%t    时间字段匹配时间格式变量。
%d    与日期格式变量匹配的日期字段。
%v    服务器名称根据规范名称设置(服务器块或虚拟主机)。
%e    这是HTTP身份验证确定的请求文档的人的用户标识。
%h    host(客户端IP地址,IPv4或IPv6)
%r    来自客户端的请求行。这需要围绕请求的特定分隔符(单引号,双引号等)可解析。否则,使用特殊的格式说明符,如组合%m,%U,%q和%H解析各个字段。
注意:使用或者%r获得完整的请求OR %m,%U,%q并%H形成你的要求,不要同时使用。
%m    请求方法。
%U    请求的URL路径。
注意:如果查询字符串在%U,则无需使用%q。但是,如果URL路径不包含任何查询字符串,则可以使用%q并将查询字符串附加到请求中。
%q    查询字符串。
%H    请求协议。
%s    服务器发送回客户端的状态代码。
%b    返回给客户端的对象大小。
%R    "Referer" HTTP请求标头。
%u    用户代理HTTP请求标头。
%D    服务请求所需的时间,以微秒为单位。
%T    服务请求所需的时间,以毫秒为单位,分辨率为毫秒。
%L    服务请求所用的时间,以毫秒为单位的十进制数。
%^    忽略此字段。
%~    向前移动日志字符串,直到找到非空格(!isspace)char。
~h    X-Forwarded-For(XFF)字段中的主机(客户端IP地址,IPv4或IPv6)。

注意:对于XFF,GoAccess使用一个特殊的说明符,它由主机说明符之前的波浪号组成,后跟分隔XFF字段的字符,这些字符用花括号括起来(即~h{,"})。
例如,~h{," }用于解析 "11.25.11.53, 17.68.33.17"由双引号,逗号和空格分隔的字段。
注意:为了获得GoAccess中提供的平均,累积和最长时间,您需要在Web服务器中开始记录响应时间。在Nginx中,您可以添加$request_time到日志格式或%DApache中。
要点:如果同时使用多个时间服务说明符,则格式字符串中指定的第一个选项将优先于其他说明符。


比如我的Nginx日志格式定义如下:
$remote_addr - $http_x_forwarded_for - $request_time - $upstream_cache_status - $remote_user - [$time_iso8601] - "$request" - $status - $body_bytes_sent - "$http_user_agent" - $http_referer - $upstream_addr - $upstream_response_time - $upstream_status


1.2.3.4 - - - 0.000 - - - - - [2022-09-10T00:01:01+08:00] - "POST /smsplanservice/freeoa/stateByCU HTTP/1.1" - 301 - 162 - "Java/1.8.0_301" - - - - - - - -

自定义一下配置文件(freeoa.conf):
time-format %H:%M:%S
date-format %Y-%m-%d
log-format %h - %^ - %^ - %^ - %^ - [%dT%t+%Z] - "%m %U %H" - %s - %b - %u - %R - %^ - %^ - %^

对日志文件按指定的配置文件中所定义的选项进行分析,并将结果保存于网页之中
goaccess -p freeoa.conf -f ~/80443.access_2022-09-10.log -o freeoa.html