Python腳本實(shí)時處理log文件的方法
這個Python腳本是用來對實(shí)時文件的內(nèi)容監(jiān)控,比如 Error 或者 time out 字段都可以進(jìn)行自定義;算是我的第一個真正的Python腳本,自己感覺還是比較臃腫,不過打算放到blog上記錄一下(還是初學(xué)者,大神們勿噴哈),真心希望博友們能夠再指點(diǎn)一下(現(xiàn)在記錄每次的文件大小值是輸出到了一個文件中,并且里面還嵌套了有shell命令,這些我認(rèn)為都是可以優(yōu)化掉的吧,只是現(xiàn)在我還不知道怎么做);告警是基于zabbix,自定義的模板是120s執(zhí)行一次
#!/usr/local/bin/python3.5 ###Destription: 實(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) ##判斷過程:文件是否存在---判斷存儲日志大小的文件是否存在---判斷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): ###判斷存儲文件內(nèi)容大小的文件是否存在 if os.path.isfile(file_number): ####存在則讀取文件size大小,賦值給seek_number seek_number = int(linecache.getline(file_number, 1)) ####然后繼續(xù)判斷存儲的文件大小與現(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()
以上所述是小編給大家介紹的Python腳本實(shí)時處理log文件腳本,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
基于Python實(shí)現(xiàn)簡單的人臉識別系統(tǒng)
這篇文章主要介紹了如何通過Python實(shí)現(xiàn)一個簡單的人臉識別系統(tǒng),文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定的幫助,感興趣的可以跟隨小編一起試一試2022-01-01python爬蟲框架scrapy實(shí)戰(zhàn)之爬取京東商城進(jìn)階篇
這篇文章主要給大家介紹了利用python爬蟲框架scrapy爬取京東商城的相關(guān)資料,文中給出了詳細(xì)的代碼介紹供大家參考學(xué)習(xí),并在文末給出了完整的代碼,需要的朋友們可以參考學(xué)習(xí),下面來一起看看吧。2017-04-04Pandas數(shù)據(jù)類型自行變換及數(shù)據(jù)類型轉(zhuǎn)換失敗問題分析與解決
這篇文章主要介紹了Pandas數(shù)據(jù)類型自行變換及數(shù)據(jù)類型轉(zhuǎn)換失敗問題分析與解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06全面剖析Python的Django框架中的項(xiàng)目部署技巧
這篇文章主要全面剖析了Python的Django框架的部署技巧,包括Fabric等自動化部署和建立單元測試等方面,強(qiáng)烈推薦!需要的朋友可以參考下2015-04-04pygame+opencv實(shí)現(xiàn)讀取視頻幀的方法示例
由于pygame.movie.Movie.play()只支持MPEG格式的視頻,所以決定使用與opencv讀取視頻幀的畫面,本文就詳細(xì)的介紹了pygame+opencv實(shí)現(xiàn)讀取視頻幀,感興趣的可以了解一下2021-12-12