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 Trie树实现字典排序
Mar 28 Python
wxpython中利用线程防止假死的实现方法
Aug 11 Python
Python fileinput模块使用介绍
Nov 30 Python
Python入门_浅谈数据结构的4种基本类型
May 16 Python
Python实现公历(阳历)转农历(阴历)的方法示例
Aug 22 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
python实现mysql的读写分离及负载均衡
Feb 04 Python
详解Python Qt的窗体开发的基本操作
Jul 14 Python
Python3.7实现验证码登录方式代码实例
Feb 14 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
Jun 01 Python
python中的class_static的@classmethod的巧妙用法
Jun 22 Python
Python 绘制多因子柱状图
May 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
zend framework多模块多布局配置
2011/02/26 PHP
php以post形式发送xml的方法
2014/11/04 PHP
Laravel5中防止XSS跨站攻击的方法
2016/10/10 PHP
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
5分钟理解JavaScript中this用法分享
2013/11/09 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
轻松创建nodejs服务器(3):代码模块化
2014/12/18 NodeJs
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
Jquery1.9.1源码分析系列(十五)动画处理之外篇
2015/12/04 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
javascript闭包概念简单解析(推荐)
2016/06/03 Javascript
jQuery Easyui datagrid/treegrid 清空数据
2016/07/09 Javascript
纯JS打造网页中checkbox和radio的美化效果
2016/10/13 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
脚手架vue-cli工程webpack的作用和特点
2018/09/29 Javascript
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
Python中删除文件的程序代码
2011/03/13 Python
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
selenium+python自动化测试之环境搭建
2019/01/23 Python
django 连接数据库 sqlite的例子
2019/08/14 Python
基于python监控程序是否关闭
2020/01/14 Python
Python对wav文件的重采样实例
2020/02/25 Python
Python运行异常管理解决方案
2020/03/09 Python
服装电子商务创业计划书
2014/01/30 职场文书
森林病虫害防治方案
2014/06/02 职场文书
升学宴学生答谢词
2015/01/05 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
暖春观后感
2015/06/08 职场文书
孔繁森观后感
2015/06/10 职场文书
《童年的发现》教学反思
2016/02/18 职场文书