阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx日志分析利器GoAccess

207次阅读
没有评论

共计 4602 个字符,预计需要花费 12 分钟才能阅读完成。

面试的时候一定会被面到的问题是:给出 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,就是出现如图的功能

Nginx 日志分析利器 GoAccess

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

就是下面的这个窗口

Nginx 日志分析利器 GoAccess

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

 

首先,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

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

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-06/103295p2.htm

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
Nginx 日志分析利器 GoAccess

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 带上之后效果为:

Nginx 日志分析利器 GoAccess

-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 模块中,是否展示更详细的操作系统信息。

如图:

Nginx 日志分析利器 GoAccess

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

F1 是打开帮助文档

F5 是刷新当前窗口

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

o 是进入选择条目

0-9 是选择模块

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

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

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

 

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

面试的时候一定会被面到的问题是:给出 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,就是出现如图的功能

Nginx 日志分析利器 GoAccess

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

就是下面的这个窗口

Nginx 日志分析利器 GoAccess

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

 

首先,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

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

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2014-06/103295p2.htm

使用 GoAccess 生成文件

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

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

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

 

生成的 html 的截图如下:

Nginx 日志分析利器 GoAccess

也可以生成 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。

GoAccess 的详细介绍 :请点这里
GoAccess 的下载地址 :请点这里

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计4602字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中