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实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
Jun 04 Python
浅谈Python中函数的参数传递
Jun 21 Python
Python实现pdf文档转txt的方法示例
Jan 19 Python
对Python实现简单的API接口实例讲解
Dec 10 Python
Python 调用 zabbix api的方法示例
Jan 06 Python
python 列表输出重复值以及对应的角标方法
Jun 11 Python
使用python进行广告点击率的预测的实现
Jul 04 Python
Python中zipfile压缩文件模块的基本使用教程
Jun 14 Python
python利用tkinter实现图片格式转换的示例
Sep 28 Python
python3中编码获取网页的实例方法
Nov 16 Python
python 制作一个gui界面的翻译工具
May 14 Python
pandas中关于apply+lambda的应用
Feb 28 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
模仿OSO的论坛(一)
2006/10/09 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
用PHP写的一个冒泡排序法的函数简单实例
2016/05/26 PHP
CodeIgniter框架基本增删改查操作示例
2017/03/23 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
详解php实现页面静态化原理
2017/06/21 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
js 变量类型转换常用函数与代码[比较全]
2009/12/01 Javascript
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
js格式化时间和js格式化时间戳示例
2014/02/10 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
2014/09/01 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
少女风vue组件库的制作全过程
2019/05/15 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
Python常用列表数据结构小结
2014/08/06 Python
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
浅析Python中的多进程与多线程的使用
2015/04/07 Python
老生常谈Python进阶之装饰器
2017/05/11 Python
Python排序搜索基本算法之希尔排序实例分析
2017/12/09 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
教师的实习自我鉴定
2013/12/17 职场文书
党组织公开承诺书
2014/03/29 职场文书
经典导游欢迎词
2015/01/26 职场文书
新闻通讯稿范文
2015/07/22 职场文书
Python 用户输入和while循环的操作
2021/05/23 Python
python pygame入门教程
2021/06/01 Python