兰色精灵 发表于 2015-1-14 20:45:52

给大家带来Apache/Nginx 拜访日记剖析python剧本

如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!剧本功效:
剧本采取python2.7编写,用来剖析Apahce的拜访日记


剧本用法:
剧本名Apache的拜访日记[想要显示的行数]
更新:


1.第二版:增长显示指定的行数
2.增长Nginx日记剖析剧本


剧本履行后果以下:



剧本内容以下:
nginx拜访日记剖析剧本
<olclass="dp-pylist-paddingleft-2"><liclass="alt">#!/usr/bin/envpython
#coding=utf-8
<liclass="alt">
#------------------------------------------------------
<liclass="alt">#Name:nginx日记剖析剧本
#Purpose:此剧本只用来剖析nginx的拜访日记
<liclass="alt">#Version:1.0
#Author:LEO
<liclass="alt">#BLOG:http://linux5588.blog.51cto.com
#EMAIL:chanyipiaomiao@163.com
<liclass="alt">#Created:2013-05-07
#Modified:2013-05-07
<liclass="alt">#Copyright:(c)LEO2013
#------------------------------------------------------
<liclass="alt">
importsys
<liclass="alt">importtime

<liclass="alt">#该类是用来打印格局
classdisplayFormat(object):
<liclass="alt">
defformat_size(self,size):
<liclass="alt">格局化流量单元
KB=1024#KB->BB是字节
<liclass="alt">MB=1048576#MB->B
GB=1073741824#GB->B
<liclass="alt">TB=1099511627776#TB->B
ifsize>=TB:
<liclass="alt">size=str(size/TB)+T
elifsize<KB:
<liclass="alt">size=str(size)+B
elifsize>=GBandsize<TB:
<liclass="alt">size=str(size/GB)+G
elifsize>=MBandsize<GB:
<liclass="alt">size=str(size/MB)+M
else:
<liclass="alt">size=str(size/KB)+K
returnsize
<liclass="alt">
#界说字符串格局化
<liclass="alt">formatstring=%-15s%-10s%-12s%8s%10s%10s%10s%10s%10s%10s%10s

<liclass="alt">deftransverse_line(self):
输入横线
<liclass="alt">printself.formatstring%(-*15,-*10,-*12,-*12,-*10,-*10,-*10,-*10,-*10,-*10,-*10)

<liclass="alt">defhead(self):
输入头部信息
<liclass="alt">printself.formatstring%(IP,Traffic,Times,Times%,200,404,500,403,302,304,503)

<liclass="alt">deferror_print(self):
输入毛病信息
<liclass="alt">print
printUsage:+sys.argv+NginxLogFilePath
<liclass="alt">print
sys.exit(1)
<liclass="alt">
defexecut_time(self):
<liclass="alt">输入剧本履行的时光
print
<liclass="alt">print"ScriptExecutionTime:%.3fsecond"%time.clock()
print
<liclass="alt">
#该类是用来生成主机信息的字典
<liclass="alt">classhostInfo(object):
host_info=[200,404,500,302,304,503,403,times,size]
<liclass="alt">
def__init__(self,host):
<liclass="alt">self.host=host={}.fromkeys(self.host_info,0)

<liclass="alt">defincrement(self,status_times_size,is_size):
该办法是用来给host_info中的各个值加1
<liclass="alt">ifstatus_times_size==times:
self.host[times]+=1
<liclass="alt">elifis_size:
self.host[size]=self.host[size]+status_times_size
<liclass="alt">else:
self.host+=1
<liclass="alt">
defget_value(self,value):
<liclass="alt">该办法是取到各个主机信息中对应的值
returnself.host
<liclass="alt">
#该类是用来剖析文件
<liclass="alt">classfileAnalysis(object):
def__init__(self):
<liclass="alt">初始化一个空字典
self.report_dict={}
<liclass="alt">self.total_request_times,self.total_traffic,self.total_200,
self.total_404,self.total_500,self.total_403,self.total_302,
<liclass="alt">self.total_304,self.total_503=0,0,0,0,0,0,0,0,0

<liclass="alt">defsplit_eachline_todict(self,line):
朋分文件中的每行,并前往一个字典
<liclass="alt">split_line=line.split()
split_dict={remote_host:split_line,status:split_line,
<liclass="alt">bytes_sent:split_line,}
returnsplit_dict
<liclass="alt">
defgenerate_log_report(self,logfile):
<liclass="alt">读取文件,剖析split_eachline_todict办法生成的字典
forlineinlogfile:
<liclass="alt">try:
line_dict=self.split_eachline_todict(line)
<liclass="alt">host=line_dict[remote_host]
status=line_dict[status]
<liclass="alt">exceptValueError:
continue
<liclass="alt">exceptIndexError:
continue
<liclass="alt">
ifhostnotinself.report_dict:
<liclass="alt">host_info_obj=hostInfo(host)
self.report_dict=host_info_obj
<liclass="alt">else:
host_info_obj=self.report_dict
<liclass="alt">
host_info_obj.increment(times,False)
<liclass="alt">ifstatusinhost_info_obj.host_info:
host_info_obj.increment(status,False)
<liclass="alt">try:
bytes_sent=int(line_dict[bytes_sent])
<liclass="alt">exceptValueError:
<p><spanstyle="padding:0px;margin:0px;border:none;color:#505050;background-color:inherit;">bytes_sent=

透明 发表于 2015-1-16 22:26:18

给大家带来Apache/Nginx 拜访日记剖析python剧本

linux鸟哥的私房菜,第三版,基础篇,网上有pdf下的,看它的目录和每章的介绍就行了,这个绝对原创!

仓酷云 发表于 2015-1-20 19:53:28

熟悉并掌握安装Linux,安装是学习的前提。目前较常见的安装方法有二种:

爱飞 发表于 2015-1-29 19:23:16

当然你不需搭建所有服务,可以慢慢来。自己多动手,不要非等着别人帮你解决问题。

蒙在股里 发表于 2015-2-6 03:40:43

下面看看一个让人无法回答的问题:“救命各位高手,向你们请教一些问题:如何在Linux下配制HTTP、FTP、Samba、DNS、DHCP、Sendmail服务器,谢谢”这样的问题。

海妖 发表于 2015-2-15 17:35:27

熟悉系统的基本操作,Linux的图形界面直观,操作简便,多加上机练习就可熟悉操作,在Linux下学习办公软件等常用软件。

因胸联盟 发表于 2015-3-4 13:33:06

在学习的过程中,我们用的是VM虚拟机,开始时真的不真的该怎么去做,特别是我的是命令窗口界面,别人的是图形界面,我都不知道怎么调过来。

莫相离 发表于 2015-3-11 19:56:45

然我们对Linux的学习首先是通过对它的产生,发展,到今天仍然在不断完善开始的。

小女巫 发表于 2015-3-19 12:51:31

熟悉并掌握安装Linux,安装是学习的前提。目前较常见的安装方法有二种:

愤怒的大鸟 发表于 2015-3-28 15:44:38

我想即使Linux高手也很难快速准确精练的回答你。
页: [1]
查看完整版本: 给大家带来Apache/Nginx 拜访日记剖析python剧本