Chinaunix首页 | 论坛 | 博客
  • 博客访问: 653072
  • 博文数量: 220
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1961
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-04 21:54
文章分类

全部博文(220)

文章存档

2018年(1)

2015年(140)

2014年(79)

我的朋友

分类: 网络与安全

2014-12-30 14:32:52

最近维护的网站老是有搜索引擎来恶意访问,搞我们网站打开很慢,OMG老总发话了,必须要搞定。

曾经在nginx.conf文件中做过滤,but这样做过,但是会影响收录,纠结啊........

if ($http_user_agent ~* "Gecko|YoudaoBot|baiduspider|Googlebot|soso|bing|sogou|yahoo|sohu-search|yodao|robozilla|msnbot|MJ12bot|NHN|Twiceler"){
            return  403;
 }

发现了个日记分析工具,感觉挺好用的,但是我的问题还是没有解决,难道叫我屏蔽IP吧,可能需要这样做。

下面让我们挖掘GoAccess,good jobs............

 

GoAccess简介

GoAccess是运行在Unix系统终端,开源、实时分析Apache日志(其实也能够分析Nginx日志)并且能够动态呈现的软件。它为系统管理员提供了一个快速、有价值的HTTP统计,动态的可视化的服务器报告。

作用

GoAccess的工作方式是,它将解析众所周知的Apache访问日志文件 access log,GoAccess通过解析日志收集的数据,将会显示它的控制台或某个终端。收集到的信息或生成的报告将显示给在视觉、交互窗口的系统管理员用户。报告包括:
      综合统计
     访客排行榜
     请求文件排行榜
     请求的静态文件排行榜,如图片、JS文件、CSS文件等
     访问来源
     404页面
     访问者的操作系统
     访问者的浏览器
     浏览器和蜘蛛(搜索爬虫)
    主机,反向DNS,IP位置
    HTTP状态码
    推介网站
    搜索关键词
    显示时不同的配色方案
    无限制日志文件的大小(决定了GoAccess的打开速度)


GoAccess主页 

GoAccess命令

#下载AoAccess安装包
wget 
#解压文件
tar zxvf goaccess-0.4.2.tar.gz
cd goaccess-0.4.2 
#启动ip归属地查询和utf8编码格式支持 
./configure –enalbe-geoip –enable-utf8 
make
make install


用法介绍
 
GoAccess的基本语法如下: 
goaccess [ -b ][ -s ][ -e IP_ADDRESS][ - a ] <-f log_file >
goaccess -b access.log

参数说明:
 1) -f – 日志文件名
 2) -b – 开启流量统计,如果希望加快分析速度不建议使用该参数
 3) -s – 开启HTTP响应代码统计
 4) -a – 开启用户代理统计
 5) -e – 开启指定IP地址统计,默认禁用


用法示例:
最简单、常用的命令就是直接调用goaccess命令
goaccess –f access.log
 

goaccess nginx日志分析工具 - Vincent - Vincent

 简单操作命令:

1 + O

2 + O

3 + O

.....................................


显示HTTP响应代码、用户代理、流量消耗(产生完整、全面统计数据的使用方式)
goaccess –f access.log –s –a –b
 
goaccess支持linux管道,我们可以将日志文件预处理后,再交给goaccess去分析。
zcat access.log.1.gz | goaccess
 
Aoaccess去分析已经打包压缩好的日志文件或者干脆分析目前下所有日志
zcat access.log* | goaccess
 
如果需要分析某天的日志,例如2012年9月号8那天的日志,我们让linux管道命令。
sed -n ‘/08\/Sep\/2012/,$ p’ access.log | goaccess -s –b

低优先级运行GoAccess的方式
nice -n 19 goaccess -f access.log -s -a -b

分析从9月1号到9月30号的日志
sed -n ‘/1\/Sep\/2012,/30\/Sep\/2012/ p’ access.log | goaccess -s –b
 
调用本地的goaccess程序来分析服务器上的日志(远程分析nginx log)
ssh  'cat /www/nginx/logs/access.log' | goaccess -s -a -b

但是如果你在SecureCRT工具下使用可不行哦,good luck.....





每天把日志分析结果通过邮件发送给boss和研发,是不是省去自己写脚本的时间了?

wKioL1REr0SyFyRrAAbfTaYWVPI456.jpg

下面是goaccess安装步骤,我也是从其他地方抓取的,安装很简单,网上一搜一大把

安装GoAccess

RedHat或centos,使用yum:

yum install goaccess

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

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

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

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

控制台使用GoAccess

goaccess的参数:

-f : 需要解析的日志文件

-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 "" "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 

复制代码

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

Image(2)

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

-p --conf-file=

指定配置文件,如果你有配置文件,配置文件中又恰巧设置了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

我一般是将分析结果保存为HTML格式,然后通过脚本发送出去,脚本如下:

#!/usr/bin/#coding:utf-8import smtplibimport sysfrom email.Header import Headerfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.mime.image import MIMEImagedef sendMail(sender,receiver,subject,attfile):	smtpserver = 'smtp.126.com'	username = 'admin123'	password = '111111'	msg = MIMEMultipart('alternative')	msg['Subject'] = Header(subject,'utf-8')	f = open(attfile)	html = ''.join(f.readlines())	f.close()	part2 = MIMEText(html,'html','utf-8')	msg.attach(part2)	att = MIMEText(open(attfile,'rb').read(),'base64','utf-8')	att["Content-Type"] = 'application/octet-stream'	att["Content-Disposition"] = 'attatchment;filename="report.html"'	msg.attach(att)	smtp = smtplib.SMTP()	smtp.connect('smtp.126.com')	smtp.login(username,password)	smtp.sendmail(sender,receiver,msg.as_string())	smtp.quit()if __name__ == '__main__':	sender = 'admin123@126.com'	receiver = ['user01@126.com','user02@126.com']	subject = 'xxx日志分析报告'	sendMail(sender,receiver,subject,sys.argv[1])



阅读(2126) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~