python日志切割与日志分析(python多线程)

发布时间:2020-01-16编辑:脚本学堂
python多线程分割日志文件,并进行日志文件分析,用shell脚本进行大日志分析速度会很慢,可以考虑用python进行日志分析。

python多线程分割日志文件,并进行日志文件分析
分割日志,把日志分割成很多的小块,利用多线程去分析日志,这个难点在哪,难点就在如何去分割日志,前几篇文件楼主写过日志分割的python版,但是存在很大的弊端,只能够针对小日志进行分割,因为上一篇是把日志先写到列表中,大家都知道列表时要站内存的,那如果说日志很大,岂不一下就把内存吃满了。

首先,创建一个文本,文本内容:
1
2
3



1000
 
1.计算出文本一行的大小比如说是4B
2.用服务器的总内存数除以4B 计算出我的服务器可以一次性分析多大的文件,这个数就是我一个文本应该为多少行,也就是说我切割的日志,一个文件是多少行

python日志切割脚本
 

复制代码 代码示例:

#!/usr/bin/python
#
from time import ctime
def splitFile(fileLocation, targetFoler):
file_handler = open(fileLocation, ‘r’)
block_size = 100   (为我每个文件的行数)
line = file_handler.readline()
temp = []
countFile = 1
while line:
for i in range(block_size):
if i == (block_size-1):
# write block to small files
file_writer = open(targetFoler + “file_”+str(countFile)+”.txt”, ‘a+’)
file_writer.writelines(temp)
file_writer.close()
temp = []
print ”  file ” + str(countFile) + ” generated at: ” + str(ctime())
countFile = countFile + 1
else:
temp.append(file_handler.readline())
if countFile == 11:
break;

file_handler.close()

if __name__ == ‘__main__’:
print “Start At: ” + str(ctime())
splitFile(“/home/python/test.txt”, “/tmp/”)

分割完日志后,进行nginx日志分析
 

复制代码 代码示例:

#!/usr/bin/python
import os
import re
import threading
def chaFile(path):
a=os.listdir(path)
for i in range(len(a)):
b=a[i]
c=open(“/home/python/rizhifenge.txt”,”a+”)
kk=”n”+b
c.writelines(kk)
c.close()
d=open(“/home/python/rizhifenge.txt”,”r”)
f=d.read()
e=re.findall(“file.*”,f)
return e
d.close()

def chaZhao(path):
aa=open(path,”r+”)
bb=aa.read()
cc=re.search(“d.”,bb)
if cc:
print cc.group()
aa.close()

if __name__ == “__main__”:
ff=”/tmp/”
for i in chaFile(ff):
gg=ff+i
a=threading.Thread(target=chaZhao,args=(gg,))
a.start()