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中列表、字典、元组、集合数据结构整理
Nov 20 Python
Pycharm学习教程(2) 代码风格
May 02 Python
Python语言实现将图片转化为html页面
Dec 06 Python
详解python中Numpy的属性与创建矩阵
Sep 10 Python
解决Pycharm下面出现No R interpreter defined的问题
Oct 29 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
python实现对任意大小图片均匀切割的示例
Dec 05 Python
基于Django静态资源部署404的解决方法
Jul 28 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
Sep 20 Python
PyCharm使用Docker镜像搭建Python开发环境
Dec 26 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
Aug 19 Python
python读取mat文件生成h5文件的实现
Jul 15 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
PHP表单验证内容是否为空的实现代码
2016/11/14 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
2019/03/07 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
iframe异步加载实现点击左边菜单加载右边内容实例讲解
2013/03/04 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
如何使用angularJs
2017/05/08 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
vue-cli构建项目使用 less的方法
2017/10/04 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
ES6基础之解构赋值(destructuring assignment)
2019/02/21 Javascript
原生js生成图片验证码
2020/10/11 Javascript
Python程序设计入门(1)基本语法简介
2014/06/13 Python
python下MySQLdb用法实例分析
2015/06/08 Python
Python实现的快速排序算法详解
2017/08/01 Python
使用tensorflow实现线性svm
2018/09/07 Python
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
python装饰器相当于函数的调用方式
2019/12/27 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
python中selenium库的基本使用详解
2020/07/31 Python
利用CSS3的transform做的动态时钟效果
2011/09/21 HTML / CSS
菲律宾票务网站:StubHub菲律宾
2018/04/21 全球购物
为女性购买传统的印度服装和婚纱:Kalkifashion
2019/07/22 全球购物
KELLER SPORTS荷兰:在线订购最好的运动产品
2020/10/13 全球购物
电气自动化求职信
2014/06/24 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
产品质量保证书范本
2015/02/27 职场文书
烛光里的微笑观后感
2015/06/17 职场文书
Nginx域名转发使用场景代码实例
2021/03/31 Servers
高考要来啦!用Python爬取历年高考数据并分析
2021/06/03 Python
使用python求解迷宫问题的三种实现方法
2022/03/17 Python