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

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

就是下面的这个窗口

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

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

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

如图:

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

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的截图如下:

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

nginx日志分析利器GoAccess的更多相关文章

  1. nginx日志分析利器GoAccess(转)

    面试的时候一定会被面到的问题是:给出web服务器的访问日志,请写一个脚本来统计访问前10的IP有哪些?访问前10的请求有哪些?当你领略过goaccess之后,你就明白,这些问题,除了考验你的脚本背诵记 ...

  2. nginx 日志分析工具goaccess

    参考:https://www.goaccess.io/download 安装 $ wget http://tar.goaccess.io/goaccess-1.1.1.tar.gz $ tar -xz ...

  3. 可视化实时Web日志分析工具-goaccess

    说到web服务器就不得不说Nginx,目前已成为企业建站的首选.但由于种种历史原因,Nginx日志分析工具相较于传统的apache.lighthttp等还是少很多. 今天就和大家分享一个非常强大的实时 ...

  4. Nginx 日志分析及性能排查

    Nginx 日志分析及性能排查 2017-03-04 Linux爱好者 (点击上方公众号,可快速关注) 作者:-外星人- my.oschina.net/362228416/blog/844713 如有 ...

  5. ELK+redis搭建nginx日志分析平台

    ELK+redis搭建nginx日志分析平台发表于 2015-08-19   |   分类于 Linux/Unix   |  ELK简介ELKStack即Elasticsearch + Logstas ...

  6. 使用elk+redis搭建nginx日志分析平台

    elk+redis 搭建nginx日志分析平台 logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态 ...

  7. Nginx日志分析及脚本编写

    在我们日常的运维中,当Nginx服务器正常运行后,我们会经常密切关注Nginx访问日志的相关情况,发现有异常的日志信息需要进行及时处理. 那今天我将跟大家一起来研究和分析Nginx日志,nginx默认 ...

  8. nginx高性能WEB服务器系列之八--nginx日志分析与切割

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  9. (转)10 分钟内快速构建能够承载海量数据的 nginx 日志分析与报警平台

    10 分钟内快速构建能够承载海量数据的 nginx 日志分析与报警平台 原文:https://blog.qiniu.com/archives/8713

随机推荐

  1. oracle 函数写法 总结

    1:首先看创建一个函数 给定一个日期,判断是否是休息日. create or replace function test(date_in in date) return int is num int; ...

  2. windbg无法下载符号文件

    symbol file path: srv*d:\symbolslocal*http://msdl.microsoft.com/download/symbols 即使设置是对的,但我用.reload, ...

  3. hdoj 1576

    //1Y真是爽啊 题意:要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1).  分析:根据题意a=b*x   a=m ...

  4. Bootstrap<基础十三> 按钮组

    按钮组允许多个按钮被堆叠在同一行上.当你想要把按钮对齐在一起时,这就显得非常有用.你可以通过Bootstrap 按钮(Button) 插件 添加可选的 JavaScript 单选框和复选框样式行为. ...

  5. ROS笔记——创建简单的主题发布节点和主题订阅节点

    在安装好ROS后,接着学习如何创建节点和节点之间的通信方式,以一个简单的主题发布节点和主题订阅节点说明. 节点是连接ROS网络等可执行文件,是实现某些功能的软件包,也是一个主要计算执行的进程. 一.创 ...

  6. asp.net webForm登录授权

    HttpCookie cookie; cookie = FormsAuthentication.GetAuthCookie(W3Account, isRemberMe); if (isRemberMe ...

  7. IE关闭兼容性视图

    不知道什么时候,ie8的“兼容性视图设置”变成了灰色,如图:  今天通过设置组策略,终以解决了这个问题: ie8的兼容性视图设置灰色的解决办法:运行gpedit.msc--用户配置/计算机配置--管理 ...

  8. SQL查询关于相对路径、矢代、绝对路径、递归、计算列的速度对比跟优化-SOD群记录

    1秒查原本递归的查询. 适用于:上下级.多层查询 -- Get childs by parent id WITH Tree AS ( SELECT Id,ParentId FROM dbo.Node ...

  9. java基础之 GC

    Java程序员在编码过程中通常不需要考虑内存问题,JVM经过高度优化的GC机制大部分情况下都能够很好地处理堆(Heap)的清理问题.以至于许多Java程序员认为,我只需要关心何时创建对象,而回收对象, ...

  10. ArcGisEngineForJava开发

    ArcGIS Engine control examples 一.利用Visual JavaBeans来构建应用程序 这种方案是针对使用可视化的Java组件,想要来构建和部署应用程序的开发人员.Jav ...