python 多线程日志切割+日志分析

  • 05/27. 2014

楼主最近刚刚接触python,还是个小菜鸟,没有学习python之前可以说楼主的shell已经算是可以了,但用shell很多东西实现起来还是不可能的事情,例如最明显的一点大日志分析,由于楼主的公司,每天的日志量很大,用shell分析的会非常非常的慢。

通过学习python,楼主有了一种想法,想法如下

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

首先创建一个文本,文本内容如下

1

2

3

1000

1.计算出文本一行的大小比如说是4B

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

下面奉献出日志切割的脚本

#!/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/”)

分割完日志后,下面就该进行日志分析了

脚本如下

#!/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()

python 多线程日志切割+日志分析的更多相关文章

  1. Python 多线程并发程序设计与分析

    多线程并发程序设计与分析 by:授客 QQ:1033553122 1.技术难点分析与总结 难点1:线程运行时,运行顺序不固定 难点2:同一段代码,再不加锁的情况下,可能被多个线程同时执行,这会造成很多 ...

  2. tomcat日志切割和定期删除(转载)

    tomcat日志切割和定期删除 在tomcat的软件环境中,如果我们任由日志文件无限增长,总有一天会将磁盘占满的(废话).特别是在日志文件增长速度很快的一些情况下,按日志切割日志文件并删除,就是一件很 ...

  3. tomcat日志切割和定期删除

    tomcat日志切割和定期删除 在tomcat的软件环境中,如果我们任由日志文件无限增长,总有一天会将磁盘占满的(废话).特别是在日志文件增长速度很快的一些情况下,按日志切割日志文件并删除,就是一件很 ...

  4. Linux centos7 VMware Apache访问日志不记录静态文件、访问日志切割、静态元素过期时间

    一.Apache访问日志不记录静态文件 网站大多元素为静态文件,如图片.css.js等,这些元素可以不用记录 vim /usr/local/apache2.4/conf/extra/httpd-vho ...

  5. 运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)

    对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮 ...

  6. 运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)(转)

    对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮 ...

  7. 日常运维中的相关日志切割处理方法总结 [Logrotate、python、shell脚本实现 ]

    对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮 ...

  8. Linux日志切割方法[Logrotate、python、shell实现方式]

    Linux日志切割方法[Logrotate.python.shell实现方式] ​ 对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分 ...

  9. python通过TimedRotatingFileHandler按时间切割日志

    通过TimedRotatingFileHandler按时间切割日志 线上跑了一个定时脚本,每天生成的日志文件都写在了一个文件中.但是日志信息不可能输出到单一的一个文件中. 原因有二:1.日志文件越来越 ...

随机推荐

  1. nvidia-smi 命令解读

    nvidia-smi 的定义: 基于 NVIDIA Management Library (NVIDIA 管理库),实现 NVIDIA GPU 设备的管理和监控功能 主要支持 Tesla, GRID, ...

  2. Vue父子组件之间通信

    1.父 -> 子.通过props //father.vue <template> <div id="father"> <div><l ...

  3. jvm在什么情况下会执行GC

    jvm在什么情况下会执行GC?[五种情况] 对象没有引用 作用域发生未捕获异常 程序在作用域正常执行完毕 程序执行了System.exit() 程序发生意外终止(被杀进程等) 什么是没有对象引用?

  4. 多线程学习笔记四之Condition实现分析

    目录 简介 等待队列 nextWaiter 源码分析 await() signal() signalAll() 总结 简介   在使用内置锁synchronized时,通过调用java.lang.Ob ...

  5. SOAP port

    To determine the SOAP port on WebSphere Base: Server Types > WebSphere application servers > [ ...

  6. CF1065E Side Transmutations

    link 题意: 给你一个长为m的序列$b_i$,定义两个字符串a,b相同当前仅当a执行以下操作后能变成b:($\rm{prefix}(x,y)$及$\rm{suffix}(x,y)$定义为串x的前/ ...

  7. hdu 5775 Bubble Sort 树状数组

    Bubble Sort 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5775 Description P is a permutation of t ...

  8. spring-boot 速成(8) 集成druid+mybatis

    spring-boot与druid.mybatis集成(包括pageHelper分页插件), 要添加以下几个依赖项: compile('mysql:mysql-connector-java:6.0.5 ...

  9. java execute、executeQuery和executeUpdate之间的区别

    在用纯JSP做一个页面报警功能的时候习惯性的用executeQuery来执行SQL语句,结果执行update时就遇到问题,语句能执行,但返回结果出现问题,另外还忽略了executeUpdate的返回值 ...

  10. 智能指针scoped_ptr

    对应C++11中的unique_ptr #include <iostream> #include <memory> class foo { public: foo() { st ...