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爬虫之抓取百度贴吧并存储到本地txt文件改进版
Nov 06 Python
Python 实现一个颜色色值转换的小工具
Dec 06 Python
python实现对excel进行数据剔除操作实例
Dec 07 Python
Python实现螺旋矩阵的填充算法示例
Dec 28 Python
python中将正则过滤的内容输出写入到文件中的实例
Oct 21 Python
python消费kafka数据批量插入到es的方法
Dec 27 Python
基于python中__add__函数的用法
Nov 25 Python
利用Python自动化操作AutoCAD的实现
Apr 01 Python
在python中利用pycharm自定义代码块教程(三步搞定)
Apr 15 Python
python sitk.show()与imageJ结合使用常见的问题
Apr 20 Python
Python如何批量生成和调用变量
Nov 21 Python
浅析Python中的套接字编程
Jun 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和ACCESS写聊天室(八)
2006/10/09 PHP
深入理解:单一入口、MVC、ORM、CURD、ActiveRecord概念
2013/06/06 PHP
php中动态调用函数的方法
2015/03/16 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
php英文单词统计器
2016/06/23 PHP
PHP使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
深入解析JavaScript中的变量作用域
2013/12/06 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
详解JavaScript中循环控制语句的用法
2015/06/03 Javascript
每天一篇javascript学习小结(Boolean对象)
2015/11/12 Javascript
AngularJS基于MVC的复杂操作实例讲解
2017/12/31 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
2018/03/05 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
Layui数据表格之单元格编辑方式
2019/10/26 Javascript
微信小程序新闻网站详情页实例代码
2020/01/10 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
Python 抓取动态网页内容方案详解
2014/12/25 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
python实现图片二值化及灰度处理方式
2019/12/07 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
美国价格实惠的在线眼镜网站:Zeelool
2020/12/25 全球购物
物业保安员岗位职责
2014/03/14 职场文书
销售总经理岗位职责
2014/03/15 职场文书
保护环境倡议书
2014/04/14 职场文书
青年教师师德演讲稿
2014/08/26 职场文书