Python脚本实时处理log文件的方法


Posted in Python onNovember 21, 2016

这个Python脚本是用来对实时文件的内容监控,比如 Error 或者 time out 字段都可以进行自定义;算是我的第一个真正的Python脚本,自己感觉还是比较臃肿,不过打算放到blog上记录一下(还是初学者,大神们勿喷哈),真心希望博友们能够再指点一下(现在记录每次的文件大小值是输出到了一个文件中,并且里面还嵌套了有shell命令,这些我认为都是可以优化掉的吧,只是现在我还不知道怎么做);告警是基于zabbix,自定义的模板是120s执行一次

#!/usr/local/bin/python3.5
###Destription: 实时读取log信息
###Author: Danny Deng
###Datetime: 2016-11-17
import re,time,subprocess,os,linecache
#####定义log文件
file_name = "/usr/local/nginx/logs/error.log"
file_number = "/usr/local/zabbix_agent/number.txt"
j = int(0)
seek = int(0)
##判断过程:文件是否存在---判断存储日志大小的文件是否存在---判断number size 与 filesize的大小
###定义函数按行读取文件内容
def readline():
####if判断 seek是否大于0,大于则赋值,否则初始为0
while True:
######定义文件,根据seek值进行每行读取,每次tell赋值给seek
with open(file_name,'r') as f:
global seek
#seek = seek
f.seek(seek)
data = f.readline()
if data:
seek = f.tell()
yield data
else:
######Python变量转换为shell变量
global file_number
os.environ['seek'] = str(seek)
os.environ['file_number'] = str(file_number)
os.system('echo $seek > $file_number')
os.system('chown zabbix.zabbix $file_number')
return
def func_for():
j = int(0)
for i in readline():
f_find = re.findall(r"check time out", i,flags=re.IGNORECASE)
if "check time out" in f_find:
j += 1
#####没有输出0,有值输出出现error匹配到的次数值
try:
print(j)
except NameError:
print(int("0"))
###判断日志文件是否存在
if os.path.isfile(file_name):
###判断存储文件内容大小的文件是否存在
if os.path.isfile(file_number):
####存在则读取文件size大小,赋值给seek_number
seek_number = int(linecache.getline(file_number, 1))
####然后继续判断存储的文件大小与现在文件大小(确定文件是否是重新生成的)
if os.path.getsize(file_name) >= seek_number and seek_number > 0:
seek = seek_number
func_for()
###若为新文件则,seek 赋值为0
else:
#open(arg1, "a+").write("0")
#seek = int(linecache.getline(file_number, 1))
seek = int(0)
func_for()
####file_number 不存在则新建,并赋值seek变量为0 
else:
#open(file_number, "a+").write("0")
#seek = int(linecache.getline(file_number, 1))
os.environ['file_number'] = str(file_number)
os.system('echo 0 > $file_number')
os.system('chown zabbix.zabbix $file_number')
func_for()
else:
print("Error")
quit()

以上所述是小编给大家介绍的Python脚本实时处理log文件脚本,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python中input()与raw_input()的区别分析
Feb 27 Python
Python基础教程之tcp socket编程详解及简单实例
Feb 23 Python
python XlsxWriter模块创建aexcel表格的实例讲解
May 03 Python
详解python while 函数及while和for的区别
Sep 07 Python
分析运行中的 Python 进程详细解析
Jun 22 Python
python 执行终端/控制台命令的例子
Jul 12 Python
Python+Pyqt实现简单GUI电子时钟
Feb 22 Python
解决Python二维数组赋值问题
Nov 28 Python
python递归调用中的坑:打印有值, 返回却None
Mar 16 Python
Python 通过监听端口实现唯一脚本运行方式
May 05 Python
Python代码执行时间测量模块timeit用法解析
Jul 01 Python
Python scrapy爬取起点中文网小说榜单
Jun 13 Python
深入理解 Python 中的多线程 新手必看
Nov 20 #Python
详解python的数字类型变量与其方法
Nov 20 #Python
python中异常报错处理方法汇总
Nov 20 #Python
详解MySQL数据类型int(M)中M的含义
Nov 20 #Python
python制作websocket服务器实例分享
Nov 20 #Python
Flask框架的学习指南之用户登录管理
Nov 20 #Python
Flask框架的学习指南之制作简单blog系统
Nov 20 #Python
You might like
phpwind中的数据库操作类
2007/01/02 PHP
php下图片文字混合水印与缩略图实现代码
2009/12/11 PHP
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
php防止伪造的数据从URL提交方法
2014/06/27 PHP
php实现字符串翻转的方法
2015/03/27 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
HTML中事件触发列表与解说
2007/07/09 Javascript
jQuery JSON的解析方式分享
2011/04/05 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
JavaScript语言对Unicode字符集的支持详解
2014/12/30 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
2015/01/26 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
ES6下React组件的写法示例代码
2017/05/04 Javascript
Angular2使用Angular-CLI快速搭建工程(二)
2017/05/21 Javascript
[01:09:24]Ti4开幕式
2014/07/19 DOTA
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
Python如何通过subprocess调用adb命令详解
2017/08/27 Python
python一行sql太长折成多行并且有多个参数的方法
2018/07/19 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
2019/10/14 Python
python实现的分析并统计nginx日志数据功能示例
2019/12/21 Python
web页面录屏实现
2019/02/12 HTML / CSS
html5的canvas方法使用指南
2014/12/15 HTML / CSS
Bugatchi官方网站:男士服装在线
2019/04/10 全球购物
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
高中三年学习生活的自我评价
2013/10/10 职场文书
出国签证在职证明
2014/01/16 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
电焊工岗位工作职责
2014/07/09 职场文书
预备党员入党思想汇报(范文)
2019/08/14 职场文书
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python