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解释器相关安装方法
Oct 12 Python
使用Python更换外网IP的方法
Jul 09 Python
Sanic框架基于类的视图用法示例
Jul 18 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
Jul 31 Python
Python单向链表和双向链表原理与用法实例详解
Aug 31 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
python selenium 查找隐藏元素 自动播放视频功能
Jul 24 Python
django foreignkey(外键)的实现
Jul 29 Python
python实现超市商品销售管理系统
Nov 22 Python
python错误调试及单元文档测试过程解析
Dec 19 Python
使用matlab 判断两个矩阵是否相等的实例
May 11 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
Jun 15 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编程中八种常见的文件操作方式
2006/11/19 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
2014/05/10 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
PHP实现的json类实例
2015/07/28 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
2017/07/03 PHP
javascript string字符串优化问题
2011/07/31 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
JS中的==运算: [''] == false —>true
2016/07/24 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
[05:31]DOTA2英雄梦之声_第08期_莉娜
2014/06/23 DOTA
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
python 全局变量的import机制介绍
2017/09/07 Python
Python实现FTP弱口令扫描器的方法示例
2019/01/31 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
django2笔记之路由path语法的实现
2019/07/17 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
雅萌 (YA-MAN) :日本美容家电领域的龙头企业
2017/05/12 全球购物
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
幼儿园的门卫岗位职责
2014/04/10 职场文书
机械系毕业生求职信
2014/05/28 职场文书
承诺书格式范文
2014/06/03 职场文书
房屋出租委托书格式
2014/09/23 职场文书
工程部文员岗位职责
2015/02/04 职场文书
国际贸易实训总结
2015/08/03 职场文书
Python趣味挑战之实现简易版音乐播放器
2021/05/28 Python
使用CSS连接数据库的方式
2022/02/28 HTML / CSS
Kubernetes部署实例并配置Deployment、网络映射、副本集
2022/04/01 Servers