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 BeautifulSoup库抓取58手机维修信息
Nov 21 Python
python使用mysql数据库示例代码
May 21 Python
如何优雅地改进Django中的模板碎片缓存详解
Jul 04 Python
对python打乱数据集中X,y标签对的方法详解
Dec 14 Python
python面向对象实现名片管理系统文件版
Apr 26 Python
Flask框架模板继承实现方法分析
Jul 31 Python
Python多线程Threading、子线程与守护线程实例详解
Mar 24 Python
Selenium webdriver添加cookie实现过程详解
Aug 12 Python
python与js主要区别点总结
Sep 13 Python
浅谈Python __init__.py的作用
Oct 28 Python
python 制作磁力搜索工具
Mar 04 Python
PyQt5 显示超清高分辨率图片的方法
Apr 11 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获得用户ip地址的比较不错的方法
2014/02/08 PHP
php制作文本式留言板
2015/03/18 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
jQuery中调用WebService方法小结
2011/03/28 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
js函数调用常用方法详解
2012/12/03 Javascript
求数组最大最小值方法适用于任何数组
2013/08/16 Javascript
jquery实现的下拉和收缩效果示例
2014/08/21 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
2015/08/24 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
jquery ui dialog替代confirm实例分析
2016/01/25 Javascript
Angular下H5上传图片的方法(可多张上传)
2017/01/09 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
微信小程序上线发布流程图文详解
2019/05/06 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
Python 时间操作例子和时间格式化参数小结
2014/04/24 Python
Python pickle模块用法实例
2015/04/14 Python
对python程序内存泄漏调试的记录
2018/06/11 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
python tornado使用流生成图片的例子
2019/11/18 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
python实现斗地主分牌洗牌
2020/06/22 Python
配置H5的滚动条样式的示例代码
2018/03/09 HTML / CSS
初婚未育未抱养证明
2014/01/12 职场文书
入党自我鉴定
2014/03/25 职场文书
2015毕业生实习工作总结
2014/12/12 职场文书
环保证明
2015/06/23 职场文书
如何使用Maxwell实时同步mysql数据
2021/04/08 MySQL
go语言求任意类型切片的长度操作
2021/04/26 Golang
Python实战之实现简易的学生选课系统
2021/05/25 Python