设为首页 收藏本站
查看: 1364|回复: 0

[经验分享] nginx日志分析利器GoAccess-Linux运维

[复制链接]

尚未签到

发表于 2018-11-15 07:02:50 | 显示全部楼层 |阅读模式
  面试的时候一定会被面到的问题是:给出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.rpmwget http://rpms.famillecollet.com/enterprise/remi-release-6.rpmsudo rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm  GoAccess有两种使用方法,一种是直接在控制台显示和操作。
  当你要立马分析出今天早上10点到12点的IP访问情况的时候,直接在控制台敲命令是最快的。
  另外一种就是生成html文件或者数据文件。
  如果你希望每天管理的服务器集群能给你发送一个昨天访问日志的情况,这个就是不二选择了。
控制台使用GoAccess
  goaccess的参数:
-f  : 需要解析的日志文件
-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=
  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=
  指定配置文件,如果你有配置文件,配置文件中又恰巧设置了log-format和date,那么你就不会被强制进入到format对话框了。如果你没有设置的话,默认使用~/.goace***c。
-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/.goacce***c > test.html  生成的html的截图如下:

  也可以生成json:
goaccess -q -f web.log -a -p /home/yejianfeng/.goacce***c -o json >test.json  和csv
goaccess -q -f web.log -a -p /home/yejianfeng/.goacce***c -o csv>test.csvcat /home/yejianfeng/.goacce***c  
date-format %d/%b/%Y
  
log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"
  

  

  
goaccess -f  XXXXXX.log -p /root/.goacce***c -a > html/XXXXX.log.html
等等,还缺点什么?
  正如文章,人无完人,工具无完美工具,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。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-635135-1-1.html 上篇帖子: 优化nginx在高并发时的性能 下篇帖子: CentOS 6.5 安装 Nginx 1.7.8 教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表