面试的时候一定会被面到的问题是:给出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. 安装AutoCAD2006时,提示已终止安装

    .NET Framework Runtime 1.1 版本比你机子里面的版本低,直接跳过这个安装就可以了.直接运行acad.msi,直接安装.

  2. iOS开发_内存泄漏、内存溢出和野指针之间的区别

    今天,在工作群中,被问到了内存泄漏和野指针指向的区别,自己答的不是很好,特意回来查了资料,在博文中总结一下经验,欢迎指正. 内存泄漏:是指在堆区,alloc 或new 创建了一个对象,但是并没有放到自 ...

  3. JAVA中最常用的十个快捷键

    http://blog.sina.com.cn/s/blog_5fb39f910101dc2b.html 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以 ...

  4. 【C#】 格式化说明符 string.Format WriteLine

    定义 格式说明符的语法由3个字段组成:索引号.对齐说明符和格式字段.String.Format和WriteLine都遵守同样的格式化规则. 对齐说明符 对齐说明符表示了字段中字符的最小宽度.对齐说明符 ...

  5. map 取值

    1>可以取出Map中所有的键所在的Set集合:再通过Set的迭代器获取到每一个键,之后再用get();方法获得对应的值. public static void main(String[] arg ...

  6. 修改加粗cmd和powershell命令行的中文字体

    powershell 传教士 原创文章 2016-06-20 允许转载,但必须保留名字和出处,否则追究法律责任 ---[前言]--- 1 环境: win10 10586 powershell 5.0 ...

  7. mysql,node.js

    var mysql = require('mysql'); var pool = mysql.createPool({ host: 'localhost', user: 'root', passwor ...

  8. Theoretical comparison between the Gini Index and Information Gain criteria

    Knowledge Discovery in Databases (KDD) is an active and important research area with the promise for ...

  9. dos2unix

    dos2unix 实际上就是把文本文件里面的^M删除,我一般懒得用这个命令,vi里面用一个命令(:%s/^m//g)删除即可. 用法举例: dos2unix a.txt b.txt 要把一批文件都do ...

  10. 2014年6月份第1周51Aspx源码发布详情

    企业汽车服务终端管理系统源码  2014-6-3 [VS2010]源码描述:本系统专门服务于(汽车美容4s店) 完整的一套汽车美容管理服务系统. 功能介绍:汽车美容服务终端功能强大而又简便实用,界面友 ...