python即時處理log檔案指令碼

來源:互聯網
上載者:User

標籤:ase   for   資訊   自己   adl   日誌   line   初學者   大小   

這個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檔案指令碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.