python实现实时监控文件的方法_python

在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决,比如要监控nginx的$request_time和$upstream_response_time时间,分析出最耗时的请求,然后去改进代码,这时就要对日志进行实时分析了,发现时间长的语句就要报警出来,提醒开发人员要关注,当然这是其中一个应用场景,通过这种监控方式还可以应用到任何需要判断或分析文件的地方,所以今天我们就来看看如何用python实现实时监控文件,我给三个方法实例::

第一种:

这个是最简单的和容易理解的,因为大家都知道linux下有tail命令,所以你可以直接用Popen()函数去调用这个命令来执行获取输出,代码如下:

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对文件的操作来实现,用文件对象的tell(), seek()方法分别得到当前文件位置和要移动到的位置,代码如下:

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

第三种:

利用python的 yield来实现一个生成器函数,然后调用这个生成器函数,这样当日志文件有变化时就打印新的行,代码如下:

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()函数的用法,这个函数接收2个参数:file.seek(off, whence=0),从文件中移动off个操作标记(文件指针),正数往结束方向移动,负数往开始方向移动。如果设定了whence参数,就以whence设定的起始位为准,0代表从头开始,1代表当前位置,2代表文件最末尾位置。

以上就是三个常用方法,具体日志分析的代码大家可以根据自己的业务逻辑去实现,完毕。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索python实时监控
python监控文件
python 实时监控日志、python 实时监控、python 实时监控文件、python实时监控系统、java实现实时监控系统,以便于您获取更多的相关知识。

时间: 2024-09-15 00:17:33

python实现实时监控文件的方法_python的相关文章

python自动格式化json文件的方法_python

本文实例讲述了python自动格式化json文件的方法.分享给大家供大家参考.具体如下: 这里主要实现将代码混乱的json文件格式化. 还有一小堆python常用算法代码 完整实例代码点击此处本站下载. class JsonFormatter: def __init__(self,intend=4,name=""): self.name=name self.intend=intend self.stack=[] self.obj=None self.source=self.get_so

Python脚本实时处理log文件的方法_python

这个Python脚本是用来对实时文件的内容监控,比如 Error 或者 time out 字段都可以进行自定义:算是我的第一个真正的Python脚本,自己感觉还是比较臃肿,不过打算放到blog上记录一下(还是初学者,大神们勿喷哈),真心希望博友们能够再指点一下(现在记录每次的文件大小值是输出到了一个文件中,并且里面还嵌套了有shell命令,这些我认为都是可以优化掉的吧,只是现在我还不知道怎么做):告警是基于zabbix,自定义的模板是120s执行一次 #!/usr/local/bin/pytho

Python实时监控文件3种方法

在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决,比如要监控nginx的$request_time和$upstream_response_time时间,分析出最耗时的请求,然后去改进代码,这时就要对日志进行实时分析了,发现时间长的语句就要报警出来,提醒开发人员要关注,当然这是其中一个应用场景,通过这种监控方式还可以应用到任何需要判断或分析文件的地方,所以今天我们就来看看如何用python实现实时监

Python实现扫描指定目录下的子目录及文件的方法_python

本文介绍了使用Python来扫描指定目录下的文件,或者匹配指定后缀和前缀的函数.步骤如下: 如果要扫描指定目录下的文件,包括子目录,需要调用scan_files("/export/home/test/") 如果要扫描指定目录下的特定后缀的文件(比如jar包),包括子目录,调用scan_files("/export/home/test/", postfix=".jar") 如果要扫描指定目录下的特定前缀的文件(比如test_xxx.py),包括子目

python保存字符串到文件的方法

  本文实例讲述了python保存字符串到文件的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 def save(filename, contents): fh = open(filename, 'w') fh.write(contents) fh.close() save('file.name', 'some stuff') 希望本文所述对大家的Python程序设计有所帮助.

python通过ssh-powershell监控windows的方法

  本文实例讲述了python通过ssh-powershell监控windows的方法.分享给大家供大家参考.具体分析如下: 对于服务器的监控来说,监控linux不管是自己动手写脚本还是用一些开源的工具比如nagios,zenoss什么的.但毕竟还是有些公司有windows做服务器的,相对linux来说,windows没有方便的shell,cmd下提供的命令对于监控来说远远没有linux方便.但是现在windows上如果安装了powershell(win7,2008自带),就比以前方便多了,li

Python格式化css文件的方法_python

本文实例讲述了Python格式化css文件的方法.分享给大家供大家参考.具体实现方法如下: import string, sys import re, StringIO TAB=4 def format(ss): f = open (ss, "r") data = f.read() f.close() dlen = len(data) i = 0 buf = StringIO.StringIO() start = 0 while i < dlen: if data[i] == '

Python使用xlrd读取Excel格式文件的方法_python

本文实例讲述了Python使用xlrd读取Excel格式文件的方法.分享给大家供大家参考.具体如下: 使用xlrd能够很方便的读取excel文件内容,而且这是个跨平台的库,能够在windows,linux/unix,等平台上面使用,代码如下: import xlrd fname = "sample.xls" bk = xlrd.open_workbook(fname) shxrange = range(bk.nsheets) try: sh = bk.sheet_by_name(&qu

Python遍历目录中的所有文件的方法_python

os.walk生成器os.walk(PATH), PATH是个文件夹路径,当然可以用.或者../这样啦. 返回的是个三元元组为元素的列表, 每个元素代表了一个文件夹下的内容.第一个就是当前文件夹下内容. 返回的三元元组代表(该工作文件夹, 该文件夹下的文件夹的列表, 该文件夹下文件的列表). 所以, 获得所有子文件夹, 就是(d代表这三元元组): os.path.join(d[0],d[1]); 获得所有子文件, 就是: os.path.join(d[0],d[2]); 以下例子使用了两套循环,