欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實現(xiàn)實時監(jiān)控文件的方法

 更新時間:2016年08月26日 15:14:25   投稿:lijiao  
這篇文章主要為大家詳細介紹了python實現(xiàn)實時監(jiān)控文件的3種方法,感興趣的小伙伴們可以參考一下

在業(yè)務(wù)穩(wěn)定性要求比較高的情況下,運維為能及時發(fā)現(xiàn)問題,有時需要對應(yīng)用程序的日志進行實時分析,當符合某個條件時就立刻報警,而不是被動等待出問題后去解決,比如要監(jiān)控nginx的$request_time和$upstream_response_time時間,分析出最耗時的請求,然后去改進代碼,這時就要對日志進行實時分析了,發(fā)現(xiàn)時間長的語句就要報警出來,提醒開發(fā)人員要關(guān)注,當然這是其中一個應(yīng)用場景,通過這種監(jiān)控方式還可以應(yīng)用到任何需要判斷或分析文件的地方,所以今天我們就來看看如何用python實現(xiàn)實時監(jiān)控文件,我給三個方法實例::

第一種:

這個是最簡單的和容易理解的,因為大家都知道linux下有tail命令,所以你可以直接用Popen()函數(shù)去調(diào)用這個命令來執(zhí)行獲取輸出,代碼如下:

logfile='access.log'
command='tail -f ‘+logfile+'|grep “timeout”‘
popen=subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
while True:
line=popen.stdout.readline().strip()
print line

第二種:

采用python對文件的操作來實現(xiàn),用文件對象的tell(), seek()方法分別得到當前文件位置和要移動到的位置,代碼如下:

import time
file = open(‘a(chǎn)ccess.log')
while 1:
where = file.tell()
line = file.readline()
if not line:
time.sleep(1)
file.seek(where)
else:
print line,

第三種:

利用python的 yield來實現(xiàn)一個生成器函數(shù),然后調(diào)用這個生成器函數(shù),這樣當日志文件有變化時就打印新的行,代碼如下:

import time
def follow(thefile):
thefile.seek(0,2)
while True:
line = thefile.readline()
if not line:
time.sleep(0.1)
continue
yield line
if __name__ == ‘__main__':
logfile = open(“access-log”,”r”)
loglines = follow(logfile)
for line in loglines:
print line,

最后解釋下seek()函數(shù)的用法,這個函數(shù)接收2個參數(shù):file.seek(off, whence=0),從文件中移動off個操作標記(文件指針),正數(shù)往結(jié)束方向移動,負數(shù)往開始方向移動。如果設(shè)定了whence參數(shù),就以whence設(shè)定的起始位為準,0代表從頭開始,1代表當前位置,2代表文件最末尾位置。

以上就是三個常用方法,具體日志分析的代碼大家可以根據(jù)自己的業(yè)務(wù)邏輯去實現(xiàn),完畢。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論