日志分析goaccess-nginx

yum install glib2 glib2-devel ncurses-devel -y  && yum groupinstall -y 'Development Tools'

wget http://tar.goaccess.io/goaccess-0.8.5.tar.gz

tar -xvzf goaccess-0.8.5.tar.gz  && cd goaccess-0.8.5/ && ./configure --enable-utf8  && make && make install 

/usr/local/bin/goaccess -f /usr/local/nginx/logs/ac.log

===================================================

 

 

https://www.axivo.com/resources/goaccess-settings-for-nginx.17/

GoAccess Settings for Nginx

Real-time web log analyzer and interactive viewer

  1. GoAccess is an open source real-time web log analyzer and interactive viewer that runs in a terminal in Linux systems. It provides fast and valuable HTTP statistics for system administrators that require a visual server report on the fly.

    Start by installing the RPM from AXIVO repository:
    # yum --enablerepo=axivo install goaccess
    For Nginx only, replace the following variables:
    # sed -i 's|^#date-format.*|date-format %d/%b/%Y|' /etc/goaccess.conf
    # sed -i 's|^#log-format.*|log-format %h %^[%d:%^] %^ "%r" %s %b "%R" "%u"|' /etc/goaccess.conf
    Process a regular or compressed log file (with zcat), by running the following command:
    # goaccess -f /var/log/nginx/localhost.access.log
    # zcat -f /var/log/nginx/localhost.access.log-20140819.gz | goaccess
    You are now ready to visualize any Nginx access log statistics.

    Log Format Variables Explained
    We have a custom Nginx log format, so chances are you also do on your server. This is the log format we are currently using at AXIVO:
    log_format    main    '$remote_addr - $remote_user [$time_local] $upstream_cache_status '
                          '"$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
    We used the following GoAccess variables:
    Nginx Variable                            GoAccess Variable
    $remote_addr                              %r
    $remote_user                              %^ (ignored)
    $time_local                               %d:%^
    $upstream_cache_status                    %^ (ignored)
    $request                                  %r
    $status                                   %s
    $body_bytes_sent                          %b
    $http_referer                             %R
    $http_user_agent                          %u
    Take a look at man goaccess for a detailed list of other useful settings and variables.

    If you want to enable GeoIP statistics, install the GeoIP-update package and enable geoip-city-dataoption into GoAccess configuration file:
    # sed -i 's|^#geoip-city-data|geoip-city-data|' /etc/goaccess.conf
    You should be all set to pull valuable data on the fly, from your server logs.
 
 
http://adslroot.blogspot.jp/2013/12/goaccess-nginx-accesslog.html

使用 goaccess 分析 nginx access.log

 

​不需要很强大,只需要够用。
安装,今天刚好赶上一个新版本的发布:
$ yum -y install glib2 glib2-devel ncurses ncurses-devel GeoIP GeoIP-devel
$ wget http://downloads.sourceforge.net/project/goaccess/0.7/goaccess-0.7.tar.gz
$ tar -xzvf goaccess-0.7.tar.gz
$ cd goaccess-0.7/
$ ./configure --enable-geoip --enable-utf8 
$ make
# make install
因为access 的format 不一样,所以需要修改一下, 我这里默认的 NCSA 也对不上,看看我的nginx 的 access log format:
 
    log_format  main  '$remote_addr $http_host $upstream_addr [$time_local] $request '
                      '"$status" $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" "$request_time"';
眼睛看了老半天,终于按空格对上号了(部分字段由于中间有空格,但是没有引号,所以又被多算了一列), vim ~/.goaccessrc:
date_format %d/%b/%Y
log_format %h %^ %^ %^[%d:%^] %^ %r %^ "%s" %b "%R" "%u" "%^" "%D"
 
上面这个保存为文件,就不用每次去按照下面的提示按 C 去修改了。(至于每个字段的含义,可以去官方查询,另外发现有些是没有,
也有可能是我没发现,比如 $upstream_addr, $http_x_forwarded_for, 没有暂时用 %^ 啰)
 
然后就是执行命令
$goaccess -f access.log
可以重定向输出为 csv 格式或者 html 格式,罗列的各种 top 分析比较清晰。
 
ps: 不足之处,缺少 hourly 的支持,比如我的想要对比相邻几个小时内的访问情况,来分析异常请求,这个在作者 github 上有个 issue,
     希望能够早点实现。
https://github.com/allinurl/goaccess/issues/8



http://www.cnblogs.com/yjf512/p/3640346.html


面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记忆能力以外,唯一的作用只有装A或者装C了。

对于nginx日志分析,有很多工具,衡量好坏的标准大概就是三快:安装快,解析快,上手快。满足这三点的goaccess确实是居家必备良药。

话说这个标题其实有点委屈GoAccess了,它是一个日志分析工具,并不只是为nginx使用的。你也可以用它来分析apache,IIS的日志,甚至你自己写的web服务,当然前提是你需要定义好解析的日志格式。诚如见到一个美女,你会一眼喜欢上它的几个功能有:

1 解析速度快

2 使用简单

3 能生成html,json,csv

安装GoAccess

如果你是centos,使用yum:

yum install goaccess

如果你的yum找不到goaccess,就先安装epel

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm

 

GoAccess有两种使用方法,一种是直接在控制台显示和操作。

当你要立马分析出今天早上10点到12点的IP访问情况的时候,直接在控制台敲命令是最快的。

另外一种就是生成html文件或者数据文件。

如果你希望每天管理的服务器集群能给你发送一个昨天访问日志的情况,这个就是不二选择了。

控制台使用GoAccess

goaccess的参数:

-f <input-file> : 需要解析的日志文件

-a --agent-list : 在host模块是不是能点击IP出现这个IP的user-agentlist,就是出现如图的功能

Image

-c --conf-dialog: 是否显示log和format配置对话窗口。

就是下面的这个窗口

Image(1)

这个窗口有很多可以研究的。

 

首先,goaccess支持的日志格式有哪些?

Common Log Format (CLF)

通用日志格式,例子:

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326

主机   用户身份 作者 [日期] "请求方法  请求路径 请求协议" 状态码 字节数

 NCSA Commbined Log Format

这个是Common Log Format的扩展,例子:

125.125.125.125 - dsmith [10/Oct/1999:21:15:05 +0500] "GET /index.html HTTP/1.0" 200 1043 "http://www.ibm.com/" "Mozilla/4.05 [en] (WinNT; I)" "USERID=CustomerA;IMPID=01234"

主机 用户身份 作者 [日期] "请求方法 请求路径 请求协议" 状态码 字节数 referrer 客户端代理 cookie

 W3C

IIS 4.0和5.0是使用这种格式的,例子如下:

复制代码
#Software: Microsoft Internet Information Server 4.0

#Version: 1.0

#Date: 1998-11-19 22:48:39

#Fields: date time c-ip cs-username s-ip cs-method cs-uri-stem cs-uri-query sc-status sc-bytes cs-bytes time-taken cs-version cs(User-Agent) cs(Cookie) cs(Referrer)

1998-11-19 22:48:39 206.175.82.5 - 208.201.133.173 GET /global/images/navlineboards.gif - 200 540 324 157 HTTP/1.0 Mozilla/4.0+(compatible;+MSIE+4.01;+Windows+95) USERID=CustomerA;+IMPID=01234 http://yourturn.rollingstone.com/webx?98@@webx1.html
复制代码

 CloudFront

AWS上的日志格式

自定义格式

关于自定义格式所设置的参数说明在这里

 

-d --with-output-resolver 在HTML输出或者json输出中开启IP 解析

如果开启了-d,goaccess就会使用GEOIP来进行IP解析。

-e --exclude-ip=<ip address>

Host模块中不需要被统计的IP,比如可以将爬虫的IP过滤掉

-h --help 帮助文档

-H --http-protocol 显示的时候是否带上HTTP协议信息

-m --with-mouse 控制面板开启支持鼠标点击,带上了m之后,双击鼠标就相当于回车的操作

-M --http-method 是否带上HTTP方法信息

-H和-M带上之后效果为:

Image(2)

-o --output-format=csv|json 输出为csv或者json形式

-p --conf-file=<filename>

指定配置文件,如果你有配置文件,配置文件中又恰巧设置了log-format和date,那么你就不会被强制进入到format对话框了。如果你没有设置的话,默认使用~/.goacessrc。

-q --no-query-string

忽略请求的参数部分

-r --no-term-resolver

在Host模块中是否进行IP的解析。加上-r是禁止IP解析。

--no-color

输出无颜色标示

--real-os

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

如图:

Image(3)

下面说说的是控制台的键盘操作:

F1是打开帮助文档

F5是刷新当前窗口

q是退出当前窗口,直到退出程序

o是进入选择条目

0-9 是选择模块

tab和shift+tab是在前后模块之前切换

j和k是在模块内部条目切换

s是模块内部条目排序方式

 

ps:模块切换在右上角有当前模块的标示

 

使用GoAccess生成文件

说起GoAccess最让你爽的就是能生成html了,然后每天就可以看个统计报表。

下面的命令能生成html页面:

goaccess -d -f web.log -a -p /home/yejianfeng/.goaccessrc > test.html

 

生成的html的截图如下:

Image(5)

也可以生成json:

goaccess -q -f web.log -a -p /home/yejianfeng/.goaccessrc -o json >test.json

 

和csv

goaccess -q -f web.log -a -p /home/yejianfeng/.goaccessrc -o csv>test.csv

 

等等,还缺点什么?

正如文章,人无完人,工具无完美工具,goaccess也有几个让人不够爽的地方

geoip粒度太粗

它是使用机器自带的GeoIP,这个自带的77k左右的IP库只能判断出国籍,不能判断到城市。呃,这个就意味着你的报表中有99%的IP统计是来自:China。你可以升级你的GeoIp,但是,付费。网上有免费的GeoLiteCity.dat库,但是goaccess自身就不支持国籍-城市的分类,也不支持使用外部的IP库。

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

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

日期粒度太粗

日期只能粒度到天,如果需要统计一天每个小时的访问数据,就没法了。也不是没办法,你可以先grep小时的数据,然后再用goaccess解析。不过,这样,好像很挫。

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

 

所以说....TODO LIST真是个好东西,是吧。另外,本文的goaccess使用v0.7.1。

 

 

http://my.oschina.net/mrco/blog/181737

非常小又精悍的 Nginx 日志分析工具 Goaccess,处理速度非常快,我用 XShell 查看,还可以生成 html 报告,先看图

最佳 Nginx 日志分析工具 GoAccess   Best Nginx log analyzer a0266da1ac649a3a最佳 Nginx 日志分析工具 GoAccess   Best Nginx log analyzer 3a966303ef6baaf7最佳 Nginx 日志分析工具 GoAccess   Best Nginx log analyzer 4a9096e679782f92

最佳 Nginx 日志分析工具 GoAccess   Best Nginx log analyzer 9a8e462964e4da52最佳 Nginx 日志分析工具 GoAccess   Best Nginx log analyzer 39ca1719fc1c0c9c最佳 Nginx 日志分析工具 GoAccess   Best Nginx log analyzer 639a4ff93e05e519

GoAccess 在 CentOS 上的安装方法:
1. 需要安装 GeoIP, ncurses, glib2, 一句搞定
yum -y install glib2 glib2-devel ncurses ncurses-devel geoIP geoIP-devel

2. 下载 GoAccess 解压编译安装

# wget http://jaist.dl.sourceforge.net/project/goaccess/0.6.1/goaccess-0.6.1.tar.gz 
# tar zxvf goaccess-0.6.1.tar.gz 
# cd goaccess-0.6.1 
# ./configure –enable-geoip –enable-utf8 
# make && make install 
# make clean

 

3. GoAccess 使用方法
进入 Nginx 日志所在目录

命令行直接查看

# goaccess -f access.log -c -a

出来图了,日志格式选 NCSA
最佳 Nginx 日志分析工具 GoAccess   Best Nginx log analyzer 03a6e8d1142c6916

也可以生成 HTML 报告

goaccess -f /var/log/nginx/access.log -a > report.html
zcat -f /var/log/nginx/access.log* | goaccess -a > report.html
zcat access.log.1.gz | goaccess
 

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

zcat access.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程序来分析服务器上的日志(很神奇吧^_^):

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

 

最让我兴奋的功能是goaccess支持排序!这样你就可以tab到request这个模块,而后按s,
跳出来的对话框选择“Time Serverd”  “DESC”  这样你就可以非常清楚的知道你的网站是哪些页面响应很慢了!
 

附下我的NGINX日志格式:

log_format  main  ’$remote_addr – $remote_user [$time_local] “$request” ‘

            ‘$status $body_bytes_sent “$http_referer” ‘
            ‘”$http_user_agent”   $request_time‘;
 
 
 
再附下我的~/.goaccessrc配置:

color_scheme 0
date_format %d/%b/%Y
log_format %h %^[%d:%^] “%r” %s %b “%R” “%u” %T

 
============================================================================================
goaccess高级设定:

for Apache HTTP Server 预设设定:

CustomLog logs/access_log common可选Common Log Format (CLF)
CustomLog logs/access_log combined可选NCSA Combined Log Format

for Lighttpd mod_accesslog预设格式 : (需于GoAccess设定画面手动编辑Log Format)

Log Format: %h %^ %^ [%d:%^] “%r” %s %b “%R” “%u”
Date Format: %d/%b/%Y

完成设定后产生~/.goaccessrc,日后执行goaccess -f /var/log/httpd/access_log不会再跳出这个设定画面;若要修改设定,可加上-c参数,例如: goaccess -c -f / var/log/httpd/access_log或直接编辑设定档案vi ~/.goaccessrc

基本操作

# goaccess -f /var/log/httpd/access_log

t:回到顶端
b:卷到最末
q:关闭视窗或离开程式
上下方向键:卷动画面
数字键0 ~ 9,接着按英文字母o或右方向键:查看某项目的细节(*注)

*注: 0 表示第十项; Shift + 1 表示第十一项

排除统计某来源IP 
# goaccess -e 123.123.123.123 -f /var/log/httpd/access_log

检视Host详细资料的时候显示来自该Host的User-Agents资讯
# goaccess -a -f /var/log/httpd/access_log

产生HTML报表(静态报表) 
# goaccess -a -f /var/log/httpd/access_log > result.html

只统计来自某IP的记录
# grep ^123.123.123.123 /var/log/httpd/access_log | goaccess

注:目前GoAccess无法即时统计pipe进来的资料,日后改版或许会补强这部份(Ref: man goaccess )

Trouble Shooting

无法使用F1 检视help 讯息的替代方案

Ctrl + h

无法使用F10 完成设定画面的替代方案

# vi ~/.goaccessrc

color_scheme 1
date_format %d/%b/%Y
log_format %h %^ %^ [%d:%^] "%r" %s %b "%R" "%u"

其他log_format 参考:

Common Log Format (CLF): %h %^[%d:%^] "%r" %s %b
Common Log Format (CLF) with Virtual Host: %^:%^ %h %^[%d:%^] "%r" %s %b
NCSA Combined Log Format: %h %^[%d:%^] "%r" %s %b "%R" "%u"
NCSA Combined Log Format with Virtual Host: %^:%^ %h %^[%d:%^] "%r" %s %b "%R" "%u"
W3C: %d %^ %h %^ %^ %^ %^ %r %^ %s %b %^ %^ %u %R

变更热键

# cd /path/to/goaccess-0.5

# vi goaccess.c

#将F1热键改为F2
找到[F1]Help [O]pen detail view 
改为[ F2 ]Help [O]pen detail view

找到Case 265: 
改为Case 266 :

# vi commons.c

#将Help讯息的F1改为F2
找到” ^F1^ or ^CTRL^ + ^h^ [main help]“, 
改为” ^ F2 ^ or ^CTRL^ + ^h^ [main help]“,

# vi goaccess.1

#将manpage的F1字眼改为F2
找到.IP “F1″ 
改为.IP “ F2 ”

# vi settings.c

#将F10热键改为F9
找到mvwprintw (win, 2, 2, “[SPACE] to toggle – [F10] to proceed”); 
改为mvwprintw (win, 2, 2, “[SPACE] to toggle – [ F9 ] to proceed”);

找到Case 274: 
改为Case 273 :

 

 
 
http://siwei.me/blog/posts/analyze-nginx-log-using-goaccess

使用 goaccess分析nginx日志(analyze Nginx log using GoAccess)

2014-04-13 20:41分类: 技术

nginx 日志无法用rails-request-analyzer 来分析。 需要使用 goaccess 。 因为前者一分析就死机,后者速度更快,分析1.2G的日志大约20秒。 ( if you want to analyze nginx log, use GoAccess)

用法非常简单:  (quite simple to use) 

$ goaccess -f <your_log_file> -a > result.html

但是goaccess的一个缺点是:  分析大日志时,如果你的机器内存太小,就会报错退出。例如,你的机器是4G内存,但是要分析的内容是7G大小,这时候就会 在机器运行2,3分钟,接近死机是,出现 Killed 的结果(还好GoAccess会自动 干掉这个进程 )  ( but it's a weakpoint that goaccess can't analyze big file, e.g. 7G size.  ) 

所以解决办法是: 1. 把大日志切成小文件。  2. 分析小文件。

$ split -b 2G <your_log_file>

 

http://www.cnphp.info/goaccess-nginx-log-stat-tool-intro.html

http://gaocheng.me/articles/20.html

http://www.fancycoding.com/log-analyse-using-goaccess/

http://hao360.blog.51cto.com/5820068/1344435

http://www.phodal.com/blog/use-goaccess-analyse-nginx-log/



 

posted @ 2015-01-15 10:00  陳聽溪  阅读(3933)  评论(0编辑  收藏  举报