仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 482|回复: 8
打印 上一主题 下一主题

[CentOS(社区)] 给大家带来python剖析nginx年夜日记文件

[复制链接]
乐观 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 20:24:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!还在为剖析nginx年夜日记犯愁吗?大概你会想到用shell处置,1G文件没有成绩,上了10G文件,会损耗好久工夫,用shell分离python多线程处置没有错。
甚么都不必说了,间接上代码了
#!/usr/bin/python
#coding:utf8
importthreading#载进多线程模块
importtime#载进工夫模块
importos#载进os模块
importshutil#载进shutil模块
importre#载进re正则模块
fuhao=os.linesep#换行符
start_time=int(time.strftime(%H%M%S))#实行步伐入手下手工夫
printstart_time
defcount_cpu_heshu():#统计cpu核数函数
file=open(/proc/cpuinfo)
cpu_sum=[]
forlineinfile.readlines():
cpu_he=re.findall(^processor,line)
iflen(cpu_he)==1:
cpu_sum.append(cpu_he)
else:
continue
file.close()
returnlen(cpu_sum)#前往cpu函数
defcount_memory_size():#统计体系内存巨细函数
mem_sum=int(os.popen("free-m|awk{print$2}|sed-n2p").readline().strip())#统计内存的shell
returnmem_sum#前往内存巨细
defnginx_log_fenge():#因nginx日记太年夜,必要按500M支解,创建此函数举行支解日记
ifos.path.exists(/data/logs/nginx_tmp/)!=True:#支解日记的一时目次
os.makedirs(/data/logs/nginx_tmp/)
ifos.path.exists(/data/logs/nginx_tmp_binfa/)!=True:#并发目次
os.makedirs(/data/logs/nginx_tmp_binfa/)
ifos.path.exists(/data/logs/nginx_tmp_txt01/)!=True:#time纪录txt目次
os.makedirs(/data/logs/nginx_tmp_txt01/)
ifos.path.exists(/data/logs/nginx_tmp_txt02/)!=True:#url纪录txt目次
os.makedirs(/data/logs/nginx_tmp_txt02/)
ifos.path.exists(/data/logs/nginx_tmp_chuli/)!=True:#处置一切txt目次
os.makedirs(/data/logs/nginx_tmp_chuli/)
nginx_log_name=os.listdir(/data/logs/nginx_log)[0].strip()#切割日记名
nginx_file=/data/logs/nginx_log/%s%nginx_log_name#切割日记名及路径
file=open(nginx_file)#nginx日记文件路径
sizehint=int(count_memory_size()/count_cpu_heshu()*0.5*1024*1024)#此数字是按字节举行盘算,这里巨细为内存除以cpu核数剩以0.5失掉的了局为500M
position=0#以后地位为0
file_num=1#支解文件名默许加1
whileTrue:#当前提为真实行,为假加入。
lines=file.readlines(sizehint)#读文件
file_name=/data/logs/nginx_tmp/dd_access%d%file_num#支解乐成的文件名
file01=open(file_name,w)#写文件
file01.writelines(lines)#把读取的单个1G文件写到文件名中
iffile.tell()-position>0:#假如支解的地位年夜于默许地位就持续实行,不然就加入。
position=file.tell()#交换地位
file_num=file_num+1
continue
else:
break
file.close()
file01.close()
os.remove(file_name)
time.sleep(300)
defnginx_log_time_count(file_name01):#nginx剖析日记函数
file_name=/data/logs/nginx_tmp_binfa/%s%file_name01#并发日记名
file_txt=/data/logs/nginx_tmp_txt01/%s.txt%file_name01#实行shell了局保留目次
cmd="awk{print$4}%s|awk-F/{print$NF}|awk-F:{print$2$3$4$5}2>/dev/null|sort2>/dev/null|uniq-c2>/dev/null|sort-nr2>/dev/null|head-n1>%s"%(file_name,file_txt)#剖析剧本
os.system(cmd)#实行shell下令
fuhao_cmd=%s%fuhao
f=open(file_txt)
f1=open(/data/logs/nginx_tmp_chuli/time_sum.txt,a)
forlineinf.readlines():
time_single_max=line.split()[0]#单个文件毗连数
f1.writelines(time_single_max)
f1.write(fuhao_cmd)
f.close()
f1.close()
defnginx_log_url_count(file_name01):#nginx剖析日记函数
file_name=/data/logs/nginx_tmp_binfa/%s%file_name01#并发日记名
file_txt=/data/logs/nginx_tmp_txt02/%s.txt%file_name01#实行shell了局保留目次
cmd="awk{print$7}%s2>/dev/null|sort2>/dev/null|uniq-c2>/dev/null|sort-rn2>/dev/null|head-n200>%s"%(file_name,file_txt)#剖析剧本
os.system(cmd)#实行shell下令
fuhao_cmd=%s%fuhao
f=open(file_txt)
f1=open(/data/logs/nginx_tmp_chuli/url_sum.txt,a)
forlineinf.readlines():#把url_status内里每行值以列表***增添到url_count列内外面
f1.writelines(line.strip())
f1.write(fuhao_cmd)
f.close()
f1.close()
defdxc_call_time_count():#多线程挪用剖析日记函数
file_name_read=[]#文件名读取列表
f=os.listdir(/data/logs/nginx_tmp_binfa/)#显现data/logs/nginx_tmp/目次下一切文件
forread_filenameinf:
filename_chuancan=read_filename.strip()#单个文件名
filename=threading.Thread(target=nginx_log_time_count,args=(filename_chuancan,))#创建多线程
file_name_read.append(filename)#增加线程到file_name_read列表
filename_sum=range(len(file_name_read))#统计文件名数目
forlineinfilename_sum:
file_name_read[line].start()#启动线程
forlineinfilename_sum:
file_name_read[line].join()#守候多线程停止后,就停止历程。
defdxc_call_url_count():#多线程挪用剖析日记函数
file_name_read=[]#文件名读取列表
f=os.listdir(/data/logs/nginx_tmp_binfa/)#显现data/logs/nginx_tmp/目次下一切文件
forread_filenameinf:
filename_chuancan=read_filename.strip()#单个文件名
filename=threading.Thread(target=nginx_log_url_count,args=(filename_chuancan,))#创建多线程
file_name_read.append(filename)#增加线程到file_name_read列表
filename_sum=range(len(file_name_read))#统计文件名数目
forlineinfilename_sum:
file_name_read[line].start()#启动线程
forlineinfilename_sum:
file_name_read[line].join()#守候多线程停止后,就停止历程。
deftime_count_chuli():#time处置函数
f=open(/data/logs/nginx_tmp_chuli/time_sum.txt)
time_max=[]
forcountinf:
time_max.append(int(count.strip()))
f.close()
returnmax(time_max)
defurl_count_chuli():#url处置函数
f=open(/data/logs/nginx_tmp_chuli/url_sum.txt)
url_max=[]
forcountinf:
url_max.append(count.split())
f.close()
returnurl_max
defwrite_report_email():#写文件用来发email
fuhao_cmd=%s%fuhao
time_max=time_count_chuli()#承受time处置函数前往的了局
url_max=url_count_chuli()#承受url处置函数前往的了局
file=open(/data/logs/nginx_log_email_tmp.txt,w)
file.write("nginx单秒的最年夜哀求数为:%d"%time_max)
file.write(fuhao_cmd)
file.write(nginx毗连数TOP100排序)
file.write(fuhao_cmd)
new_dict={}#界说一字典用来统计毗连反复数,失掉字典了局为毗连地点:毗连反复数
foriinurl_max:#遍历url_max列表
new_dict[i[1]]=new_dict.get(i[1],0)+int(i[0])#i[1]暗示毗连地点,i[0]暗示毗连反复数,new_dict[i[1]]暗示把列表中的地点反复数与地点毗连互换,假如毗连不异,就累加毗连反复数.
n_dict={}#界说一字典用来规复本来的毗连反复数:毗连地点
forkinnew_dict:#遍历new_dict字典
n_dict[new_dict[k]]=k#k暗示毗连地点,new_dict[k]暗示毗连反复数,最初n_dict了局为毗连反复数:毗连地点
url_count=sorted(n_dict.iteritems(),key=lambdadict1:dict1[0],reverse=True)#对字典举行排序
forlineinurl_count:
file.write(毗连反复数:)
file.write(str(line[0]))#把毗连反复数写到日记一时文件
file.write()
file.write(http://d.m1905.com)#写毗连头文件
file.write(str(line[1]))#把毗连地点写到日记一时文件
file.write(fuhao_cmd)
file.close()
file=open(/data/logs/nginx_log_email_tmp.txt,r)#读取日记一时文件
row=0
file01=open(/data/logs/nginx_log_email.txt,w)#写文件
forlineinfile.readlines():
row=row+1#row暗示行数
ifrow<=102:#读取文件到102行,年夜于102行就加入
file01.write(line)
else:
break
file.close()
file01.close()
os.remove(/data/logs/nginx_log_email_tmp.txt)#删除日记一时文件
os.remove(/data/logs/nginx_tmp_chuli/time_sum.txt)#删除time_sum文件
os.remove(/data/logs/nginx_tmp_chuli/url_sum.txt)#删url_sum文件
defrmdir_nginx_log_mulu():#清空日记目次函数
shutil.rmtree(/data/logs/nginx_tmp/)#清空日记一时目次,供新日记寄存
os.mkdir(/data/logs/nginx_tmp/)
shutil.rmtree(/data/logs/nginx_log/)#清空日记目次,供新日记寄存
os.mkdir(/data/logs/nginx_log)
defmain():
shutil.rmtree(/data/logs/nginx_tmp_chuli)#清空日记一时目次,供新日记寄存
os.mkdir(/data/logs/nginx_tmp_chuli)
cpu_he=count_cpu_heshu()#cpu核数
whilelen(os.listdir(/data/logs/nginx_tmp/))>0:#静态统计支解日记文件个数
f=os.listdir(/data/logs/nginx_tmp/)#静态统计支解日记文件
key=0#默许key为0
while(key<=cpu_he-1andkey<len(f)):#对cpu核数举行对照
name=/data/logs/nginx_tmp/%s%f[key]#日记文件名
shutil.move(name,/data/logs/nginx_tmp_binfa/)#挪动日记文件,为了削减负载太高
key=key+1
dxc_call_time_count()
dxc_call_url_count()
shutil.rmtree(/data/logs/nginx_tmp_binfa/)
os.mkdir(/data/logs/nginx_tmp_binfa/)
shutil.rmtree(/data/logs/nginx_tmp_txt01/)
os.mkdir(/data/logs/nginx_tmp_txt01/)
shutil.rmtree(/data/logs/nginx_tmp_txt02/)
os.mkdir(/data/logs/nginx_tmp_txt02/)
write_report_email()
rmdir_nginx_log_mulu()
nginx_log_fenge()
main()
stop_time=int(time.strftime(%H%M%S))
printstop_time
#os.system(/usr/bin/python/root/liu_shell/nginx_log/send_email.py)#send_email.py把了局发邮件到开辟职员



注:只必要你把必要剖析的nginx日记放在/data/logs/nginx_log/这个目次就OK了。
检察了局,只必要看/data/logs/nginx_log_email.txt这个文件就OK了。
能够经由过程send_email.py把/data/logs/nginx_log_email.txt这个文件内容发送给开辟职员
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!
分手快乐 该用户已被删除
沙发
发表于 2015-1-16 17:11:22 | 只看该作者

给大家带来python剖析nginx年夜日记文件

生成新的unispimsp.ksc。”另外得到回复后如果问题解决,向帮助过你的人发个说明,让他们知道问题是怎样解决的。
透明 该用户已被删除
板凳
发表于 2015-1-25 22:08:49 | 只看该作者
了解Linux的网络安全,系统的安全,用户的安全等。安全对于每位用户,管理员来说是非常重要的。
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-4 14:57:04 | 只看该作者
如果你有庞大而复杂的测试条件,尽量把它剪裁得越小越好。可能你会遇到这种情况,对于一个问题会出现不同内容回答,这时你需要通过实践来验证。
冷月葬花魂 该用户已被删除
5#
发表于 2015-2-10 03:33:46 | 只看该作者
一定要学好命令,shell是命令语言,命令解释程序及程序设计语言的统称,shell也负责用户和操作系统之间的沟通。
再现理想 该用户已被删除
6#
发表于 2015-2-28 19:51:07 | 只看该作者
随着IT从业人员越来越多,理论上会有更多的人使用Linux,可以肯定,Linux在以后这多时间不会消失。
小妖女 该用户已被删除
7#
发表于 2015-3-10 12:37:49 | 只看该作者
生成新的unispimsp.ksc。”另外得到回复后如果问题解决,向帮助过你的人发个说明,让他们知道问题是怎样解决的。
小魔女 该用户已被删除
8#
发表于 2015-3-17 11:11:01 | 只看该作者
放手去搞。尽量不要提问,运用搜索找答案,或者看wiki,从原理上理解操作系统的本质,而不是满足于使用几个技巧。尽量看英文资料。
飘灵儿 该用户已被删除
9#
发表于 2015-3-24 11:53:30 | 只看该作者
让我树立了很大的信心学好这门课程,也学到了不少专业知识和技能。?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-1 17:38

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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