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的爬虫程序编写框架Scrapy入门学习教程
Jul 02 Python
python实现下载文件的三种方法
Feb 09 Python
python3 requests中使用ip代理池随机生成ip的实例
May 07 Python
python中实现字符串翻转的方法
Jul 11 Python
python实现键盘控制鼠标移动
Nov 27 Python
python提取log文件内容并画出图表
Jul 08 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
Python3实现mysql连接和数据框的形成(实例代码)
Jan 17 Python
django从后台返回html代码的实例
Mar 11 Python
基于Python中Remove函数的用法讨论
Dec 11 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 Python
matplotlib之pyplot模块实现添加子图subplot的使用
Apr 25 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 学习路线与时间表
2010/02/21 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
微信公众平台消息接口校验与消息接口响应实例
2014/12/23 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
jquery mobile changepage的三种传参方法介绍
2013/09/13 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
Vue左滑组件slider使用详解
2020/08/21 Javascript
[02:41]2015国际邀请赛中国区预选赛观战指南
2015/05/20 DOTA
从零学python系列之教你如何根据图片生成字符画
2014/05/23 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
Python中zip函数如何使用
2020/06/04 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
python 如何快速复制序列
2020/09/07 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
荷兰美妆护肤品海淘网站:Beautinow(中文)
2020/11/22 全球购物
2019年c语言经典面试题目
2016/08/17 面试题
环保建议书200字
2014/05/14 职场文书
项目合作意向书模板
2014/07/29 职场文书
八项规定整改方案
2014/10/01 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
MySql数据库 查询时间序列间隔
2022/05/11 MySQL