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 NLP入门教程
Dec 25 Python
浅谈Django的缓存机制
Aug 23 Python
python消除序列的重复值并保持顺序不变的实例
Nov 08 Python
Python3之字节串bytes与字节数组bytearray的使用详解
Aug 27 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
Nov 30 Python
python绘制彩虹图
Dec 16 Python
Python 列表的清空方式
Jan 13 Python
Python基于QQ邮箱实现SSL发送
Apr 26 Python
Python压缩模块zipfile实现原理及用法解析
Aug 14 Python
python如何实时获取tcpdump输出
Sep 16 Python
Python中openpyxl实现vlookup函数的实例
Oct 28 Python
python3.9和pycharm的安装教程并创建简单项目的步骤
Feb 03 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
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
使用php验证复选框有效性的示例
2013/11/13 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
php银联网页支付实现方法
2015/03/04 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
解决表单中第一个非隐藏的元素获得焦点的一个方案
2009/10/26 Javascript
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
Javascript中的Prototype到底是什么
2016/02/16 Javascript
js获取ip和地区
2017/03/10 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
Python中内建函数的简单用法说明
2016/05/05 Python
python下载文件记录黑名单的实现代码
2017/10/24 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
对python周期性定时器的示例详解
2019/02/19 Python
详解Python3 基本数据类型
2019/04/19 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
python pycharm最新版本激活码(永久有效)附python安装教程
2020/09/18 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
python学习之使用Matplotlib画实时的动态折线图的示例代码
2021/02/25 Python
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
英国床和浴室商场:Bed & Bath Emporium
2018/05/20 全球购物
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
个人培训自我鉴定
2014/03/28 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
python实现商品进销存管理系统
2022/05/30 Python
SQL bool盲注和时间盲注详解
2022/07/23 SQL Server