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提取页面内url列表的方法
May 25 Python
python搭建虚拟环境的步骤详解
Sep 27 Python
对Python进行数据分析_关于Package的安装问题
May 22 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
python中hashlib模块用法示例
Oct 30 Python
修复 Django migration 时遇到的问题解决
Jun 14 Python
django的ORM操作 增加和查询
Jul 26 Python
简单分析python的类变量、实例变量
Aug 23 Python
python实现两个字典合并,两个list合并
Dec 02 Python
python如何写出表白程序
Jun 01 Python
Python连接Mysql进行增删改查的示例代码
Aug 03 Python
Django如何重置migration的几种情景
Feb 24 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中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
2013/06/21 PHP
php像数组一样存取和修改字符串字符
2014/03/21 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
Ext 今日学习总结
2010/09/19 Javascript
jQuery学习笔记 更改jQuery对象
2012/09/19 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
jQuery 选择符详细介绍及整理
2016/12/02 Javascript
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
js实现小星星游戏
2020/03/23 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
2020/10/28 Javascript
python操作日期和时间的方法
2014/03/11 Python
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
python实现字符串加密成纯数字
2019/03/19 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
基于Python的图像数据增强Data Augmentation解析
2019/08/13 Python
python实现快递价格查询系统
2020/03/03 Python
Django用户认证系统如何实现自定义
2020/11/12 Python
英国派对礼服和连衣裙购物网站:TFNC London
2018/07/07 全球购物
韩国保养品、日本药妆购物网:小三美日
2018/12/30 全球购物
网络工程师个人的自我评价范文
2013/10/01 职场文书
元旦活动感言
2014/03/08 职场文书
幼儿园教师的考核评语
2014/04/18 职场文书
C++程序员求职信
2014/05/07 职场文书
授权委托书格式
2014/07/31 职场文书
民事诉讼代理委托书
2014/10/08 职场文书
2014小学数学教师个人工作总结
2014/12/18 职场文书
三八节祝酒词
2015/08/11 职场文书
党风廉政建设心得体会(2016最新版)
2016/01/22 职场文书
SpringBoot整合minio快速入门教程(代码示例)
2022/04/03 Java/Android