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中optparse模块使用浅析
Jan 01 Python
浅谈python中的getattr函数 hasattr函数
Jun 14 Python
详解Python的collections模块中的deque双端队列结构
Jul 07 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
Nov 29 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
python web.py开发httpserver解决跨域问题实例解析
Feb 12 Python
Python判断变量名是否合法的方法示例
Jan 28 Python
解决Pandas的DataFrame输出截断和省略的问题
Feb 08 Python
python批量处理txt文件的实例代码
Jan 13 Python
Python 没有main函数的原因
Jul 10 Python
Python爬虫之Selenium实现关闭浏览器
Dec 04 Python
Python制作春联的示例代码
Jan 22 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
php使用websocket示例详解
2014/03/12 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
JS 动态获取节点代码innerHTML分析 [IE,FF]
2009/11/30 Javascript
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
location对象的属性和方法应用(解析URL)
2013/04/12 Javascript
JavaScript分秒倒计时器实现方法
2015/02/02 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
js智能获取浏览器版本UA信息的方法
2016/08/08 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
详解在React里使用"Vuex"
2018/04/02 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
让你30分钟快速掌握vue3教程
2020/10/26 Javascript
python pickle 和 shelve模块的用法
2013/09/16 Python
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
python使用mysql数据库示例代码
2017/05/21 Python
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
python版大富翁源代码分享
2018/11/19 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
python飞机大战 pygame游戏创建快速入门详解
2019/12/17 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
css3实现3d旋转动画特效
2015/03/10 HTML / CSS
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
HTML5 canvas基本绘图之图形变换
2016/06/27 HTML / CSS
简历中个人求职的自我评价模板
2013/11/29 职场文书
高一数学教学反思
2014/02/07 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
小升初自荐信怎么写
2015/03/26 职场文书
教师聘用意向书
2015/05/11 职场文书
新闻报道稿范文
2015/07/23 职场文书
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python