设为首页 加入收藏

TOP

监控Puppet日志的Python脚本
2014-11-23 21:36:08 来源: 作者: 【 】 浏览:15
Tags:监控 Puppet 日志 Python 脚本

监控Puppet日志的Python脚本,供参考



# -*- coding: utf-8 -*-


__author__ = 'River'


import timeit,os


import re,time


'''


'''


#被监控的文件


log_file="/var/log/messages"


#记录读取的行数


line_file="/var/log/line.log"


##计算文件行数


def linecount(log_file):


count = 0


with open (log_file,'rb') as thefile:


while 1:


buffer = thefile.read(65536)


if not buffer:


break


count += buffer.count('\n')#通过读取换行符计算


return count


try:


##宁愿重复报警,也不能遗漏报警,上次读取的结尾初始化为50%文件行数


end_line=int(linecount(log_file)*0.5)


while 1:


with open (line_file,'r') as fileHandle_line:


try:


#获取上次记录的读取位置


start_line_record=fileHandle_line.readlines()[0:1][0].strip()


start_line = int(start_line_record)


except:


#start_line=int(end_line*0.5)


start_line=int(linecount(log_file)*0.5)


with open (log_file,'r') as fileHandle_log:


try:


fileList = fileHandle_log.readlines()[start_line:]


end_line=start_line


for line in fileList:


end_line=end_line+1


#匹配上正则规则


if re.match(r".*puppet-agent.*\(\/Stage",line):


#过滤出需要的文字:时间、主机名、变更内容


tmp_list=line.strip().split(" ")


action_time=tmp_list[0]+tmp_list[1]+" "+tmp_list[2]+" "+tmp_list[3]


hostname=tmp_list[4]


change=line.strip().split("(")[1]


print action_time +" "+hostname+" "+change


else:


continue


fileList=[]


with open (line_file,'w') as fileHandle_line_w:


#保存本次读到的文件位置


fileHandle_line_w.write(str(end_line))


except:


#start_line=int(end_line*0.5)


fileHandle_line_w.write(str(end_line))


raise "ERROR 读取文件失败%s" %(log_file)


#以5s为间隔,再次从上次记录的位置读取文件


time.sleep(5)


except:


with open (line_file,'w') as fileHandle_line_w:


#异常时保存本次读到的文件位置


fileHandle_line_w.write(str(end_line))


Puppet 学习系列:


相关阅读:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux 内核的测试和调试(1) 下一篇Shell+Python实现简单的链路监控

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: