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中类型关系和继承关系实例详解
May 25 Python
python避免死锁方法实例分析
Jun 04 Python
浅谈Python浅拷贝、深拷贝及引用机制
Dec 15 Python
Python爬取qq music中的音乐url及批量下载
Mar 23 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
May 19 Python
Python中的Numpy矩阵操作
Aug 12 Python
python实现根据指定字符截取对应的行的内容方法
Oct 23 Python
python  文件的基本操作 菜中菜功能的实例代码
Jul 17 Python
Django工程的分层结构详解
Jul 18 Python
关于pytorch中全连接神经网络搭建两种模式详解
Jan 14 Python
Python3.7在anaconda里面使用IDLE编译器的步骤详解
Apr 29 Python
Python 串口通信的实现
Sep 29 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
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
推荐25款php中非常有用的类库
2014/09/29 PHP
PHP实现的简单缓存类
2015/07/29 PHP
php导出生成word的方法
2015/12/25 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
新闻内页-JS分页
2006/06/07 Javascript
jquery的$getjson调用并获取远程的JSON字符串问题
2012/12/10 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
Node.js查找当前目录下文件夹实例代码
2017/03/07 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
详解JS中的attribute属性
2017/04/25 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
JS简单实现动态添加HTML标记的方法示例
2018/04/08 Javascript
微信小程序倒计时功能实例代码
2018/07/17 Javascript
vue基础之事件v-onclick="函数"用法示例
2019/03/11 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
python 图片验证码代码
2008/12/07 Python
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
python 杀死自身进程的实现方法
2019/07/01 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
类成员函数的重载、覆盖和隐藏区别
2016/01/27 面试题
文字自荐书范文
2014/02/10 职场文书
歌唱比赛主持词
2014/03/18 职场文书
优秀员工评优方案
2014/06/13 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书
申报优秀教师材料
2014/12/16 职场文书
婚前保证书范文
2015/02/28 职场文书
2015年七七事变78周年纪念活动方案
2015/05/06 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书
班主任培训研修日志
2015/11/13 职场文书
Python爬虫之爬取二手房信息
2021/04/27 Python