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解析xml文件实例分享
Dec 04 Python
python生成指定长度的随机数密码
Jan 23 Python
python实现从web抓取文档的方法
Sep 26 Python
用Python从零实现贝叶斯分类器的机器学习的教程
Mar 31 Python
python结合API实现即时天气信息
Jan 19 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
Python模拟登录的多种方法(四种)
Jun 01 Python
Python笔记之观察者模式
Nov 20 Python
Python和Sublime整合过程图示
Dec 25 Python
在 Python 中接管键盘中断信号的实现方法
Feb 04 Python
Python ORM框架Peewee用法详解
Apr 29 Python
Python如何使用ConfigParser读取配置文件
Nov 12 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
dedecms后台验证码总提示错误的解决方法
2007/03/21 PHP
PHP array_multisort()函数的使用札记
2011/07/03 PHP
php curl post 时出现的问题解决
2014/01/30 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
PHP中的output_buffering详细介绍
2014/09/27 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
php有道翻译api调用方法实例
2014/12/22 PHP
PHP巧妙利用位运算实现网站权限管理的方法
2017/03/12 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
nodejs中向HTTP响应传送进程的输出
2017/03/19 NodeJs
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
微信小程序实现提交input信息到后台的方法示例
2019/01/19 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
Python实现字符串逆序输出功能示例
2017/06/24 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
使用pygame编写Flappy bird小游戏
2020/03/14 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
python 进程池pool使用详解
2020/10/15 Python
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
喜诗官方在线巧克力店:See’s Candies
2017/01/01 全球购物
捷克玩具商店:Bambule
2019/02/23 全球购物
毕业生求职找工作的自我评价范文
2013/11/27 职场文书
考试不及格检讨书
2014/01/09 职场文书
开学寄语大全
2014/04/08 职场文书
党员个人自我评价
2015/03/03 职场文书
高中运动会广播稿
2015/08/19 职场文书