亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Python腳本實(shí)時(shí)處理log文件的方法

asal 2017-01-12 13:58:40 308
abstrak:這個(gè)Python腳本是用來(lái)對(duì)實(shí)時(shí)文件的內(nèi)容監(jiān)控,比如 Error 或者 time out 字段都可以進(jìn)行自定義;算是我的第一個(gè)真正的Python腳本,自己感覺還是比較臃腫,不過(guò)打算放到blog上記錄一下(還是初學(xué)者,大神們勿噴哈),真心希望博友們能夠再指點(diǎn)一下(現(xiàn)在記錄每次的文件大小值是輸出到了一個(gè)文件中,并且里面還嵌套了有shell命令,這些我認(rèn)為都是可以優(yōu)化掉的吧,只是現(xiàn)在我還不知道怎么做);

這個(gè)Python腳本是用來(lái)對(duì)實(shí)時(shí)文件的內(nèi)容監(jiān)控,比如 Error 或者 time out 字段都可以進(jìn)行自定義;算是我的第一個(gè)真正的Python腳本,自己感覺還是比較臃腫,不過(guò)打算放到blog上記錄一下(還是初學(xué)者,大神們勿噴哈),真心希望博友們能夠再指點(diǎn)一下(現(xiàn)在記錄每次的文件大小值是輸出到了一個(gè)文件中,并且里面還嵌套了有shell命令,這些我認(rèn)為都是可以優(yōu)化掉的吧,只是現(xiàn)在我還不知道怎么做);告警是基于zabbix,自定義的模板是120s執(zhí)行一次

#!/usr/local/bin/python3.5
###Destription: 實(shí)時(shí)讀取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)
##判斷過(guò)程:文件是否存在---判斷存儲(chǔ)日志大小的文件是否存在---判斷number size 與 filesize的大小
###定義函數(shù)按行讀取文件內(nèi)容
def readline():
####if判斷 seek是否大于0,大于則賦值,否則初始為0
while True:
######定義文件,根據(jù)seek值進(jìn)行每行讀取,每次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變量轉(zhuǎn)換為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,有值輸出出現(xiàn)error匹配到的次數(shù)值
try:
print(j)
except NameError:
print(int("0"))
###判斷日志文件是否存在
if os.path.isfile(file_name):
###判斷存儲(chǔ)文件內(nèi)容大小的文件是否存在
if os.path.isfile(file_number):
####存在則讀取文件size大小,賦值給seek_number
seek_number = int(linecache.getline(file_number, 1))
####然后繼續(xù)判斷存儲(chǔ)的文件大小與現(xiàn)在文件大小(確定文件是否是重新生成的)
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()

更多關(guān)于Python腳本實(shí)時(shí)處理log文件的方法請(qǐng)關(guān)注PHP中文網(wǎng)(ipnx.cn)其他文章!

Nota Keluaran

Penyertaan Popular