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


Posted in Python onAugust 26, 2016

在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决,比如要监控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实现在Linux系统下更改当前进程运行用户
Feb 04 Python
python使用socket向客户端发送数据的方法
Apr 29 Python
python实现斐波那契数列的方法示例
Jan 12 Python
python 实现创建文件夹和创建日志文件的方法
Jul 07 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
Python解析json代码实例解析
Nov 25 Python
基于Python共轭梯度法与最速下降法之间的对比
Apr 02 Python
matlab中二维插值函数interp2的使用详解
Apr 22 Python
Django之富文本(获取内容,设置内容方式)
May 21 Python
详解Python利用configparser对配置文件进行读写操作
Nov 03 Python
教你使用pyinstaller打包Python教程
May 27 Python
python神经网络学习 使用Keras进行简单分类
May 04 Python
Python爬取京东的商品分类与链接
Aug 26 #Python
Python设计模式之抽象工厂模式
Aug 25 #Python
简单谈谈python中的Queue与多进程
Aug 25 #Python
利用Python自动监控网站并发送邮件告警的方法
Aug 24 #Python
巧用python和libnmapd,提取Nmap扫描结果
Aug 23 #Python
Python中属性和描述符的正确使用
Aug 23 #Python
Python实现基本线性数据结构
Aug 22 #Python
You might like
MVC模式的PHP实现
2006/10/09 PHP
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
2010/06/09 PHP
解析PHP的session过期设置
2013/06/29 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
php生成过去100年下拉列表的方法
2015/07/20 PHP
php使用SAE原生Mail类实现各种类型邮件发送的方法
2016/10/10 PHP
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
兼容IE和FF的图片上传前预览js代码
2013/05/28 Javascript
js的window.showModalDialog及window.open用法实例分析
2015/01/29 Javascript
在JavaScript应用中实现延迟加载的方法
2015/06/25 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
bootstrap table复杂操作代码
2016/11/01 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
微信小程序实现弹幕墙(祝福墙)
2020/11/18 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
Python首次安装后运行报错(0xc000007b)的解决方法
2016/10/18 Python
Windows系统下PhantomJS的安装和基本用法
2018/10/21 Python
详解Matplotlib绘图之属性设置
2019/08/23 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
2020/02/09 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
海淘零差价,宝贝全球购: 宝贝格子
2016/08/24 全球购物
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
年度考核评语
2014/01/19 职场文书
综合办公室主任岗位职责
2014/04/13 职场文书
2014法院四风问题对照检查材料思想汇报
2014/10/04 职场文书
房产协议书范本
2014/10/18 职场文书
打架检讨书
2015/01/27 职场文书
演讲比赛主持词
2015/06/29 职场文书
建议书的格式及范文
2015/09/14 职场文书
创业计划书之冷饮店
2019/09/27 职场文书
浅谈:电影《孔子》观后感(范文)
2019/10/14 职场文书
python画条形图的具体代码
2022/04/20 Python