python实时处理log文件脚本
2016-11-23 16:51
435 查看
本文和大家分享的是python入门中实时处理log文件脚本的相关操作,希望对python初学者有所帮助吧。
这个Python脚本是用来对实时文件的内容监控,比如
Error 或者
time out 字段都可以进行自定义;算是我的第一个真正的Python脚本,自己感觉还是比较臃肿,不过打算放到blog上记录一下,真心希望博友们能够再指点一下(现在记录每次的文件大小值是输出到了一个文件中,并且里面还嵌套了有shell命令,这些我认为都是可以优化掉的吧,只是现在我还不知道怎么做);告警是基于zabbix,自定义的模板是120s执行一次
#!/usr/local/bin/python3.5###Destription: 实时读取log信息###Author: Danny Deng###Datetime: 2016-11-17import 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')
returndef 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脚本是用来对实时文件的内容监控,比如
Error 或者
time out 字段都可以进行自定义;算是我的第一个真正的Python脚本,自己感觉还是比较臃肿,不过打算放到blog上记录一下,真心希望博友们能够再指点一下(现在记录每次的文件大小值是输出到了一个文件中,并且里面还嵌套了有shell命令,这些我认为都是可以优化掉的吧,只是现在我还不知道怎么做);告警是基于zabbix,自定义的模板是120s执行一次
#!/usr/local/bin/python3.5###Destription: 实时读取log信息###Author: Danny Deng###Datetime: 2016-11-17import 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')
returndef 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脚本实时处理log文件的方法
- Python处理失败报告脚本
- Python脚本没有实时print信息
- python处理脚本参数
- 在arcgis使用python脚本进行字段计算时对中文的处理方案
- 【python】使用unix管道pipe处理stdout实时数据
- 使用Python脚本处理OC中的中文字符串
- Spark大数据处理(一) Spark的Scala和python脚本环境搭建
- python 脚本处理IDA的Dif文件
- Python笔记–IAR使用Python脚本实现自动对烧录文件进行处理
- python cvs文件处理脚本 python csv
- Python脚本控制的WebDriver 常用操作 <十三> 处理button group层的定位
- Python脚本控制的WebDriver 常用操作 <二十二> 处理alert / confirm / prompt
- Python脚本控制的WebDriver 常用操作 <二十> 处理表单元素
- Selenium webdriver 使用python脚本处理SWFupload 文件上传
- Python处理cassandra 升级后的回滚脚本
- Python脚本控制的WebDriver 常用操作 <十六> 处理对话框
- Python Apache日志处理脚本(初稿)
- mysql-qps统计python脚本(每秒查询处理量)